[groonga-dev,01505] FULLTEXT initializationについて

Back to archive index

磯部 和広 k-iso****@rozet*****
2013年 6月 27日 (木) 19:51:38 JST


いつもお世話になっております。

■概要■

mroongaで、1つのSQLにてマッチした行数を返すタイプの検索を
大量に行っております。
現在、かなり高速に検索できているのですが、更に高速化したいので
お知恵をお借りできれば幸いです。

■背景■

mroongaをインストールしたマシンに、単一のDBを作成し、
単一のmroongaテーブルを作成して使用しています。

テーブルは検索にのみ使用し、insert/delete/update等は一切行いません。

テーブルサイズは4GBで、メモリは32GBです。
CPUはCorei7で、仮想的に8CPUとして見えています。

ユーザーレベルで上げているサービスはmysqldだけです。

/etc/my.cnf
にて
innodb_buffer_pool_size = 8G
を指定しており、mroongaのデータは
該当ディレクトリにて
cat * > /dev/null
して、メモリキャッシュに乗せてあります。

この状態で
vmstat -S m 5 5
すると、下記のようになります。

[k-isobe @ PMJ41 ~]$ vmstat -S m 5 5
procs -----------memory---------- ---swap-- -----io---- --system--
-----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
6 0 0 25569 3 4683 0 0 0 2 0 4 19 4 77 0 0
7 0 0 25478 3 4683 0 0 0 0 342832 96052 50 11 40 0 0
8 0 0 25370 3 4683 0 0 0 0 266249 72371 67 8 26 0 0
13 0 0 25438 3 4683 0 0 0 0 293404 89771 56 10 34 0 0
8 0 0 25608 3 4683 0 0 0 0 340593 91199 54 10 36 0 0
[k-isobe @ PMJ41 ~]$

物凄く大量のin/csが発生しており、大量の処理をこなしているのが見て取れます。
また、データがオンメモリで、かつ、検索だけなので
bi bo共に0で、DBとしてはかなり良好な状態だと考えています。

この状態でmysqldのCPU使用率は下記のように442%となっています。
CPUが8個あるので、CPU使用率的には800%まで上がる訳ですよね・・・

[k-isobe @ PMJ41 ~]$ ps u -www -C mysqld
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 18109 442 11.3 21175916 3721212 pts/0 Sl 17:17 540:07
/usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql
--plugin-dir=/usr/lib64/mysql/plugin --user=mysql
--log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid
--socket=/tmp/mysql.sock --port=3306
[k-isobe @ PMJ41 ~]$

一方、MySQLが何をやっているかを調べると、下記のようになっていました。

[k-isobe @ PMJ41 ~]$ echo 'show processlist' | mysql -u root mysql | wc -l
71
[k-isobe @ PMJ41 ~]$ echo 'show processlist' | mysql -u root mysql | egrep
-v 'State|NULL' | cut -f 7 | sort | uniq -c | sort -nr
40 FULLTEXT initialization
3 Sending data
2 statistics
2 optimizing
1 freeing items
[k-isobe @ PMJ41 ~]$

両者に差があるのは、待機状態(Sleep)なセッションがある為です。

■質問■

Q1.
 'FULLTEXT initialization' という状態が出るのは、
 どういう状態でしょうか?
 どうも、groongaを待っているように見えます。

Q2.
 CPU的には余力があるように見えるので、
 接続するクライアントを1.5倍に増やしてみたのですが、
 CPUの使用率はさほど上がらず、
 'FULLTEXT initialization' の行が増えただけでした。
 どうも、groongaの待ち行列が増えただけのように見えます。

 パラメータチューニング等で、更に高速化する方法は無いでしょうか。

 一応、innodb_read_io_threads=8とは設定してありますが
 mroongaには、特にオンメモリ状態では効果は無いと考えています。




groonga-dev メーリングリストの案内
Back to archive index