まとまりのないブログ

something which something is something

mysql

mroongaよりsennaの方が検索速度が速い場合がある

投稿日:

DBのレコード件数1800~2000万件程度のテーブルで全文検索した場合に、mroongaを使って検索した時にやたら時間がかかった。大体3秒~10秒ほどselect count(*)を実行するのにかかっていて、レコード件数多いから仕方ないのかな?と思っていたらsennaで運用していたDBの方は1秒もかからずに結果が返ってくる。

マシンのスペックでいうと

mroongaDB CPU:XEON-3430 Storage:NVME SSD READ 3.5GB/s

sennaDB CPU:XEON-3430 Storage:SATA SSD READ 450MB/s

といった具合でmroongaで運用しているマシンの方が読み書き性能は圧倒的に上。DBの検索スピードに影響するのはCPUよりもストレージの読み込み速度だと思うのでこの結果はちょっと悩ましい。

explainで調べてみたところ、

explain select count(*) from table where match(column) against(‘D+ 1s103 ‘ IN BOOLEAN MODE);

+—-+————-+——-+——+—————+——+———+——+——+——————————+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——-+——+—————+——+———+——+——+——————————+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
+—-+————-+——-+——+—————+——+———+——+——+——————————+
1 row in set (2.32 sec)

これがmroongaDBで検索した結果。次にsennaDBで検索すると

explain select count(*) from table_name where match(column) against(‘D+1s103′ IN BOOLEAN MODE);
+—-+————-+——————-+———-+—————+———-+———+——+——+————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——————-+———-+—————+———-+———+——+——+————-+
| 1 | SIMPLE | table_name | fulltext | column | column | 0 | | 1 | Using where |
+—-+————-+——————-+———-+—————+———-+———+——+——+————-+
1 row in set (0.00 sec)

という違いがある。mroongaの方は「
Select tables optimized away 」とあるので一応インデックスは働いているようだが、検索の遅さには納得できない。検索に使ったキーワードは
「1s103 」という特に変わっているワードでもないがやたら時間がかかった。他の「alaedad」とか「akaweea」とかは結果がないならないで高速に検索を終えるのに「adk323」とか「132334323」みたいな数字が多い検索だとやたら時間がかかる。mroongaは数字の検索が苦手とかそういうことがあるんだろうか。sennaだと別にそういうようなことはなく割と速く0.1秒以内に結果を返してくれる。

sennaは検索をしている間はテーブルロックがかかってしまうという弱点があり、mroongaはそれがないらしい。あとsennaは割とメモリを喰うんでテーブルロックの件もあってmysqlデーモンが落ちることが結構あるがmroongaは私の経験上では不思議とメモリ不足で落ちたことがほとんどない。検索の速度でいうと後継だからmroongaが速いのだろうと勝手に思っていたが大差ないのかもしれない。私の参照オンリーな使い方だとむしろsennaの方が速い。デーモン落ちるのは怖いがcronで見張って自動復帰設定とかやりようはあるので今更ながらsennaに戻そうかと思案中。

-mysql

執筆者:


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

eclipseのプロジェクトのソースファイルが全部消えた

eclipseで普通にデバッグ作業していただけなのにいきなりワークスペースのプロジェクトのフォルダ内のファイルが全部消えた。今までこんなことは経験がなかったので焦った。 消えるきっかけとなった原因 j …

no image

Table is marked as crashed

昨日、プログラム側でmysqlのテーブルがクラッシュしているという返事を受け取った。はあ、またか・・・と思いながらcheck tableを該当するテーブルで実行してみる。

no image

HAPROXYを使ってmysqlサーバーの負荷分散

備忘録 listen mysql-db bind *:3306 mode tcp option mysql-check user haproxy1 balance roundrobin server …

no image

sennaのインストール

かなり嵌ったので備忘録。sennaをインストールする際、configureのオプションを指定しないと、デフォルトの文字コードはeuc-jpでconfigureをすることになる。mecabで文字コードを …

no image

mysqlのテーブルのクラッシュ

/usr/local/mysql/bin/myisamchk –recover –force –sort_buffer_size=2048M /usr/local/mysql/data/auc/ …