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

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

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

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

关系型数据库 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 allmyexes ADD COLUMN location text

“`

添加默认值:

“`
ALTER TABLE allmyexes ALTER COLUMN location SET DEFAULT texas()

“`

使用 UPDATE 来添加默认值:

“`
UPDATE allmyexes SET location = DEFAULT

“`

添加约束条件

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

“`
ALTER TABLE favoritebands ADD CONSTRAINT namecheck CHECK (name = ‘Led Zeppelin’)

“`

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

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

“`
ALTER TABLE favoritebands ADD CONSTRAINT namecheck CHECK (name = ‘Led Zeppelin’) NOT VALID

“`

然后在创建后验证它:

“`
ALTER TABLE favoritebands VALIDATE CONSTRAINT namecheck

“`

想了解更多?

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中国 荣誉推出

主题测试文章,只做测试使用。发布者:eason,转转请注明出处:https://aicodev.cn/2023/03/06/%e7%ae%a1%e7%90%86%e5%a4%a7%e5%9e%8b-postgres-%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84-3-%e4%b8%aa%e6%8a%80%e5%b7%a7/

(0)
eason的头像eason
上一篇 2023年3月6日
下一篇 2023年3月6日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信