[Ludia-users 122] Re: 特定の条件でDB接続が強制終了されてしまいます

Back to archive index

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の添付ファイルを保管しました...
下载 


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