出典について
この記事はThe Percona Performance Blog内のDaniel Guzmán Burgos氏によるWebinar: Introduction to MySQL SYS Schema follow up questions(2015/9/16)を翻訳したものです。
MySQLのSYSスキーマ入門のオンラインセミナーに参加してくれてありがとう。このブログはセミナーで答える時間がなかった追加の質問について説明する為のものである。
MySQL 5.6ではパフォーマンススキーマを有効にして、その後にsysスキーマをインストールしてよいだろうか?もしくはこれらは同じものなのだろうか?
SYSスキーマを利用するためにはパフォーマンススキーマを有効化する必要があり、これらは異なるものだ。 一般的には、パフォーマンススキーマはデータを収集し保存し、一方でSYSスキーマはデータを読取り表示する。
プライマリデータベース上でSYSスキーマをインストールしたら、スレーブにレプリケーションされるだろうか?
デフォルトではレプリケーションされない。SYSスキーマをスレーブにレプリケーションさせたければ、before_setup.sqlを修正(https://github.com/MarkLeith/mysql-sys/blob/master/before_setup.sql#L18)し"SET sql_log_bin = 0;"をスキップさせればよい。
MySQLは実行中の遅いクエリー(slow query)をテーブルに保存することはできるのだろうか?
その通り、保存可能だ。https://dev.mysql.com/doc/refman/5.6/en/log-destinations.html
クエリの実行時刻および所要時間をパフォーマンススキーマのevents_statements_current/historyビューでみるにはどのようにしたら良いだろうか?
performance_schema.events_statements_summary_by_digestテーブルがよいだろう、このテーブルはFIRST_SEENとLAST_SEENというdatetime値のフィールドを持つ。
あるクエリの特定の統計情報をSYSスキーマのビューでみるとき、時間の範囲を指定して評価対象のクエリを指定することはできるのだろうか?あるいは、その時までに実行完了している全てのクエリが評価対象になるのだろうか?
原則的に、その時までに実行完了している全てのクエリとなる。ただし、「diagnostics」または「ps_trace_statement_digest」などのパラメータをランタイム値として受取るいくつかのストアドプロシージャを使っているときは例外となる。
テーブルやインデックスの再構成を自動化するスクリプトを作りたい。どのテーブル、あるいはどのインデックスが断片化率が高く再構成が必要か、をどのように判断すればよいだろうか?
この用途の為には全く別のものを使う必要がある。InnoDBのテーブル内部の断片化について知る為には、XtraBackupを-statsオプションをつけて使うことをお勧めする。
https://www.percona.com/doc/percona-xtrabackup/2.2/xtrabackup_bin/analyzing_table_statistics.html
デメリットやオーバーヘッドは?
パフォーマンススキーマを利用することによりオーバーヘッドが発生する。私はこのプレゼンテーションの見方がよいと思う。(https://www.percona.com/live/mysql-conference-2014/sessions/performanceschema-worth-overhead) すなわち、オーバーヘッドは動的であり、他人のベンチマークにたよらないで欲しい。自分のアプリケーションのベンチマークを行い、実際のオーバーヘッドを把握するのである。
SYSスキーマを利用している時のメモリおよびIO観点での性能影響は?調整する為の方法やSYSスキーマをよりよく動作させる為に役に立つサーバー変数は何かあるだろうか?
必要なインストゥルメントだけを利用して欲しい。このブログ投稿にはこれに関する追加の情報がある。
http://marcalff.blogspot.com.co/2011/06/performance-schema-overhead-tuning.html
レプリケーション関連に関してSYSスキーマはどのようにデータを記録しているのだろうか?
MySQL 5.7.2で初めてパフォーマンススキーマでレプリケーション関連の情報を出力するようになった。すなわちhttps://dev.mysql.com/doc/refman/5.7/en/performance-schema-replication-tables.htmlである。SYSスキーマについていえば、レプリケーション関連について確認できるのは現在時点では「diagnostics」プロシージャ内だけである。しかしご想像の通り、MySQL 5.7.2以上でしかデータは確認できない。
SYSスキーマはPerconaに組込みになっていないのだろうか?
現在時点では、noである。
Galeraの3ノードクラスターでSYSスキーマを使うことはできるのだろうか?
その通り。必要になるのはパフォーマンススキーマだけで、これはPXCやGalera Clusterでも利用できる。
SYSスキーマから傾向を表す情報をえることはできるだろうか?フルテーブルスキャンの経時変化、レイテンシーの経時変化、あるいはその同種の情報である
可能である。プロシージャを使えばよく、例えば「diagnostics」がある。
パフォーマンスのデータはどのようにすれば初期化できるだろうか?
ps_truncate_all_tablesプロシージャを呼び出せばよい。パフォーマンススキーマのテーブルのtruncateは、「収集されたイベントのクリア」と等価である。TRUNCATE TABLEはサマリテーブルにも使えるが、この場合はサマリの列を0またはNULLにするだけで、行を削除することにはならない。
SYSスキーマはMySQL 5.6以前でもインストールできるだろうか?
MySQL 5.5ではps_helperが利用できる
https://github.com/MarkLeith/dbahelper
SYSスキーマはMySQL 5.0のパフォーマンススキーマに対応しているだろうか?
残念ながら、MySQL 5.0にはパフォーマンススキーマがない。MySQL 5.5.3から利用できる。
Gelera ClusterでSYSスキーマをある1ノードにインストールした場合、SYSスキーマは全ノードで利用可能となるだろうか?また、SYSスキーマではクラスタの情報も利用できるのか、あるいはローカルノードの情報のみを収集するのか、どちらなのだろうか?
Galera 3を利用しているPXC 5.6では、答えはYesで全ノードに複製される。また、パフォーマンススキーマはローカルノードのデータのみを収集する。