[pgpool-general-jp: 1174] Re: オンメモリクエリキャッシュ機能について
Tatsuo Ishii
ishii @ sraoss.co.jp
2013年 7月 9日 (火) 15:10:42 JST
石井と申します。
pgpool-II3.2.4での既知のクエリキャッシュ周りの障害としては、以下があります。
http://git.postgresql.org/gitweb/?p=pgpool2.git;a=commit;h=a6d91284223576d82f9eef689493c883d1efcc69
これに該当してい場合には、当方で再現できる環境(再現プログラムなど)など
をご提供頂ければ調査可能と思います。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp
> お世話になっております。エルテックスの佐藤と申します。
>
> 前回、問い合わせさせて頂きました「[pgpool-general-jp: 1169] クエリキャッシュの不正」の継続した投稿になります。
>
> PostgreSQL 9.2.4 とpgpool-II 3.2.4 の環境で動作検証行っていますが、
> 同じSELECTで常に同じ結果が返るはずのものが、SELECTする都度、SELECT結果が違ってしまう、という症状が発生します。
> オンメモリクエリキャッシュ機能を有効にした場合のみ、発生します。
> SELECT結果が違ってしまう場合、キャッシュからSELECT結果を返しているというpgpoolのログが出ております。
>
> DBは HS/SRクラスタで、pgpoolはmaster-slaveモードになります。
>
> [各種環境]
> Apache Tomcat Version 7.0.29
> コネクションプーリング tomcat-dbcp.jar(Apache Tomcat 付属)
> JDBCドライバー postgresql-9.1-902.jdbc4.jar
> PostgreSQL (9.2.4)
> pgpool-II (3.2.4)
> Java 1.7.0_05-b06
> Webサーバー Apache 2.2.23
>
> [SQLの生成方法]
> SQLは PreparedStatement を使って実行していますが、LIMIT句とOFFSET句は
>
> StringBuilder sb = new StringBuilder();
> sb.append(original);
> sb.append(apendOrderby(criteria));
> sb.append(" LIMIT ");
> sb.append(criteria.getCriteriaResult().getLimit());
> sb.append(" OFFSET ");
> sb.append(criteria.getCriteriaResult().getStart() - 1);
>
> のように、SQL中に直接埋め込んでいます。
>
> 個別の検索条件にはプレースホルダーを使用していますので、
> 発行されるSQLのイメージとしては
>
> SELECT
> employee_id
> ,first_name
> ,last_name
> ,email
> ,phone_numeric
> ,hire_date
> ,job_id
> ,salary
> ,commission_pct
> ,manager_id
> ,department_id
> FROM
> employee
> WHERE
> department_id = ?
> ORDER BY
> employee_id limit 10 offset 10;
>
> のようになります。実際のSQLはもっと長いです。
>
> コネクションはTomcatのコネクションプーリングを使用していて、
> JNDIでルックアップして取得しています。
>
> 上記のSELECTをpsqlで単一のSQLとして、発行した場合は、問題事象は発生しませんが、アプリケーションから実行すると事象発生します。
> オンメモリクエリキャッシュ機能を有効にした場合のみ再現し、オンメモリクエリキャッシュ機能を無効にすると問題事象は再現せずに、改善します。
>
> オンメモリクエリキャッシュ機能は共有メモリーを使用しています。
> pgpoolのオンメモリクエリキャッシュ機能の設定としては、以下のとおりです。
> memory_cache_enabled = on
> memqcache_method = 'shmem'
> memqcache_memcached_host = 'localhost'
> memqcache_memcached_port = 11211
> memqcache_total_size = 67108864
> memqcache_max_num_cache = 1000000
> memqcache_expire = 0
> memqcache_auto_cache_invalidation = on
> memqcache_maxcache = 409600
>
> 「SHOW pool_cache」コマンドからキャッシュストレージのエントリが一杯でないことは確認済みです。
>
> 質問事項
> -------------------------------------------------------------------------------------------------------------------------------
> 1. マニュアルを見ると以下記述がございますが、オンメモリクエリキャッシュ機能ではSQLの長さに制限がありますでしょうか。
>
> 「オンメモリクエリキャッシュは、問い合わせのSELECT文(拡張問い合わせの場合は更にバインドパラメータ)と
> 検索結果をペアで記録し、2回目以降に同じSELECT文が発行された場合に、キャッシュから結果を返します。」
>
> 2. 発行するSQLは上記のSQLのようなイメージですが、最後のoffset値だけが0、10、20というように変化します。
> SQLが長すぎて、過去にキャッシュした似たSQLと同一とみなされて、キャッシュから結果を返しているということはありませんでしょうか?
>
> 3. 原因を特定するために、確認すべき項目がありましたら、教えて頂けないでしょうか?
>
> ------------------------------------------------------------------------------------------------------------------------------
>
> ご回答は一部でもよく、何かヒントになるものでも構いませんので、よろしくお願いいたします。
>
> --
> ―――――――――――――――――――――――――
> 佐藤 慎
> 株式会社エルテックス
> システムマネージメントサービス部
> 〒240-0005 横浜市保土ヶ谷区神戸町134
> 横浜ビジネスパーク イーストタワー14階
> 電話:045-332-7865 Fax:045-332-6644
> URL :http://www.eltex.co.jp/
> facebook:http://www.facebook.com/ELTEXinc
> ――――――――――――――――――(c)ELTEX, Inc.
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
pgpool-general-jp メーリングリストの案内