【DB吐槽大会】第6期 - PG Double Cache

简介: 大家好,这里是DB吐槽大会,第6期 - PG Double Cache

背景


1、产品的问题点

  • OS page cache, buffer pool 双重缓存, 存在一定的内存浪费.

2、问题点背后涉及的技术原理

  • PG 的数据的写操作采用buffer IO接口, 在OS层会产生缓存, 最后由IO子系统合并写入块设备. 读操作与之类似.

3、这个问题将影响哪些行业以及业务场景

  • 所有场景

4、会导致什么问题?

  • 内存浪费.
  • 如果OS层的bg write调度没有配置得当会导致IO hang或者大型IO等问题.
  • 无法发挥最大的IO设备带宽潜能.
  • 好处也有一丢丢: OS层的IO合并可以减少总的IO次数.
  • OS有一层cache, 当数据库重启时可以缓冲一下, 不会直接全部打到IO块设备上.
  • 当使用IO延迟较高的块设备时, buffer IO的性能影响较小(buffer write场景).

5、业务上应该如何避免这个坑

  • 基本无解.
  • 使用大一点点的shared buffer并且使用huge page配置.
  • 使用pgfincore插件, 将fd改成adviceFlag = POSIX_FADV_DONTNEED, 会尽快淘汰对应page, 但是并不代表不过os cache层.

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • 无法避免

7、数据库未来产品迭代如何修复这个坑

  • 改造内核, 使用计算存储分离架构, 类似PolarDB, 使用DIO解决



相关文章
|
存储 运维 数据安全/隐私保护
企业级备份软件Veritas NetBackup(NBU) 8.1.1服务端的安装部署
企业级备份软件Veritas NetBackup(NBU) 8.1.1服务端的安装部署
3547 0
企业级备份软件Veritas NetBackup(NBU) 8.1.1服务端的安装部署
|
Oracle 关系型数据库 数据库
实战篇:Oracle 数据坏块的 N 种修复方式
实战篇:Oracle 数据坏块的 N 种修复方式
实战篇:Oracle 数据坏块的 N 种修复方式
|
SQL
记一次不常见到主从延迟问题
Slave_SQL_Running_State: Waiting for dependent transaction to commit 导致的主从延迟
8603 1
|
存储 Oracle 关系型数据库
【数据库-DB2】深入了解DB2 reorg
本文介绍了DB2数据库中reorg操作的重要性,旨在通过重组表数据来消除数据碎片、压缩信息并提高数据访问速度。reorg操作能够根据索引关键字重新排序数据,减少查询I/O次数,提升查询性能。文章详细讲解了reorg的操作步骤、适用场景及注意事项,强调了在执行reorg前后更新统计信息的必要性。
1286 2
|
监控 Java 测试技术
如何解读 jstat 工具输出的 G1 垃圾回收器性能数据?
如何解读 jstat 工具输出的 G1 垃圾回收器性能数据?
|
监控 关系型数据库 MySQL
innodb_buffer_pool_instances 如何根据cpu和内存进行配置
`innodb_buffer_pool_instances` 是用于配置 InnoDB 缓冲池实例数的参数。每个实例都管理缓冲池的一部分,这有助于提高并发性能。通常,你可以根据系统的 CPU 和内存来调整这个参数,以获得更好的性能。 以下是一些建议和步骤,帮助你根据 CPU 和内存进行 `innodb_buffer_pool_instances` 的配置: 1. **了解系统资源:** 首先,了解系统的硬件资源,特别是内存和CPU。检查系统上可用的物理内存和 CPU 核心数量。 2. **考虑每个实例的大小:** 在配置 `innodb_buffer_pool_instances` 时,
861 0
|
数据安全/隐私保护 网络架构
|
SQL 存储 关系型数据库
MySQL主从同步延迟原因与解决方法
MySQL主从同步延迟原因与解决方法
1804 0
|
Oracle 关系型数据库 Java
Oracle sid_name 和service_name的区别
Oracle sid_name 和service_name的区别
969 1
|
Oracle 关系型数据库 数据库
Oracle中的差异增量备份和累积增量备份的区别、rman全备+增量备份常用脚本
Oracle中的差异增量备份和累积增量备份的区别、rman全备+增量备份常用脚本
2489 0