2ind機能の改良

2indについていくつか。

commit r32: リファクタリングとかログの追加とか

ちょっとだけリファクタリング。ログ出力の追加。2ind関係はログレベル=dumpで出すことに。

commit r33: senna_2ind_countステータス変数の削除

senna_2ind_countというステータス変数があったのですが、これを廃止しようと思います。

理由は、現在のsenna_2ind_countの実装では2ind機能の挙動を捕捉しきれていないから、です。。。

例えば以下のSQL文で2ind機能が働いても、変数はカウントアップされていませんでした。

SELECT COUNT(*) FROM t1 WHERE MATCH(c1) AGAINST("hoge");

commit r34: senna_2ind_XXXステータス変数の追加

senna_2ind_countの廃止の代わりに、新しいステータス変数を2つ導入しようと検討中です。

  • senna_2ind_requests ... 2ind判定のリクエスト回数
  • senna_2ind_reads ... 2ind機能発動回数

senna_2ind_reads / senna_2ind_requests * 100 = 2ind発動率という感じです。

※この2つの変数は開発時のデバッグ用途の性格が強いのでリリース版に入るかどうかは未定です。ifdefで分けるかな。。。

疑問

ステータス変数ってストレージエンジン側からはアクセスしてないみたいなんだけど、アクセスさせたい場合にはどうしたらいいんかね。やっちゃいけないのかなぁ。

ft_nlq_read_next関数

backtrace 1

#1  0x00000000006aa01c in ha_myisam::ft_read (this=0x8e5e008, buf=0x8e5e150 "þ\030") at ha_myisam.cc:2010
#2  0x000000000061b115 in join_ft_read_first (tab=0x8f77e30) at sql_select.cc:11365
#3  0x000000000061b637 in sub_select (join=0x8e9aaa0, join_tab=0x8f77e30, end_of_records=false) at sql_select.cc:10563
#4  0x00000000006247b6 in do_select (join=0x8e9aaa0, fields=0x8e9bd28, table=0x0, procedure=0x0) at sql_select.cc:10303

backtrace 2

#1  0x00000000006aa01c in ha_myisam::ft_read (this=0x8e5e008, buf=0x8e5e150 "þ\025") at ha_myisam.cc:2010
#2  0x000000000061af7d in join_ft_read_next (info=0x8f77eb0) at sql_select.cc:11374
#3  0x000000000061b672 in sub_select (join=0x8e9aaa0, join_tab=0x8f77e30, end_of_records=false) at sql_select.cc:10572
#4  0x00000000006247b6 in do_select (join=0x8e9aaa0, fields=0x8e9bd28, table=0x0, procedure=0x0) at sql_select.cc:10303

backtrace 3

#1  0x00000000006aa01c in ha_myisam::ft_read (this=0x8e5e008, buf=0x8e5e150 "þ\030") at ha_myisam.cc:2010
#2  0x000000000061af7d in join_ft_read_next (info=0x8f77eb0) at sql_select.cc:11374
#3  0x000000000061b672 in sub_select (join=0x8e9aaa0, join_tab=0x8f77e30, end_of_records=false) at sql_select.cc:10572
#4  0x00000000006247b6 in do_select (join=0x8e9aaa0, fields=0x8e9bd28, table=0x0, procedure=0x0) at sql_select.cc:10303

呼出回数

1クエリあたりの関数呼出回数。

関数名 回数
ft_nlq_read_next ヒット行数 + 1
join_ft_read_first 1
join_ft_read_next ヒット行数
sub_select テーブル数 + 1
do_select 1

今、ft_nlq_read_next関数で2ind判定しているところを、join_ft_read_XXXとかでやるようにしたい。できるのかー?