【发布时间】:2021-06-11 18:39:53
【问题描述】:
我已经连续 3 次遇到这个问题了,我不知道是什么原因造成的。
上下文:我正在运行大型脚本,有时系统会卡在 WALSync 状态。描述它的最好方式是 pg_stat_activity 的这个视图
| pid | query | state | wait_event_type | wait_event |
|---|---|---|---|---|
| 5172 | (redacted) | active | LWLock | WALWrite |
| 1887 | NULL | Activity | LogicalLauncherMain | |
| 1884 | NULL | IO | DataFileFlush | |
| 1883 | NULL | IO | DataFileFlush | |
| 1885 | NULL | IO | WALSync |
- 磁盘空间不是问题。
- 没有使用事务控制。
- 发生这种情况的其他时间是在不同的查询上(即不是这个特定的查询,而是关于负载或其他什么的?)。
- 相同的脚本已经在开发数据库(相同的机器和集群)中进行了测试,并且运行良好。
- 系统上没有其他活动发生。
- 我尝试取消和终止所有 pid,但没有任何反应。
- 前进的唯一方法是重新启动服务器:(((((
- 无法执行其他/新查询(除了 pg_stat_activity 之类的查询)。
关于:
- 第 13.2 页
- EC2、Ubuntu、8 核、32GB RAM
- 无复制。
- 机器基本上只是一个处理中心,所以我尝试进行相应调整(但我不是专家,欢迎提出任何建议)见下文...
非默认设置:
shared_buffers = 8GB
effective_cache_size = 24GB
maintenance_work_mem = 1GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 500
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 52428kB
min_wal_size = 4GB
max_wal_size = 16GB
max_worker_processes = 8
max_parallel_workers_per_gather = 8
max_parallel_workers = 8
max_parallel_maintenance_workers = 2
任何关于如何进一步挖掘的想法或见解将不胜感激!
【问题讨论】:
-
它是否完全冻结,进展为零?还是只是慢,WALSync 是主要瓶颈?
top、vmstat或sar之类的东西会显示什么? -
@jjanes 它完全沉默。上面没有活动。我还没有监视
sar,但我现在正在运行一个新版本并观看它。我怀疑因为这些是 EBS 驱动器,所以某些东西可能会导致可访问性暂时失效而无法恢复。我不知道——只是一种预感。 -
如果 EBS 被冲洗掉,我认为您也无法在系统/命令行级别执行任何操作。这个 EBS 是否仅用于 PostgreSQL 数据,而操作系统和二进制文件位于其他地方?如果你运行
pg_test_fsync,告诉它把文件放在PostgreSQL数据所在的同一个EBS上会发生什么?
标签: postgresql locking wal