私は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のクエリパーサーの速度の問題を知っていますか?
一部のハイテク背景:
私はCentOSの6.0でPostgreSQL 8.4.9を使用しています、それは128ギガバイトのRAMで2回10Core Intelマシンです。この時点では、Cpu isは20%〜25%しか使用されていませんでした。ディスクの読み書きは非常に高速です。 log_min_statement = 500
カタログにはロックされていますか? shared_buffersの欠如?ロックリストを見てみてください。多分準備文を使ってください。 – wildplasser
私は 'shared_buffers = 32GB'を持っています。この場合、私は準備文を使うことはできません。そして、悲しいことに、ロックをオンラインで監視する方法を知らない。これは1日に数回発生し、それが気付かれなくてもよく来ます。 –
私を打ち負かす。たぶんあなたは* shared_mem; *)を下げるべきです – wildplasser