【发布时间】:2018-12-14 17:37:19
【问题描述】:
我的应用程序使用 Postgres 作为 DBMS,我使用的 Postgres 版本是 10.3,安装了扩展 Postgis。
我偶尔注意到,在随机的时间间隔内,dbms 变慢并卡在几个 SELECT 查询上。
从pg_stat_activity我注意到这些查询的wait_event_type和wait_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 之后,我的假设是下面的硬件存在一些问题,然后我面临的问题与应用程序或查询类型无关,而是与硬件本身有关。
有人遇到过这种问题吗?
【问题讨论】:
-
我同意。您使用的是什么文件系统?
-
dbms 安装在 Kubernetes pod 上,卷安装在网络存储上。 .
-
在这种情况下很可能是网络问题。
-
这仍然可能是应用程序/查询的问题。您提到要使用 PostGIS,例如,您是否正确索引列以防止顺序读取?当长时间观察那些等待事件 DataFileRead 时,可能意味着情况就是这样。我的建议是捕获其中一个长时间运行的查询并运行“EXPLAIN (ANALYZE,BUFFERS,TIMING) query”。参数 log_min_duration_statement 和扩展名 auto_explain 是你的朋友。
-
观察到的间歇性可能与以下事实有关:有时您使用的谓词/过滤器需要比其他时间段通常处理的行多得多。当然,这仍然可能是资源限制问题,例如网络或存储、内存甚至 CPU。