あんま真面目に調べてないんですがメモ。
なんか倍くらい違う。
MariaDB 10.0はMySQL 5.5の時と同じような感じで、FULLTEXT initializationとSending Dataがほとんどの時間を占めてる。MySQL 5.6はoptimizingだけに集中している。これは、計上するステージが変わったからなのかなで済むけど、CPU_userを見るとMariaDBでは全て実時間以下のCPU使用時間に対し、MySQL 5.6のoptimizingステージは実時間の3倍くらいのCPU使用時間になっている。
MySQL 5.6、このへんなんかチューニングしてる? それともPROFILINGでやってるから取れてない(MySQL 5.6ではPROFILING非推奨でp_s使えってことになってるから)だけ?
【2014/11/17 16:10】
お客様の中に詳しい方がいらっしゃいました :)
確かにMySQL 5.6ではenable_optimization切ってもそんなに変わらない(= Mroongaのoptimizationでなく、MySQLのFTのレイヤーでごにょごにょしてMroongaのAPIを叩いてる?)
MariaDB 10.0はごりっと落ちる。
mysql> SELECT COUNT(*) FROM t1 WHERE MATCH(text_column) AGAINST('*D+ xxx' IN BOOLEAN MODE);
+----------+
| COUNT(*) |
+----------+
| 45402 |
+----------+
1 row in set (0.03 sec)
MariaDB [d1]> SELECT COUNT(*) FROM t1 WHERE MATCH(text_column) AGAINST('*D+ xxx' IN BOOLEAN MODE);
+----------+
| COUNT(*) |
+----------+
| 45402 |
+----------+
1 row in set (0.06 sec)
なんか倍くらい違う。
MariaDB [d1]> SHOW PROFILE cpu for query 1;
+-------------------------+----------+----------+------------+
| Status | Duration | CPU_user | CPU_system |
+-------------------------+----------+----------+------------+
| starting | 0.000109 | 0.000000 | 0.000000 |
| checking permissions | 0.000009 | 0.000000 | 0.000000 |
| Opening tables | 0.000032 | 0.000000 | 0.000000 |
| After opening tables | 0.000010 | 0.000000 | 0.000000 |
| System lock | 0.000008 | 0.000000 | 0.000000 |
| Table lock | 0.000008 | 0.000000 | 0.001000 |
| After table lock | 0.000019 | 0.000000 | 0.000000 |
| init | 0.000045 | 0.000000 | 0.000000 |
| optimizing | 0.000347 | 0.000000 | 0.000000 |
| statistics | 0.000200 | 0.000000 | 0.000000 |
| preparing | 0.000028 | 0.000000 | 0.000000 |
| FULLTEXT initialization | 0.040459 | 0.027995 | 0.014998 |
| executing | 0.000024 | 0.000000 | 0.000000 |
| Sending data | 0.020768 | 0.019997 | 0.000000 |
| end | 0.000011 | 0.000000 | 0.000000 |
| query end | 0.000006 | 0.000000 | 0.000000 |
| closing tables | 0.000839 | 0.000000 | 0.001000 |
| freeing items | 0.000012 | 0.000000 | 0.000000 |
| updating status | 0.000025 | 0.000000 | 0.000000 |
| cleaning up | 0.000008 | 0.000000 | 0.000000 |
+-------------------------+----------+----------+------------+
20 rows in set (0.00 sec)
mysql> SHOW PROFILE cpu for query 2;
+----------------------+----------+----------+------------+
| Status | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| starting | 0.000057 | 0.000000 | 0.000000 |
| checking permissions | 0.000009 | 0.000000 | 0.000000 |
| Opening tables | 0.000016 | 0.000000 | 0.000000 |
| init | 0.000018 | 0.000000 | 0.000000 |
| System lock | 0.000007 | 0.000000 | 0.000000 |
| optimizing | 0.031675 | 0.094985 | 0.011998 |
| executing | 0.000027 | 0.000000 | 0.000000 |
| end | 0.000007 | 0.000000 | 0.000000 |
| query end | 0.000005 | 0.000000 | 0.000000 |
| closing tables | 0.000255 | 0.000000 | 0.000000 |
| freeing items | 0.000344 | 0.002000 | 0.001000 |
| cleaning up | 0.000005 | 0.000000 | 0.000000 |
+----------------------+----------+----------+------------+
12 rows in set, 1 warning (0.00 sec)
MariaDB 10.0はMySQL 5.5の時と同じような感じで、FULLTEXT initializationとSending Dataがほとんどの時間を占めてる。MySQL 5.6はoptimizingだけに集中している。これは、計上するステージが変わったからなのかなで済むけど、CPU_userを見るとMariaDBでは全て実時間以下のCPU使用時間に対し、MySQL 5.6のoptimizingステージは実時間の3倍くらいのCPU使用時間になっている。
MySQL 5.6、このへんなんかチューニングしてる? それともPROFILINGでやってるから取れてない(MySQL 5.6ではPROFILING非推奨でp_s使えってことになってるから)だけ?
【2014/11/17 16:10】
お客様の中に詳しい方がいらっしゃいました :)
@yoku0825そういえば、昔こんなのが。MySQL5.6には独自のFTSのオプティマイズ処理がありそうです。
http://t.co/eW0UwCe7VH
— Naoya (@naoa_y) 2014, 11月 17
mysql> SET SESSION mroonga_enable_optimization= OFF;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT COUNT(*) FROM t1 WHERE MATCH(text_column) AGAINST('*D+ xxx' IN BOOLEAN MODE);
+----------+
| COUNT(*) |
+----------+
| 45402 |
+----------+
1 row in set (0.04 sec)
確かにMySQL 5.6ではenable_optimization切ってもそんなに変わらない(= Mroongaのoptimizationでなく、MySQLのFTのレイヤーでごにょごにょしてMroongaのAPIを叩いてる?)
MariaDB [d1]> SET SESSION mroonga_enable_optimization= OFF;
Query OK, 0 rows affected (0.00 sec)
MariaDB [d1]> SELECT COUNT(*) FROM t1 WHERE MATCH(search_text) AGAINST('*D+ xxx' IN BOOLEAN MODE);
+----------+
| COUNT(*) |
+----------+
| 45402 |
+----------+
1 row in set (0.22 sec)
MariaDB 10.0はごりっと落ちる。