偶小梦
发布于

大规模使用分区表时查询性能变慢

➢ 问题
使用大规模分区表的时候有时会出现执行时间不合理长的问题,调研 log 发现是计划阶段,会有大量访问元数据表的操作,该操作占用文件句柄,然后检查了文件句柄缓冲,没发现特别问题,检查 log 看到有问题时会有下述提示,且大的时间间隔发生在这类 log 之间。另外从 explain analyze 发现,查询开始的 start offset 很大。

➢ 解答
检查发现 master 有自己 bufmgr 作为内部缓冲区(默认 4096 个)支持元数据表访问,当元数据多,访问负载高时,发生 bufmgr 的刷新切换。Mac 本地在跑 feature test 负载 session 较多情况下会出现类似提示,但没发现时间超长的问题。
“writing block of relation //
方案:暂时我们内部确定的可能调试方法是用 guc 调大这个内部缓冲区可能会缓解元数据访问问题,但这个是使用共享内存的,不能任意调大。已建议用户降低分区表数量,建议 128 以内。
{
{"shared_buffers", PGC_POSTMASTER, RESOURCES_MEM,
gettext_noop("Sets the number of shared memory buffers used by the server."),
NULL,
GUC_UNIT_BLOCKS
},
&NBuffers,
4096, 16, INT_MAX / 2, NULL, NULL
}

评论
    test