我使用Zend Framework(PHP)和postgresql作为会话存储后端。有时我会得到像这样的日志:PostgreSQL分析极其短暂的查询异常缓慢
Mar 8 11:07:00 myhost postgres[79149]: [30640132-1] 0 LOG: 00000: duration: 1401.742 ms parse pdo_stmt_00000005: SELECT "sessions".* FROM "php"."sessions" WHERE ((("sessions"."id" = '3d5tmqutaeuivtf8a1udfa5i04')))
Mar 8 11:07:00 myhost postgres[79150]: [30640151-1] 0 LOG: 00000: duration: 1400.083 ms parse pdo_stmt_00000007: SELECT "sessions".* FROM "php"."sessions" WHERE ((("sessions"."id" = 'b2vh1r29vnqg1e3600ther40c3')))
Mar 8 11:07:00 myhost postgres[79152]: [30640135-1] 0 LOG: 00000: duration: 1401.261 ms parse pdo_stmt_00000005: SELECT "sessions".* FROM "php"."sessions" WHERE ((("sessions"."id" = '3d5tmqutaeuivtf8a1udfa5i04')))
Mar 8 11:07:00 myhost postgres[79147]: [30640166-1] 0 LOG: 00000: duration: 1381.648 ms parse pdo_stmt_00000009: SELECT "sessions".* FROM "php"."sessions" WHERE ((("sessions"."id" = '6uj0955g64mmd9i8ra1q5nbtd5')))
表php.sessions在任何时候都有大约500-1000行。
看起来很奇怪,因为这个语句的执行没有被记录为慢,但解析几乎是“无尽的”。
任何线索?有谁知道任何postgres查询解析器速度问题?
一些技术背景:
我使用PostgreSQL 8.4.9在CentOS 6.0,这是2个10Core英特尔机128 GB RAM。此时Cpu仅被使用了20% - 25%。磁盘读取/写入速度非常快。 log_min_statement = 500
锁定目录?缺少shared_buffers?尝试看看锁定列表,也许使用准备好的语句。 – wildplasser 2012-03-09 11:42:33
我'shared_buffers = 32GB'。在这种情况下,我无法使用准备好的语句。可悲的是不知道如何在线监控锁。这种情况一天发生几次,而且通常在没有我的情况下就会发现。 – 2012-03-09 11:55:05
打我。也许你应该*低* shared_mem ;-) – wildplasser 2012-03-09 12:04:20