我们正在使用云SQL for postgres。我们将100万条记录插入到x个表中,但我们正在对只有一条记录的表执行查询。我们正在使用的查询是select id from table_name limit 1。
查询洞察页面中显示的查询执行时间为0.09ms。但从psql测量的延迟约为250ms。“traceroute”命令显示的网络延迟为50ms(RTT)。
如何找出为什么SQL查询的总延迟远远高于DB服务器中的实际执行时间?
我们正在使用云SQL for postgres。我们将100万条记录插入到x个表中,但我们正在对只有一条记录的表执行查询。我们正在使用的查询是select id from table_name limit 1。
查询洞察页面中显示的查询执行时间为0.09ms。但从psql测量的延迟约为250ms。“traceroute”命令显示的网络延迟为50ms(RTT)。
如何找出为什么SQL查询的总延迟远远高于DB服务器中的实际执行时间?
1条答案
按热度按时间u4dcyp6a1#
有很多不同的原因会导致PostgreSQL的延迟问题。你应该更深入地了解延迟问题的原因。我建议:
1.在PostgreSQL配置中打开
track_io_timing
(track_io_timing默认情况下是禁用的,因为它会重复查询操作系统以获取当前时间 ),这样您就可以看到I/O需要多长时间。1.使用
EXPLAIN
(ANALYZE,BUFFERS)查看接触了多少个8 kB数据块。如果数据块的数量非常大,则表会膨胀(大部分内容都是空的, 如果删除数据(例如,通过删除表),则会释放空间,但这不会反映在示例报告的“已用存储”中。),并且顺序扫描会花费很长时间,因为它必须读取所有空白空间。
VACUUM FULL
命令可以恢复未使用的空间;注意,当真空命令正在运行时,写入操作被阻止。如果块数与您预期的一样,则问题在于您的存储速度太慢。
我还建议查看这个troubleshooting guides,以获得关于如何诊断PostgreSQL上的问题的更多信息。
最后,如果延迟仍然是一个问题,即使你已经尝试了上面的步骤,我会建议联系Google Cloud Support,以进一步调查和检查发生在您的项目。