为什么数据库重启或崩溃恢复后性能可能瞬间很差?
文章开始前推荐2个学习环境:
1、欢迎使用镜像快速体验PostgreSQL/DuckDB强大功能: 《最好的PostgreSQL学习镜像 》
2、欢迎使用云起实验室: 《免费体验PolarDB开源数据库 》 3、PolarDB开源数据库内核、应用等学习图谱: https://www.aliyun.com/database/openpolardb/activity为什么数据库重启或崩溃恢复后性能可能瞬间很差?
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的存在, 性能基本没有抖动.
为什么数据库重启或崩溃恢复后性能可能瞬间很差?
-
a. 客户端需要大量重建与数据库的连接
-
b. 数据库崩溃恢复或者重启时, shared buffer中没有数据, 所有数据都需要从存储层访问, 存储的性能和内存相差巨大, 因此性能瞬间变差.
-
c. 由于数据库重启或崩溃恢复, 操作系统的page cache中的热数据消失了
-
d. 数据库刚启动时需要处理复杂的启动任务, 所以刚启动时性能差
答案:
-
b
解释:
-
参考本文内容
欢迎关注我的github (https://github.com/digoal/blog) , 学习数据库不迷路. 近期正在写公开课材料, 未来将通过视频号推出, 欢迎关注视频号:文章中的参考文档请点击阅读原文获得.