MySQL 5.6での機能強化点(その2) - NoSQL APIとパフォーマンス・スキーマ

2014年1月8日(水)
山﨑 由章

パフォーマンス・スキーマ:MySQLサーバーの稼働統計を確認可能

MySQL 5.5からパフォーマンス・スキーマという、MySQLサーバー内部の稼働統計を蓄積するスキーマが実装されました。MySQL 5.5のパフォーマンス・スキーマは、取得できる情報が細かすぎて一般のMySQLユーザーには使い辛いものでした。しかしMySQL 5.6で大幅に機能強化され、実行に時間がかかっているSQL文の情報が取得できるなど、一般のMySQLユーザーにも使いやすい情報が取得できるようになっています。

図3:パフォーマンス・スキーマの改善点(クリックで拡大)

また、MySQL 5.6ではパフォーマンス・スキーマがデフォルトで有効になっています。パフォーマンス・スキーマが不要な場合は、以下のパラメータを変更して無効化することで、稼働統計蓄積に関するオーバーヘッドを削減することも可能です。

-	performance_schema=OFF

※設定可能な値はON、OFF(デフォルト値はON)
詳細はこちらを参照下さい。

パフォーマンス・スキーマは、以下のように使用します。

  1. 各種設定を必要に応じて変更
  2. performance_schemaストレージエンジン内のテーブルから、確認したい情報をSELECT

※蓄積した情報を初期化したい場合は、TRUNCATEを実行

mysql> TRUNCATE TABLE <テーブル名>;

パフォーマンス・スキーマの設定

パフォーマンス・スキーマの設定には、パラメータで設定するものと設定テーブルで設定するものがあります。

パフォーマンス・スキーマのパラメータ設定

パフォーマンス・スキーマ関連のパラメータは接頭辞が”performance_schema”となっています。例えば、以下のパラメータではaccountsテーブルに保持する行数を設定します。

-	performance_schema_accounts_size=n

※設定可能な値は-1(自動調整)〜1048576 (デフォルト値は-1)
詳細はこちらを参照下さい。

パフォーマンス・スキーマ関連のパラメータは動的に変更することができないため、設定を変更する場合はデータベースを再起動する必要があることに注意して下さい。また、関連するパラメータの詳細については、こちらを参照下さい。

パフォーマンス・スキーマの設定テーブル

パフォーマンス・スキーマの設定テーブルには、以下の5つのテーブルがあります。

  • setup_actors:稼働統計収集対象のユーザーを設定
  • setup_consumers:どんな情報を蓄積するかを設定
  • setup_instruments:収集対象の稼働統計を設定
  • setup_objects:稼働統計収集対象のオブジェクトを設定
  • setup_timers:イベントの種類ごとにタイマーを設定(通常変更する必要無し)

これらの設定を変更する場合は、それぞれのテーブルに対してUPDATE文を実行します。UPDATE文を使って変更するため、データベース稼働中に動的に設定変更可能です。

蓄積された稼働統計を確認

蓄積された稼働統計を確認する場合は、performance_schemaスキーマ内の各種テーブルをSELECTします。各種テーブルには、現在の情報が確認できる”_current”テーブル、履歴で情報が確認できる”_history”、”_history_long”テーブル、集約した情報が確認できる”_summary_”テーブルなどがあります。確認できる情報の詳細については、こちらを参照下さい。

例えば、以下のSELECTを実行することで、累積実行時間が最も長いSQLを特定することができます。

mysql> SELECT * FROM performance_schema.events_statements_summary_by_digest order by sum_timer_wait desc limit 1\G

ps_helper:パフォーマンス・スキーマをより便利に活用

ps_helperは、パフォーマンス・スキーマをより便利に使うためのビューやファンクション、ストアドプロシージャのセットで、オラクル社のSenior Software Development ManagerであるMark Leithが作成し、githubで公開しています。ビュー、ファンクション、ストアドプロシージャを作成するSQL自体を公開していますので、任意でカスタマイズして使用することも可能です。

ps_helperの導入手順は以下の通りです。ps_helperを導入するとps_helperスキーマが作成され、その中にビュー、ファンクション、プロシージャが作成されます。

$ git clone https://github.com/MarkLeith/dbahelper.git dbahelper
$ cd dbahelper
$ mysql -u user -p < ps_helper_<version>.sql

:55, 56, 57が存在します。それぞれ、MySQL 5.5, 5.6, 5.7用のスクリプトです。

多くのビュー、ファンクション、プロシージャが存在するのですが、例えばschema_unused_indexesビューを確認すると、アクセスされていないインデックスを確認できます。

パフォーマンス・スキーマ、ps_helperについては、以下の資料でも解説していますので、参照下さい。

次回は、レプリケーションの改善を紹介予定

MySQL 5.6での主要な機能強化点として、InnoDB、オプティマイザ、NoSQL API、パフォーマンス・スキーマについて紹介してきました。次回の連載では、MySQLの人気機能の1つでもあるレプリケーションの改善点について紹介する予定です。

※本稿において示されている見解は、私自身の見解であって、私の所属するオラクルの見解を必ずしも反映したものではありません。

日本オラクル株式会社

MySQLのセールスコンサルタント。元々はOracleデータベースのコンサルティング、サポート等に従事していたが、オープンソースとフリーソフトウェア(自由なソフトウェア)の世界に興味を持ち、MySQLの仕事を始める。趣味は旅行と美味しいものを食べること。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています