我使用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