暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一起学PolarDB - 第10期 - 为什么数据库重启或崩溃恢复后性能可能瞬间很差?

原创 digoal 2022-01-20
601

作者

digoal

日期

2022-01-04

标签

PostgreSQL , PolarDB


懂PostgreSQL, 学PolarDB不难, 就好像有九阳神功护体, 可以快速融会贯通.
对于DBA只要学会PolarDB精髓即可.
对于开发者来说不需要学习, 使用PolarDB和PostgreSQL一样.

为什么数据库重启或崩溃恢复后性能可能瞬间很差?

https://www.bilibili.com/video/BV1pP4y177Do/

数据库实例崩溃、重启后性能可能变得很差, 就像烧油的汽车刚刚发动时还没有润滑一样. 原因是崩溃后在数据库shared buffer内的热数据没了, 大概率访问数据需要访问存储, 存储的性能和内存相差巨大, 因此性能瞬间变差.

社区版本:
为了解决启动时没有热数据的问题, PG社区版本引入了预热插件pg_prewarm.
- pg_prewarm (版本11开始也支持自动dump pageid, 自动预热) + pg_buffercache
- https://www.postgresql.org/docs/14/pgbuffercache.html
- https://www.postgresql.org/docs/14/pgprewarm.html

注意:
社区版本存在double cache现象, 如果不重启服务器, 或者未清理page cache, 重启数据库实例后性能影响可能不大, 因为很多数据可能存在于page cache内.

PolarDB:
- 不需要预热, PolarDB 支持 Persistent BufferPool的功能 (目前只有RW节点和standby实例有Persistent BufferPool), 实例重启、崩溃时, 由于Persistent BufferPool的存在, 性能基本没有抖动.
pic

本期问题1:
为什么数据库重启或崩溃恢复后性能可能瞬间很差?
- a. 客户端需要大量重建与数据库的连接
- b. 数据库崩溃恢复或者重启时, shared buffer中没有数据, 所有数据都需要从存储层访问, 存储的性能和内存相差巨大, 因此性能瞬间变差.
- c. 由于数据库重启或崩溃恢复, 操作系统的page cache中的热数据消失了
- d. 数据库刚启动时需要处理复杂的启动任务, 所以刚启动时性能差

答案:
- b

解释:
- 参考本文内容

期望 PostgreSQL 增加什么功能?

PolarDB for PostgreSQL云原生分布式开源数据库

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论