1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Performance_schema のステートメント情報を保持する仕組み

Last updated at Posted at 2016-12-28

以下のマニュアルのように、MySQL5.6でPerformance_schemaが大幅に強化されたことに伴い、
スロークエリの分析などにもパフォーマンススキーマステートメントイベントテーブルの利用が
推奨されるようになりました。
その仕組みに関して調べたので、メモとして残しておきたいと思います。

その際に利用する3テーブルの違いは以下の通りです。

・ events_statements_current
スレッド毎の最新のSTATEMENTSの情報を保持している

・ events_statements_history
スレッド毎の最新のSTATEMENTSの情報をX個まで保持している
(Xの値はperformance_schema_events_statements_history_size変数で制御)

・ events_statements_history_long
全体の最新のSTATEMENTSの情報をX個まで保持(スレッド毎ではない)している
(Xの値はperformance_schema_events_statements_history_long_size変数で制御)

これらの3テーブルには、以下のような仕組みで情報が蓄積されているようです。

  1. クエリが実行されると、その情報は即座にcurrentテーブルに記録される
  2. 次のクエリが実行されると、その前の情報はcurrentテーブルからhistoryテーブルに移動する
  3. X個の上限に達した場合は、historyテーブルから古いクエリ情報がDROPされる
  4. また、history_longテーブルの上限値に達した場合も、クエリ情報はDROPされる

つまり、historyテーブル と history_longテーブル はそれぞれ、「情報蓄積」の役割を果たし、
これらがあるために過去のクエリ情報を参照することが出来ます。

ただし、デフォルトではevents_statements_currentテーブルのみが有効になっています。
そのため、historyテーブル および history_longテーブル に関しては、システムの特性や
どのような情報を保持したいか、によって随時変更することが推奨されます。

例えば、常に複数スレッドが並行して動くようなシステムの場合は、historyテーブル の保持数を
上げると良く、バッチがメインのシステムの場合は、history_longテーブル を重要視すると良いはずです。

また、上限値(X)を定める各種変数に関しては、デフォルトでは「-1」(= auto-sized)となっており、起動時に自動的に値を設定します。
一方、MySQL5.7では「-1」(= auto-scaled)であり、動的に上限値が変動するようです。

なお、これらのパラメータ変数は動的変更が出来ないため、変更する場合はmy.cnfに明記してMySQL再起動が必要です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?