mysql56> SELECT name, subsystem, count, status FROM information_schema.innodb_metrics; +------------------------------------------+---------------------+-----------+----------+ | name | subsystem | count | status | +------------------------------------------+---------------------+-----------+----------+ | metadata_table_handles_opened | metadata | 0 | disabled | | metadata_table_handles_closed | metadata | 0 | disabled | | metadata_table_reference_count | metadata | 0 | disabled | | metadata_mem_pool_size | metadata | 8388608 | enabled | | lock_deadlocks | lock | 0 | enabled | | lock_timeouts | lock | 0 | enabled | .. | icp_no_match | icp | 0 | disabled | | icp_out_of_range | icp | 0 | disabled | | icp_match | icp | 0 | disabled | +------------------------------------------+---------------------+-----------+----------+ 214 rows in set (0.32 sec)
全部で214もの項目があり、17のサブシステムに分けられていて、それぞれdisabled, enabledが指定できる。
今までSHOW ENGINE INNODB STATUS(InnoDB Monitor)でしか取れなかったような情報や、載っていない情報もぽちぽち取れたりするので、可能なら全enabledにしておきたい所存。
enableの仕方はSET GLOBAL innodb_monitor_enable= で設定する。INFORMATION_SCHEMAなので、performance_schemaみたいに UPDATE information_schema.innodb_metrics SET status= 'enabled'というわけには *いかない*。
mysql56> UPDATE information_schema.innodb_metrics SET status= 'enabled' WHERE subsystem= 'metadata'; ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema' mysql56> SET GLOBAL innodb_monitor_enable= icp_out_of_range; Query OK, 0 rows affected (0.00 sec) mysql56> SET GLOBAL innodb_monitor_enable= module_metadata; Query OK, 0 rows affected (0.13 sec) mysql56> SELECT name, subsystem, count, status FROM information_schema.innodb_metrics; +------------------------------------------+---------------------+-----------+----------+ | name | subsystem | count | status | +------------------------------------------+---------------------+-----------+----------+ | metadata_table_handles_opened | metadata | 0 | enabled | | metadata_table_handles_closed | metadata | 0 | enabled | | metadata_table_reference_count | metadata | 0 | enabled | | metadata_mem_pool_size | metadata | 8388608 | enabled | | lock_deadlocks | lock | 0 | enabled | | lock_timeouts | lock | 0 | enabled | .. | icp_no_match | icp | 0 | disabled | | icp_out_of_range | icp | 0 | enabled | | icp_match | icp | 0 | disabled | +------------------------------------------+---------------------+-----------+----------+ 214 rows in set (0.19 sec)
イメージ的な"WHERE subsystem= 'xx'"にあたるのがinnodb_monitor_enable= module_xx で、イメージ的な"WHERE name= 'yy'"にあたるのがinnodb_monitor_enable= yyになる。全部いっぺんにenabledにするにはinnodb_monitor_enable= allだし、%記号を使ってワイルドカード指定もできる様子。
無効化するには、SET GLOBAL innodb_monitor_disable= ..で、指定の仕方はenableの時といっしょ。
で、問題はこれがどれくらい性能劣化を引き起こすか。
取りあえずざっくりtpcc_load WH= 1(INSERTのみのワークロードで、1スレッドしかなく、データはすべてバッファプールに収まるサイズ)で試してみる。
$ time ./tpcc_load localhost tpcc root "" 1 > /dev/null 【innodb_monitor何もいじらない】 real 1m22.414s user 0m9.885s sys 0m4.890s real 1m23.739s user 0m9.927s sys 0m5.046s real 1m23.227s user 0m10.031s sys 0m4.877s 【SET GLOBAL innodb_monitor_enable= all】 real 1m21.462s user 0m9.690s sys 0m4.939s real 1m21.057s user 0m9.781s sys 0m4.803s< real 1m22.970s user 0m9.939s sys 0m5.069s 【SET GLOBAL innodb_monitor_disable= all】 real 1m23.818s user 0m9.949s sys 0m4.990s real 1m19.556s user 0m9.386s sys 0m4.844s real 1m21.829s user 0m9.824s sys 0m4.904s
よさげ。 ちゃんとtpcc_startでもオーバーヘッドはからないとだけど、取りあえずmy.cnfにinnodb_monitor_enable= allで全部ONにしちゃおうかなと思いつつ(オンラインで変えられるし)
0 件のコメント :
コメントを投稿