kousa****@nttda*****
kousa****@nttda*****
2007年 10月 23日 (火) 14:14:08 JST
幸坂です。こんにちは。 > 1. DB接続が切れてしまうクエリの例 > > SELECT * FROM data > WHERE fulltext1 @@ '*D+ "テスト"' > AND date between '2006-09-01' AND '2007-09-01'; > > 2. 正常に結果が得られるクエリの例 > > A. WHEREにて日付を全文検索の条件より前につける > SELECT * FROM data > WHERE date between '2006-09-01' AND '2007-09-01' > AND fulltext1 @@ '*D+ "テスト"'; この二種類のクエリのexplainを送っていただけないでしょうか? (先ほどリリースしたLudia1.3.1を使用して頂けると助かります。) また、テーブルのサイズも教えていただけると原因解明に役立ちます。 > "ERROR: pgsenna2: sen_query_scan failed (1)" これは、@@で全文検索を行ったが、インデックススキャンが選択されず、 シーケンシャルスキャンが選択された場合で、 さらにカラムに空文字列が含まれている場合に発生します。 先ほどリリースしたLudia1.3.1では改修されています。 最後に、全ての子テーブルにインデックスが張ってあるか確認してもらえますか? (分割テーブルの場合、親テーブルにインデックスを張っても意味がありません。) インデックスが張っていないカラムを@@で検索した場合は、 必ずシーケンシャルスキャンが選択されます。 以上、よろしくお願いします。 ________________________________ From: ludia****@lists***** [mailto:ludia****@lists*****] On Behalf Of Kawanishi Tetsuo Sent: Tuesday, October 23, 2007 11:06 AM To: ludia****@lists***** Subject: [Ludia-users 120] 特定の条件でDB接続が強制終了されてしまい ます こんにちは。川西です。 年ごとに分割したテーブルと、senna/ludiaを組み合わせを、 下記のようなテーブル構成で利用しています。 dataという親テーブルを継承した、 子テーブル(data_2006, data_2007, ..)があります。 data(親) - ・ - data_2005(子) - data_2006(子) - data_2007(子) - ・ - ・ 日付(分割のルールとなっている条件)を指定せず検索した場合、 DBとの接続が切れるのですが、日付を指定した場合にも 全文検索を行うと接続が切れることがありました。 sennaのインデックスを持つカラムは3つあり、いずれかのカラムに対して、 全文検索を行った場合、DBとの接続が強制終了されていました。 ※ 3つのカラムはfulltext1,fulltext2,fulltext3とします。 ●現象の発生条件 以下の3つをすべて満たす場合です。 A. Senna/Ludiaの全文検索を使 MQ$9$k>l9g B. 分割テーブルの親テーブルより検索(SELECT * FROM data) C. WHERE句にて日付の条件を全文検索の条件より後につけた場合 ●具体的なクエリの例 1. DB接続が切れてしまうクエリの例 SELECT * FROM data WHERE fulltext1 @@ '*D+ "テスト"' AND date between '2006-09-01' AND '2007-09-01'; 2. 正常に結果が得られるクエリの例 A. WHEREにて日付を全文検索の条件より前につける SELECT * FROM data WHERE date between '2006-09-01' AND '2007-09-01' AND fulltext1 @@ '*D+ "テスト"'; B. 分割テーブルの子テーブル(data_2007)を指定 SELECT * FROM data_2007 as r WHERE fulltext1 @@ '*D+ "テスト"' AND date between '2006-09-01' AND '2007-09-01'; C. Senna/Ludiaの全文検索ではなく"LIKE"を使用 SELECT * FROM data WHERE fulltext1 LIKE '%テスト%' AND date between '2006-09-01' AND '2007-09-0! 1'; ●DB接続が切れてしまった際のメッセージ &nbs p; WARNING: terminating connection because of crash of another server process ●対応策として試してみたこと 1. Ludia 1.3.0へのバージョンアップ 試してみたところ、fulltext1,fulltext2の全文検索は正常に行えまし た。 fulltext3の全文検索を行ったところ、下記のエラーが出力されました。 "ERROR: pgsenna2: sen_query_scan failed (1)" このエラーメッセージから、以下のblog記事に辿り着きました。 http://mt.endeworks.jp/d-6/2007/10/ludia-130sen_query_scan.html 同じ現象かどうかは判断がつきません。 ●推測される原因 分割テーブル、Ludiaの全文検索を併用した場合、インデックスの状態に よっては、 オプティマイザなどが正しく動作せず、検索のプロセスが強制終了され ることが あるのではないかと、推測しています。 ●環境について Postgre! SQL 8.2.5 ludia-1.1.0(ludia-1.3.0も試用) senna-1.0.9 ※CEにて年単位でテーブル分割を行っています。 ※indexはngramを使用しています。 何かお解りでしたら、ご教示くださいますよう、お願い致します。 Tetsuo Kawanishi t_kawan****@hotma***** -------------- next part -------------- HTMLの添付ファイルを保管しました... 下载