LWLock:BufferMapping (LWLock:buffer_mapping) - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

LWLock:BufferMapping (LWLock:buffer_mapping)

当会话正在等待将数据块与共享缓冲池中的缓冲区关联起来时,会发生此事件。

注意

对于 RDS for PostgreSQL 版本 13 及更高版本,此事件命名为 LWLock:BufferMapping。对于 RDS for PostgreSQL 版本 12 及更旧版本,此事件命名为 LWLock:buffer_mapping

支持的引擎版本

此等待事件信息与 RDS for PostgreSQL 版本 9.6 及更高版本相关。

上下文

共享缓冲池是一个 PostgreSQL 内存区域,它包含进程现在正在使用或过去使用的所有页面。当进程需要页面时,它会将页面读入共享缓冲池中。shared_buffers 参数会设置共享缓冲区大小并保留一个内存区域来存储表和索引页。如果更改此参数,请确保重新启动数据库。

以下情况下回发生 LWLock:buffer_mapping 等待事件:

  • 进程在缓冲区表中搜索页面并获取共享缓冲区映射锁。

  • 进程将页面加载到缓冲池中并获取独占缓冲区映射锁。

  • 进程从缓冲池中删除页面并获取独占缓冲区映射锁。

原因

当此事件发生超过正常时(可能表示性能问题),数据库正在共享缓冲池中移入和移出分页。典型的原因包括:

  • 大型查询

  • 臃肿的索引和表

  • 完整的表扫描

  • 小于工作集的共享池大小

操作

根据等待事件的原因,我们建议采取不同的操作。

监控缓冲区相关的指标

LWLock:buffer_mapping 等待激增时,调查缓冲区命中率。您可以使用这些指标更好地了解缓冲区缓存中发生的情况。检查以下指标:

blks_hit

此性能详情计数器指标表示从共享缓冲池中检索的数据块的数量。当 LWLock:buffer_mapping 等待事件出现后,您可能会观察到 blks_hit 激增。

blks_read

此性能详情计数器指标表示需要将输入/输出读入共享缓冲池的数据块的数量。您可能会在 LWLock:buffer_mapping 等待事件的前面观察到 blks_read 激增。

评估您的索引策略

要确认您的索引策略不会降低性能,请检查以下各项:

索引膨胀

确保索引和表膨胀不会导致不必要的分页被读入共享缓冲区。如果表中包含未使用的行,请考虑存档数据并从表中删除这些行。然后,您可以为调整大小的表重建索引。

常用查询的索引

要确定您是否拥有最佳索引,请在性能详情中监控数据库引擎指标。tup_returned 指标显示读取的行数。tup_fetched 指标显示返回到客户端的行数量。如果 tup_returned 明显大于 tup_fetched,可能无法正确编制数据索引。此外,您的表统计数据可能不是最新的。

减少必须快速分配的缓冲区数量

要减少 LWLock:buffer_mapping 等待事件,请尝试减少必须快速分配的缓冲区数量。一种策略是执行较小的批处理操作。通过对表进行分区,也许能够实现较小的批处理。