performance_schema_instrumentの設定方法

こんにちは、DBAのたなかです。
前回 に引き続き、performance_schema周りで試行錯誤中です。
performance_schema.setup_consumers, performance_schema.setup_instruments あたりでp_sが取得する情報を制御するのはいいとして、コイツらはMySQLを再起動すると設定が初期値に戻ります。
そのため、performance-schema-consumer-*とperformance-schema-instrumentを設定して、起動時のデフォルトを設定しておく必要がありますね。
performance-schema-consumer-* の方はリファレンスマニュアルにも細かく書いてあるように、
- performance-schema-consumer-events-stages-current= 1
- performance-schema-consumer-events-stages-history= 1
- performance-schema-consumer-events-stages-history-long= 1
とでもしておくと、
mysql56> SELECT * FROM performance_schema.setup_consumers; +--------------------------------+---------+ | NAME | ENABLED | +--------------------------------+---------+ | events_stages_current | YES | | events_stages_history | YES | | events_stages_history_long | YES | | events_statements_current | YES | | events_statements_history | NO | | events_statements_history_long | NO | | events_waits_current | NO | | events_waits_history | NO | | events_waits_history_long | NO | | global_instrumentation | YES | | thread_instrumentation | YES | | statements_digest | YES | +--------------------------------+---------+ 12 rows in set (0.06 sec)
初期状態でこうなります。
しかし、performance-schema-instrumentに関しては
・—performance-schema-instrument=instrument_name=value
Configure a Performance Schema instrument. The name may be given as a pattern to configure instruments that match the pattern.
わかりにくい。。
んですが、ソースコード探してたら設定例が書いてありました。
8619 /*
8620 Parse instrument name and value from argument string. Handle leading
8621 and trailing spaces. Also handle single quotes.
8622
8623 Acceptable:
8624 performance_schema_instrument = ’ foo/%/bar/ = ON ‘
8625 performance_schema_instrument = ‘%=OFF’
8626 Not acceptable:
8627 performance_schema_instrument = ” foo/%/bar = ON ”
8628 performance_schema_instrument = ‘%=’OFF”
8629 */mysql-5.6.16/sql/mysqld.cc
これで設定してみると
- performance-schema-instrument= ‘stage/%= 1’
こうなった。
mysql56> SELECT * FROM setup_instruments WHERE name LIKE '%stage%'; +---------------------------------------------------------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +---------------------------------------------------------------------------------------+---------+-------+ | stage/sql/After create | YES | YES | | stage/sql/allocating local table | YES | YES | | stage/sql/preparing for alter table | YES | YES | ..
enabledもtimedも両方YESになる。
さて、これで残るは”threads.instrumented= ‘NO’ を全スレッドに設定しておく”をデフォルトでやる方法を調べればまあまあイケるかな。。