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

MySQL 5.6での機能強化点
前回の記事ではMySQL 5.6での主要な機能強化点として、InnoDBとオプティマイザの改善点について紹介しました。今回はNoSQL APIとパフォーマンス・スキーマについて紹介します。
NoSQL API(InnoDB memcached plugin)
MySQL 5.6では、新たな試みとしてNoSQLのインターフェースを追加しています。InnoDB上のデータにSQLを使わずにアクセスすることも可能になり、SQLを使うよりも高速に処理可能です。NoSQLのインターフェースには、オープンソースの分散キャッシュであるmemcachedを活用し、memcachedをMySQLサーバーのプラグインとして動作できるようにしています。
memcachedはLiveJournalというブログサイトのために開発されたキャッシュの仕組みで、現在では多数のWebサイトでMySQLと組み合わせて利用されています。一般的には、MySQLとmemcachedを組み合わせる場合、データの取得時にアプリケーションは先ずmemcachedに対してアクセスして対象のデータがキャッシュされているかを確認します。対象データがキャッシュされていれば処理は完了しますが、データがキャッシュされていなかった場合は、MySQLにアクセスし直して必要なデータを取り出す必要があります。また、データの更新時にデータを永続化するためには、memcached上のデータだけではなくMySQL上のデータも合わせて更新する処理を、なんらかの形で実装する必要があります。
InnoDBのmemcachedプラグインを使用した場合は、memcachedプロトコル経由でデータを追加更新した際に自動的にInnoDB上にデータを永続化できます。また、処理のスピードも、SQLレイヤーをバイパスできる分高速になります。以下のグラフは、単純なデータの追加処理をSQLのINSERTコマンドを使った場合とmemcachedプロトコルのSETコマンドを使った場合のTPSの比較ですが、memcached経由の方が9倍多く処理できています。
同一のデータに対して、SQLとmemcachedによるアクセスが可能なため、キーバリュー型のシンプルなアクセスでいい場合はmemcachedを使って処理を高速化し、JOINなどの複雑な操作が必要な場合はSQLを使う、といったSQLとNoSQLの両方の利点をいかしたハイブリッドな使い方が可能になっています。
また、事前にinnodb_memcache.containersテーブルにInnoDB上のテーブルに対するマッピング情報を定義しておくことで、memcachedプロトコル経由であっても任意の各テーブルにアクセスできます。更に、memcachedによるデータの変更もバイナリログに記録されるため、レプリケーションと組み合わせて使うことも可能です。
InnoDBのmemcachedプラグインの詳細については、こちらを参照下さい。
パフォーマンス・スキーマ:MySQLサーバーの稼働統計を確認可能
MySQL 5.5からパフォーマンス・スキーマという、MySQLサーバー内部の稼働統計を蓄積するスキーマが実装されました。MySQL 5.5のパフォーマンス・スキーマは、取得できる情報が細かすぎて一般のMySQLユーザーには使い辛いものでした。しかしMySQL 5.6で大幅に機能強化され、実行に時間がかかっているSQL文の情報が取得できるなど、一般のMySQLユーザーにも使いやすい情報が取得できるようになっています。
また、MySQL 5.6ではパフォーマンス・スキーマがデフォルトで有効になっています。パフォーマンス・スキーマが不要な場合は、以下のパラメータを変更して無効化することで、稼働統計蓄積に関するオーバーヘッドを削減することも可能です。
1 | - performance_schema=OFF |
※設定可能な値はON、OFF(デフォルト値はON)
詳細はこちらを参照下さい。
パフォーマンス・スキーマは、以下のように使用します。
- 各種設定を必要に応じて変更
- performance_schemaストレージエンジン内のテーブルから、確認したい情報をSELECT
※蓄積した情報を初期化したい場合は、TRUNCATEを実行
1 | mysql> TRUNCATE TABLE <テーブル名>; |
パフォーマンス・スキーマの設定
パフォーマンス・スキーマの設定には、パラメータで設定するものと設定テーブルで設定するものがあります。
パフォーマンス・スキーマのパラメータ設定
パフォーマンス・スキーマ関連のパラメータは接頭辞が”performance_schema”となっています。例えば、以下のパラメータではaccountsテーブルに保持する行数を設定します。
1 | - 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を特定することができます。
1 | 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スキーマが作成され、その中にビュー、ファンクション、プロシージャが作成されます。
1 | $ git clone https://github.com/MarkLeith/dbahelper.git dbahelper |
2 | $ cd dbahelper |
3 | $ mysql -u user -p < ps_helper_<version>.sql |
※
多くのビュー、ファンクション、プロシージャが存在するのですが、例えばschema_unused_indexesビューを確認すると、アクセスされていないインデックスを確認できます。
パフォーマンス・スキーマ、ps_helperについては、以下の資料でも解説していますので、参照下さい。
次回は、レプリケーションの改善を紹介予定
MySQL 5.6での主要な機能強化点として、InnoDB、オプティマイザ、NoSQL API、パフォーマンス・スキーマについて紹介してきました。次回の連載では、MySQLの人気機能の1つでもあるレプリケーションの改善点について紹介する予定です。
※本稿において示されている見解は、私自身の見解であって、私の所属するオラクルの見解を必ずしも反映したものではありません。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- performance_schemaをsysで使い倒す!
- MySQL5.6- さらなる機能追加とNoSQL
- MySQL 5.6での機能強化点(その1)- パフォーマンスと使い勝手を大きく向上
- DBドキュメント出力とMEBのためのGUI、次期版6.1の新機能を紹介
- 再現性のあるスロークエリーには「SHOW PROFILE」を試してみよう
- NoSQL&RDBMSクラスタ MySQL Cluster
- MySQL 5.6での機能強化点(その3)- 人気のレプリケーションが更に機能強化
- MySQL5.5- 性能改善と可用性向上
- MySQLのチューニングを戦う方へ
- オラクル、「MySQL 5.7 Development Milestone Release(DMR)」をリリース