【发布时间】:2020-06-04 08:35:24
【问题描述】:
我在 Windows 2016 上有一个带有 Postgresql 数据库的应用程序服务器,8 个虚拟线程 CPU 和 32GB 内存
我试图强调 10 个客户端并发插入数据库, 在 250 万条记录的表上,每次插入操作大约需要 500 毫秒
大约 1 小时后即可正常工作,占用约 2GB 内存和 80% 的 CPU, 在那之后,cpu 上升到 100%(内存没有改变)并且 postgres 似乎没有响应并且客户端无法连接到服务器
我检查 Postgres 日志并看到错误:
[2020-02-18 22:48:59 JST] 26344[16] WARNING: worker took too long to start; canceled
此查询检查也没有锁定:
SELECT bl.pid AS blocked_pid,
a.usename AS blocked_user,
ka.query AS current_or_recent_statement_in_blocking_process,
ka.state AS state_of_blocking_process,
now() - ka.query_start AS blocking_duration,
kl.pid AS blocking_pid,
ka.usename AS blocking_user,
a.query AS blocked_statement,
now() - a.query_start AS blocked_duration
FROM pg_catalog.pg_locks bl
JOIN pg_catalog.pg_stat_activity a ON a.pid = bl.pid
JOIN pg_catalog.pg_locks kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
JOIN pg_catalog.pg_stat_activity ka ON ka.pid = kl.pid
WHERE NOT bl.GRANTED;
在 pg_stat_activity 或 pg lock 中找不到慢 sql
所有内存、wal 或检查点配置都是默认配置
我还使用 postgresql ODBC 作为连接池 谁能建议我一种检测问题的方法?
【问题讨论】:
标签: postgresql