KingbaseES V8R6 等待事件之LWLock Buffer_IO
等待事件含义
当进程同时尝试访问相同页面时,等待其他进程完成其输入/输出(I/O)操作时,会发生LWLock:BufferIO等待事件。其目的是将同一页读取到共享缓冲区中。
每个共享缓冲区都有一个与LWLock:BufferIO等待事件相关联的I/O锁,每次都必须在共享缓冲区外部检索页。
此锁用于处理多个会话,假如这些会话都需要访问同一块。必须从共享缓冲池外部读取此块,共享缓冲池大小由shared_buffers参数定义。
一旦在共享缓冲池中读取到页面,就会释放LWLock:BufferIO锁。
注意:
LWLock:BufferIO等待事件先于IO:DataFileRead等待事件。从存储读取数据时发生IO:DataFileRead等待事件。
等待事件增加的可能原因
多个后端进程或连接试图访问正在进行I/O活动的同一页面
共享缓冲池的太小,大型或膨胀的索引,需要向共享缓冲池中读取比膨胀前更多的数据。
缺少索引,这迫使数据库引擎从表中读取的页面超过了必要的数量。
检查点出现频率太高或需要刷新太多脏块
试图在同一页面上执行操作的数据库连接突然出现峰值,造成并发争用问题
解决方法
根据等待事件的原因,我们建议采取以下操作:
shared_buffer中的HitRatiio急剧下降和LWLock:BufferIO等待事件之间存在相关性。这种效果可能需要增加shard_buffer大小。还可以应用读写分离集群分摊数据库负载到不同实例。
如果您看到LWLock:BufferIO增加与BufferCacheHitRatio指标下降,则根据您的工作负载峰值时间调整max_wal_size和checkpoint_timeout。然后确定可能是哪个查询导致的。
验证是否有未使用的或不必要的索引,然后将其删除。
使用分区表(应用分区索引)。这样做有助于尽量低的将索引重新排序,并减少其影响。
通过使用连接池来防止突然的数据库连接高峰。
作为最佳方案,限制与数据库的最大连接数。并适时中断连接,释放内存。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战