Redian新闻
>
管理大型 Postgres 数据库的 3 个技巧 | Linux 中国

管理大型 Postgres 数据库的 3 个技巧 | Linux 中国

科技
 
导读:在处理庞大的数据库时,请尝试这些方便的解决方案,以解决常见的问题。                       
本文字数:1850,阅读时长大约:2分钟

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

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

大表

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

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

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

  1. CREATE INDEX ON customers (last_name)

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

  1. CREATE INDEX CONCURRENTLY ON customers (last_name)

添加列

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

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

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

添加列:

  1. ALTER TABLE all_my_exes ADD COLUMN location text

添加默认值:

  1. ALTER TABLE all_my_exes ALTER COLUMN location SET DEFAULT texas()

使用 UPDATE 来添加默认值:

  1. UPDATE all_my_exes SET location = DEFAULT

添加约束条件

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

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

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

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

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

然后在创建后验证它:

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

LCTT 译者 :geekpi
💎💎💎💎
翻译: 1882.5 篇
|
贡献: 3419 天
2013-10-25
2023-03-06
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
2022 年数据库发展总结:中国和海外数据库差距还有多远?科学严格而明晰,但很多时候,而处理的信息量小而失准。印象综合处理信息量大,又容易朦胧模糊,因信息量过大而失准。Arch Linux 的最佳 GUI 包管理器 | Linux 中国英国银行 | NatWest Group 2023 Graduate Programme 开放中,福利待遇优厚最全的生物样本数据库(Biobank)收集;及部分公开数据库的大数据分享纽约时报长篇报道:《普京的战争》使用 ChatGPT AI 从英文文本生成 Linux 命令 | Linux 中国Postgres DevOps 数据库管理员的日常 | Linux 中国每分钟可处理8.14亿笔交易、腾讯云数据库TDSQL刷新TPC-C纪录对国产数据库行业意味着什么?时序数据库的流计算支持一款Linux、数据库、Redis、MongoDB统一管理平台,有点牛逼了!blendOS 的目标:取代所有的 Linux 发行版 | Linux 中国TUXEDO Stellaris 16(Gen5)是目前所能找到的终极 Linux 笔记本电脑 | Linux 中国临床数据库对于临床科研有多重要?如何利用开放的数据库撰写SCI论文?多模数据库、“Serverless 化” | 开源数据库领域解读基于图数据库NebulaGraph的ID Resolution方法与代码示例世界上只有两个 Linux 发行版:Arch Linux 与其它 | Linux 中国数据分析师 - 美国新移民的职业重生,掌握数据库的利器透视华为云云原生数据库的前世今生及未来演进,能给行业带来哪些启发?构建高效的 DevOps 文化的 6 个技巧 | Linux 中国使用 Vector 将 PostgreSQL 日志输出为 Prometheus 指标2022 年最好的投资Andy教授解读数据库的2022:大规模数据库投资大幅放缓、区块链数据库仍然是一个愚蠢的想法律师团队知识管理的3个技巧编写好 Git 提交信息的 11 个技巧 | Linux 中国APISIX Ingress VS Ingress NGINX,详细对比让你一目了然OBS Studio 29 发布,但对 Linux 用户来说变化不大 | Linux 中国迷失的时间(1)--- 观心充分利用你的下一次技术会议的 7 个技巧 | Linux 中国观点丨郭瑜: China provides greater policy support to boost employment慢SQL是如何拖垮数据库的?GNOME 2 的 Linux 文件管理器 Caja | Linux 中国他们才是大师Agustín Hernández:中美洲建筑背景下的未来主义巨构天赋“易昺(bǐng)”,创造历史!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。