[Ludia-users 151] Re: 一回目の検索が遅い件

Back to archive index

sakamoto sakam****@ma*****
2007年 12月 13日 (木) 18:49:44 JST


こんにちは、坂本です。

幸坂さん、加納さん、折角お返事いただいたのに、
返信出来ずに申し訳ありませんでした。

お返事兼ねて、現在の状況をお知らせします。

幸坂さんのご指摘にあった
 1.*.SEN.i.c以外をキャッシュに乗せ
 2.SELECT COUNT(*) FROM tab;を実施
を実施することで高速にアクセスできるようになったため、
これを実施することにしました。
キャッシュに乗せきれない場合は、効果薄いかも知れませんが、
改善できるケースがあるということで。
また、これを一定期間後にも自動で実施することで、
途中で、フラッシュされた場合にも備えることにしました。

加納さんのご指摘の、インデックスとデータの関係は、
目からうろこでした。

通常は、全件(今回は20万件)ヒットさせるようなことは無いと
思いますが、データの内容や検索の方法によっては、こういう
ケースも許しているのが現状です。
最初にヒット件数のみ取得して、閾値以上の場合は、
警告メッセージを出して再検索させるということもやっていますが、
現状ではLudia のpgs2getnhits関数は、直前の検索を実行していないと
ならないとか、更新が入ると正確な件数にならないとか、そのほか、
弊社PPの仕様的な面も大きく利用できないでいます。

#本件は一応解決したことにしておりますが、別件で、また
 期待の動作をしない部分があり、それについては、別途ご連絡させて
 いただきます。


> こんばんは、加納です。
>
> 幸坂からの回答とは別に・・・
>
> > > SELECT COUNT(*) FROM tab;
> > →(SQL1)とします
> >
> > > SELECT COUNT(*) FROM tab WHERE col @@ '??????';
> > →(SQL2)とします
> >
> > [ケース1] マシン起動→SQL1→SQL2
> > SQL1,SQL2共に遅い。
> >
> > [ケース2] マシン起動→SQL2→SQL1
> > SQL2は遅いが、SQL1は速い
> >
> > SQL2のパターンも、PostgreSQLのデータ参照しているということでしょうか。
> > とすれば、PostgreSQLもsennaもどちらも影響の原因になると
> > いうことでしょうか。
>
> SQL1のパターンも、PostgreSQLのテーブル部を参照します。
> もし、COUNT(*)はインデックススキャンだという認識でのお
> 話であれば、それはPostgreSQLには当てはまりません。
> PostgreSQLはインデックスも追記型のため、データ部を参照
> しないと確実にその行が生きていることを保証できないため
> です。(インデックスに無効フラグはあるが、無効フラグが
> オフだからといって、有効とは限らない)
>
> SQL1では、プランを確認しないとなんともいえませんが、
> テーブルスキャンの可能性があります。その場合、シーケン
> シャルアクセスです。
>
> SQL2では、インデックス経由のアクセスですので、テーブル
> はランダムアクセスです。SQL1<SQL2なのは、予想される結果
> です。ケース2のSQL1だけ早いことの解釈にはなっていません
> が。そのあたりはメモリとの兼ね合いのように思います。
>
> 根本的には、ヒット件数を削減していただくことしか対処はな
> いように思います。20万件全件ヒットのLudiaアクセスが必須
> だとしたら、かなりつらい要件です。
>
> _______________________________________________
> Ludia-users mailing list
> Ludia****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/ludia-users




Ludia-users メーリングリストの案内
Back to archive index