Postgres 10.3:SELECT查询挂起几个小时

时间:2018-12-14 17:37:19

标签: postgresql postgresql-10

我的应用程序使用Postgres作为DBMS,我使用的Postgres版本是10.3,安装了扩展名Postgis。

有时,我注意到dbms在随机的时间间隔内变慢并陷入一些SELECT查询中。

pg_stat_activity中,我注意到这些查询中的wait_event_typewait_event如下:

 select wait_event_type, wait_event from pg_stat_activity where state='active'; 
 wait_event_type |  wait_event  
-----------------+--------------
 IO              | DataFileRead
 IO              | DataFileRead
 IO              | DataFileRead
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 IO              | DataFileRead
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 IO              | DataFileRead
 LWLock          | buffer_io
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 IO              | DataFileRead
 IO              | DataFileRead
                 | 
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
(33 rows)

在检查docs之后,我的假设是下面的硬件有问题,然后我所面临的问题与应用程序或查询类型无关,而与硬件本身有关。

有人遇到过这种问题吗?

1 个答案:

答案 0 :(得分:-1)

一般故障排除建议:

  • 开始收集服务器的运行时统计信息 - 有多种工具可供选择 - https://munin-monitoring.org/https://grafana.com/ + influx db + telegraf 等等。无论采用哪种解决方案,您都应该保留以下历史统计数据:

    • 每秒完成的磁盘操作量
    • 磁盘存储的延迟 [无论它是旋转 rust、ssd、nvme 还是网络连接]
    • 服务器 CPU 使用率、负载、内存使用率
  • 还可以获取有关 postgresql 的统计信息 - https://www.percona.com/downloads/pmm2 在这里可能会有所帮助

基于这些统计数据 - 在有问题的查询发生之前查看是否有任何累积。

偶尔的减速可能是由以下原因造成的:

  • 存储子系统性能不均 [ssd 寿命结束、RAID 阵列巡读、硬盘因坏扇区重新分配数据]
  • 不正确的索引统计导致次优查询计划
  • 传入查询导致系统过载
  • 在同一硬件上运行的其他工作负载会导致系统过载,如果您在虚拟化环境中运行,则会导致邻居吵闹