博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 10.0 preview 功能增强 - 缓存自动预热, 直达性能巅峰
阅读量:6102 次
发布时间:2019-06-20

本文共 1780 字,大约阅读时间需要 5 分钟。

标签

PostgreSQL , 10.0 , 自动预热缓存


背景

数据库的shared buffer可以用来存储经常使用的数据块,以提升效率。通过LRU算法老化不常用的数据块。

因此在生产数据库中,SHARED BUFFER中通常是热数据。 

数据库如果重启,或者发生主备切换,缓存中的热数据需要从磁盘(或者OS PAGE CACHE)重新载入数据库的shared buffer。

当这个事情发生在业务高峰期时,由于热数据未在数据库缓存中,访问将会变慢,用户的感觉可能是请求变慢了。

为了提升用户体验,减少请求的响应时间的抖动,PostgreSQL 10.0推出了自动预热缓存的技术。

也就是说shared buffer的block list chain会记录下来,下次启动时,自动载入shared buffer.

# pg_autoprewarm.  This a PostgreSQL contrib module which automatically dump all of the  blocknums  present in buffer pool at the time of server shutdown(smart and fast mode  only,  to be enhanced to dump at regular interval.) and load these blocks when  server restarts.  Design:  ------  We have created a BG Worker Auto Pre-warmer which during shutdown dumps all  the  blocknum in buffer pool in sorted order.  Format of each entry is  
. Auto Pre-warmer is started as soon as the postmaster is started we do not wait for recovery to finish and database to reach a consistent state. If there is a "dump_file" to load we start loading each block entry to buffer pool until there is a free buffer. This way we do not replace any new blocks which was loaded either by recovery process or querying clients. Then it waits until it receives SIGTERM to dump the block information in buffer pool. HOW TO USE: ----------- Build and add the pg_autoprewarm to shared_preload_libraries. Auto Pre-warmer process automatically do dumping of buffer pool's block info and load them when restarted. TO DO: ------ Add functionality to dump based on timer at regular interval. And some cleanups. -- Thanks and Regards Mithun C Y EnterpriseDB: http://www.enterprisedb.com

这个patch的讨论,详见邮件组,本文末尾URL。

PostgreSQL社区的作风非常严谨,一个patch可能在邮件组中讨论几个月甚至几年,根据大家的意见反复的修正,patch合并到master已经非常成熟,所以PostgreSQL的稳定性也是远近闻名的。

参考

转载地址:http://blsza.baihongyu.com/

你可能感兴趣的文章
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
ViewPager切换动画PageTransformer使用
查看>>
coco2d-x 基于视口的地图设计
查看>>
C++文件读写详解(ofstream,ifstream,fstream)
查看>>
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
新手如何学习 jQuery?
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
mysql-python模块编译问题解决
查看>>
java 中getDeclaredFields() 与getFields() 的区别
查看>>
熟练掌握doc命令下的文件操作
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
【Linux】linux经常使用基本命令
查看>>
Java 内存区域和GC机制
查看>>
更新代码和工具,组织起来,提供所有博文(C++,2014.09)
查看>>
HTML模块化:使用HTML5 Boilerplate模板
查看>>