背景
1、产品的问题点
- PG 不支持绕过shared buffer的查询和写入
2、问题点背后涉及的技术原理
- When a relation whose size exceeds one-quarter of the buffer pool size (shared_buffers/4) is scanned. In this case, the ring buffer size is 256 KB.
- When the SQL commands listed below are executed. In this case, the ring buffer size is 16 MB.
- COPY FROM command.
- CREATE TABLE AS command.
- CREATE MATERIALIZED VIEW or REFRESH MATERIALIZED VIEW command.
- ALTER TABLE command.
- When an autovacuum performs a vacuum processing. In this case, the ring buffer size is 256 KB.
3、这个问题将影响哪些行业以及业务场景
4、会导致什么问题?
- 大表查询, 写入大量数据(insert into)时可能导致shared buffer里面的热数据被挤出去. 业务高峰期可能带来RT抖动, 影响业务体验, 严重的甚至雪崩.
5、业务上应该如何避免这个坑
- 避免高峰期全表扫描小于四分之一shared buffer的大表
6、业务上避免这个坑牺牲了什么, 会引入什么新的问题
7、数据库未来产品迭代如何修复这个坑
- 期望内核支持绕过shared buffer的查询和写入语法, 或通过会话GUC参数可以控制. 避免大表查询对热数据的影响.