管理大型 Postgres 数据库的 3 个技巧

标签: 管理 postgres 数据库 | 发表时间:2023-03-06 11:30 | 作者:[email protected] (linux)
出处:https://linux.cn/

在处理庞大的数据库时,请尝试这些方便的解决方案,以解决常见的问题。

关系型数据库 PostgreSQL(也被称为 Postgres)已经越来越流行,全球各地的企业和公共部门都在使用它。随着这种广泛的采用,数据库已经变得比以前更大了。在 Crunchy Data,我们经常与 20TB 以上的数据库打交道,而且我们现有的数据库还在继续增长。我的同事 David Christensen 和我收集了一些关于管理拥有巨大表的数据库的技巧。

大表

生产数据库通常由许多具有不同数据、大小和模式的表组成。常见的情况是,最终有一个巨大的、无序的数据库表,远远大于你数据库中的任何其他表。这个表经常存储活动日志或有时间戳的事件,而且对你的应用或用户来说是必要的。

真正的大表会因为很多原因造成挑战,但一个常见的原因是锁。对表的定期维护往往需要锁,但对大表的锁可能会使你的应用瘫痪,或导致堵塞和许多令人头痛的问题。我有一些做基本维护的技巧,比如添加列或索引,同时避免长期运行的锁。

添加索引的问题:在创建索引的过程中锁住表。如果你有一个庞大的表,这可能需要几个小时。

  CREATE INDEX ON customers (last_name)

方案:使用  CREATE INDEX CONCURRENTLY 功能。这种方法将索引创建分成两部分,一部分是短暂的锁定,以创建索引,立即开始跟踪变化,但尽量减少应用阻塞,然后是完全建立该索引,之后查询可以开始使用它。

  CREATE INDEX CONCURRENTLY ON customers (last_name)

添加列

在数据库的使用过程中,添加列是一个常见的请求,但是对于一个巨大的表来说,这可能是很棘手的,同样是由于锁的问题。

问题:当你添加一个新的默认值为一个函数的列时,Postgres 需要重写表。对于大表,这可能需要几个小时。

方案:将操作拆分为多条基本语句,总效果一致,但控制锁的时间。

添加列:

  ALTER TABLE all_my_exes ADD COLUMN location text

添加默认值:

  ALTER TABLE all_my_exes ALTER COLUMN location SET DEFAULT texas()

使用  UPDATE 来添加默认值:

  UPDATE all_my_exes SET location = DEFAULT

添加约束条件

问题: 你想添加一个用于数据验证的检查约束。但是如果你使用直接的方法来添加约束,它将锁定表,同时验证表中的所有现有数据。另外,如果在验证的任何时候出现错误,它将回滚。

  ALTER TABLE favorite_bands ADD CONSTRAINT name_check CHECK (name = 'Led Zeppelin')

方案:告诉 Postgres 这个约束,但不要验证它。在第二步中进行验证。这将在第一步中进行短暂的锁定,确保所有新的/修改过的行都符合约束条件,然后在另一步骤中进行验证,以确认所有现有的数据都通过约束条件。

告诉 Postgres 这个约束,但不要强制执行它:

  ALTER TABLE favorite_bands ADD CONSTRAINT name_check CHECK (name = 'Led Zeppelin') NOT VALID

然后在创建后 验证它:

  ALTER TABLE favorite_bands VALIDATE CONSTRAINT name_check

想了解更多?

David Christensen 和我将在 3 月 9 号到 10 到在加州帕萨迪纳参加 SCaLE 的 Postgres Days。很多来自 Postgres 社区的优秀人士也会在那里。加入我们吧!


via:  https://opensource.com/article/23/2/manage-large-postgres-databases

作者: Elizabeth Garrett Christensen 选题: lkxed 译者: geekpi 校对: wxy

本文由  LCTT 原创编译, Linux中国 荣誉推出

相关 [管理 postgres 数据库] 推荐:

管理大型 Postgres 数据库的 3 个技巧

- - Linux 中国◆开源社区
在处理庞大的数据库时,请尝试这些方便的解决方案,以解决常见的问题. 关系型数据库 PostgreSQL(也被称为 Postgres)已经越来越流行,全球各地的企业和公共部门都在使用它. 随着这种广泛的采用,数据库已经变得比以前更大了. 在 Crunchy Data,我们经常与 20TB 以上的数据库打交道,而且我们现有的数据库还在继续增长.

监控Postgres数据库

- - 数据库 - ITeye博客
官方文档中有关监控的章节:. 这个可以实时监控数据库,但是没有系统cpu和内存图表. 大多数带有系统监控的,都是通过插件实现的,要多安装和配置一些东西. 下面是安装powa的步骤,Centos系统. 在官网下载代码,现在是2.0版,这个版本需要postgresql是9.4以上版本. 我的pg是9.3版,所以下载的1.2.1版本.

Postgres 数据库分析工具

- - CSDN博客数据库推荐文章
Postgres号称是开源免费DBMS最强大的,并且支持二次开发. 本文就该DBMS的分析工具进行讨论. pg_class表记载表和几乎所有有 字段或者是那些类似表的东西. pg_index),序列,视图,复合类型和一些特殊关系类型. 也有pg_index这张表,包含关于索引的一部分信息.    relname(表,索引,视图等的名字); .

postgres创建表分区

- - 数据库 - ITeye博客
       PostgreSQL支持基本的表分区功能.      分区的意思是把逻辑上的一个大表分割成物理上的几块. 某些类型的查询性能可以得到极大提升. 特别是表中访问率较高的行位于一个单独分区或少数几个分区上的情况下. 分区可以减少索引体积从而可以将高使用率部分的索引存放在内存中. 如果索引不能全部放在内存中,那么在索引上的读和写都会产生更多的磁盘访问.

bucardo5.3 postgres主从同步

- - x-marker的博客
在报表应用、olap等领域,bucardo可以把数据实时异步的传输到备库,然后在备库中可以进行数据转换、建临时表、报表等操作,而pg原生的stream replication只能是只读操作,所以bucardo的应用领域还是很广的. 今天分两篇分别记录下pg到pg的主从同步和pg到mysql的主从同步.

Oracle数据库资源管理

- - 技术改变世界 创新驱动中国 - 《程序员》官网
一般来说,Oracle数据库都属于中大型的系统,这类系统的用户会话(Session),小则一两百,多则上千,这些用户会话要求Oracle数据库执行的任何指令都需要耗费系统资源,而系统资源毕竟是宝贵且有限的,一旦突然涌进大量的用户会话,对于有限的资源可能会略显不足. 但这些会话必定有轻重缓急之分,对于重要且紧急的用户会话需求理当获得多一点的系统资源,对于一些不重要或不紧急的用户会话,则可以使用较少的系统资源慢慢处理.

PostgreSQL学习手册(数据库管理)

- - 博客园_首页
    数据库可以被看成是SQL对象(数据库对象)的命名集合,通常而言,每个数据库对象(表、函数等)只属于一个数据库. 不过对于部分系统表而言,如pg_database,是属于整个集群的. 更准确地说,数据库是模式的集合,而模式包含表、函数等SQL对象. 因此完整的对象层次应该是这样的:服务器、数据库、模式、表或其他类型的对象.

用SQL语言管理Oracle数据库

- - CSDN博客推荐文章
1,查看数据库的基本属性:. SELECT dbid 数据库编号,name 数据库名称,db_unique_name 全局名称,created 创建时间,log_mode 归档方式,open_mode 访问方式,platform_name 版本类型 FROM v$database;. 2,查看所有数据库对象的类别和大小:.

spring boot与spring batch、postgres及elasticsearch整合

- - 互联网 - ITeye博客
当系统有大量数据需要从数据库导入elasticsearch时,使用sping batch可以提高导入的效率. 这篇文章使用spring batch将数据从postgres导入elasticsearch. 本文使用spring data jest连接ES(也可以使用spring data elasticsearch连接ES),ES版本为5.5.3.

几个重量级的NoSQL数据库和管理工具

- Joji - ITeye资讯频道
    随着互联网中web 2.0网站的兴起,传统的关系数据库在应付web 2.0网站,特别是超大规模和高并发的SNS类型的web 2.0纯动态网站,已经显得力不从心,暴露了很多难以克服的问题,例如:. High performance - 对数据库高并发读写的需求   . Huge Storage - 对海量数据的高效率存储和访问的需求   .