Yakstは、海外の役立つブログ記事などを人力で翻訳して公開するプロジェクトです。
9年弱前投稿 修正あり

MySQL 5.7の重要機能まとめ

MySQL Performance Blogの翻訳。MySQL 5.7にはたくさんの改善や新機能が盛り込まれていますが、その中でも特に重要なものについてのまとめ。

原文
MySQL 5.7 key features (English)
原文ライセンス
CC BY-NC-SA
翻訳依頼者
D98ee74ffe0fafbdc83b23907dda3665
翻訳者
D98ee74ffe0fafbdc83b23907dda3665 doublemarket
原著者への翻訳報告
未報告


ある日、Percona Supportの顧客とMySQL 5.7の新機能について議論する機会があったのですが、その後、重要な機能をまとめたリストがあったらいいんじゃないかと考えました。最新のMySQL 5.7.6 リリース予定版(RC)が、素晴らしい機能を詰め込んで公開されたばかり。これがMySQL 5.7の重要機能一覧です。

レプリケーション機能の拡充

  • MySQL 5.7の最重要機能の1つは、マルチソースレプリケーションでしょう。この機能では、スレーブに対して複数のマスタを指定でき、これまでのマスタが1台のみという制限がなくなります。同僚が書いたマルチソースレプリケーションについてのいいブログ記事(日本語訳)が役に立つはずです。
  • MySQL 5.7からSHOW SLAVE STATUSがノンブロッキングになります。SQL_THREADで長く実行されているSQLクエリがあるとSTOP SLAVEが終わるのを待っていましたが、その際もSHOW SLAVE STATUSがすぐに結果を返します。付けくわえておくと、LOCK FREE SHOW SLAVE STATUSの機能は、Percona Server 5.5で最初に実装されたものです。
  • SHOW SLAVE STATUSの情報の全てがperformance_schemaのテーブルから取り出すことができるようになります。詳細はマニュアルを確認して下さい。
  • 新しく登場したCHANGE REPLICATION FILTERコマンドで、MySQLサーバを再起動させずにレプリケーションのフィルタを変更できます。
  • MySQL 5.7以降では、STOP SLAVEでレプリケーションを止めなくてもCHANGE MASTER TOを実行できます。詳細はマニュアルを確認してください。
  • 新しい方法でパラレルレプリケーションが可能になります。1台のスレーブの1つのデータベース(スキーマ)内でも並列にトランザクションを適用できます。save_parallel_typeを確認してみて下さい。
  • Global Transaction Identifiers (GTID)によって、レプリケーションのストリームからポジションを自動的に追跡できるようになります。また、MySQL 5.7からはgtid_modeが動的変数になるので、レプリケーショントポロジ内のMySQLの各サーバを同期し直したり再起動したりせずに、GTIDを有効にしたり無効にしたりできます。ちなみに、オンラインでGTIDの有効無効を変更できる機能はPercona Server 5.6で追加されています。この機能を使うと、マスタをread_onlyにしてスレーブのレプリケーションを止めることなく既存のレプリケーション構成にGTIDを適用できます。マスタのダウンなしにオンラインでGTID環境へ移行する流れについて、同僚のStephaneがブログ記事を書いているので確認してみて下さい。

InnoDBの改善

  • InnoDBバッファプールをオンラインでサイズ変更できます。MySQL 5.7から、MySQLサーバを再起動しなくてもバッファプールのサイズ変更ができるように、innodb_buffer_pool_sizeは動的変数になりました。
  • MySQL 5.7から、オンラインのALTER TABLEでインデックス名の変更を行うRENAME INDEXもサポートされます。この操作は、テーブルのコピーを行わずに実行されます。
  • InnoDBは、パーティショニングされたテーブルでもTransportable Tablespaceをサポートします。この機能についての私のブログ記事が役に立つでしょう。
  • Innochecksumコマンドに新しいオプションが増えています。これについても最近ブログ記事を書きました。
  • MySQL 5.7では、InnoDBで「空間インデックス」をサポートします。また、ALTER TABLE .. ALGORITHM=INPLACEのように、このインデックスを追加するのにもオンラインDDLが使えます。
  • InnoDBバッファプールのダンプとリロードの操作が改善されます。新しいシステム変数innodb_buffer_pool_dump_pctで、最近使ったページの何%までを各バッファプールから読み出してダンプするかを指定できます。

トリガ

  • SQL標準に従ってMySQL 5.7では、テーブルごとにトリガイベント(DML)やタイミング(BEFORE, AFTER)に対して複数のトリガをサポートします。つまり、INSERTアクションに対して複数のトリガを付けるように、イベントごとに複数のトリガを作れます。

パフォーマンス改善

  • MySQL 5.7のInnoDBでは、バルクデータロードが改善されます。InnoDBは、インデックスの作成や再作成時にバルクロードを実行します。これはソート済みインデックス構築と呼ばれインデックス操作を拡張するもので、FULLTEXTインデックスにも影響を与えます。
  • 現在は、バッファプール内のダーティページのディスク書き込みに責任を持つページクリーナースレッドは、1つだけです。MySQL 5.7 InnoDBの並列ディスク書き込みでは、それぞれのバッファプールインスタンスのフラッシュリストやLRUリストに対して、別々のバックグラウンドスレッドがあるので、ディスク書き込み性能が改善されます。2スレッドでのディスク書き込みは、Percona Server 5.6で実装されたものであることも明記しておきます。

オプティマイザの改善

  • EXPLAIN FOR CONNECTIONを使うと、実行中のクエリの実行計画を確認できるようになります。クエリの最適化に重要な情報を取り出すことができるようになるのです。
  • MySQL 5.7では、UNION ALLの結果に対してテンポラリテーブルを作らないようになります。これにより、UNIONが大きな結果セットを生成する場合に、ディスクIOとディスク領域を節約するのに役立ちます。Morgan Tocker氏のブログ記事がよい情報源です。
  • MySQL 5.6で、従来より詳しい情報を表示してくれるEXPLAINのJSONフォーマットが登場しました。5.7のEXPLAINのJSONフォーマットでは、よい実行計画とそうでないものの差が分かりやすいように、クエリの総コストを表示してくれるように拡張されます。
  • MySQL 5.7では、generated columnあるいはvirtual columnが新機能としてサポートされます。同僚のAlexanderがブログ記事で、その良さについて説明しています。

テストスイートの改善

  • MySQLテストスイートは、デフォルトのストレージエンジンとしてInnoDBを使うようになります。それに合わせて、新しいテストが追加されるとともに、既存のテストはGTIDレプリケーションのテストスイートを含むように拡張されています。

セキュリティの改善

  • MySQL 5.7から、パスワードの有効期限切れポリシーが使えるようになります。MySQLサーバに接続するユーザは全て、パスワード有効期限切れのライフサイクルを通ることになり、パスワードを変更する必要があります。詳しくはマニュアルを参照してください。
  • データベース管理者は、ユーザアカウントをロックしたりロック解除したりできます。詳しくはマニュアルを参照してください。
  • MySQL 5.7から、ランダムパスワードが設定され、パスワード有効期限が切れた状態の「root@localhost」の1ユーザだけを作成するようになります。つまり、インストール後は匿名アカウントは作られていない状態で、かつtestデータベースも存在しません。MySQLは、データディレクトリの初期化のタイミングでrootユーザのパスワードを設定した上で、有効期限切れ状態にし、標準出力にパスワードを表示します。

まとめ

ここに挙げたのは、MySQL 5.7の新機能のごく簡単なまとめです。あなたのお気に入りの機能をコメントに書いてくれても結構です。新しい機能がある一方で、非推奨になったり削除された機能もあります。それらを含め、マニュアルで全てを確認できます。

次の記事
Gitで操作を取り消す方法色々
前の記事
PostgreSQLのアンチパターン : 何でもかんでもjsonに入れる

Feed small 記事フィード

新着記事Twitterアカウント