MySQLのInnovation ReleaseとなるMySQL 9.
MySQL 9.4の新機能
最初に、MySQL 9.
JSON Duality View のサポート
MySQL 9.CREATE JSON DUALITY VIEW / ALTER JSON DUALITY VIEWステートメントが追加されており、通常のビューと同様にDROP VIEWやSHOW CREATE VIEWも利用できます。
JSON duality viewに関するメタデータを確認するために、Information Schemaには次のテーブルが追加されています。
JSON_:ビューごとの情報DUALITY_ VIEWS JSON_:ビューに含まれる列DUALITY_ VIEW_ COLUMNS JSON_:ビューと基盤テーブルの親子関係DUALITY_ VIEW_ LINKS JSON_:ビューが参照するテーブルDUALITY_ VIEW_ TABLES
アプリケーション側ではJSONドキュメントとしてSELECTしつつ、内部的には正規化されたテーブル構造を維持できるため、JSONベースのAPIとリレーショナルスキーマの橋渡しに使える機能です。なお、JSON duality viewに対する一部の高度な更新機能などはEnterprise Edition専用のため、今回は割愛します。
ETAG()関数による行ハッシュの生成
JSON duality viewの実装に関連して、行ごとのハッシュ値を生成するETAG()関数が追加されました。ETAG()は行の内容からハッシュを計算して返す関数で、たとえば次のような用途が考えられます。
- 楽観的ロックのためのバージョン管理
- JSONドキュメントとの整合性チェック
- キャッシュ更新有無の判定
行の内容が変わればハッシュも変わるため、
mysqlクライアントの--commandsオプション
mysqlコマンドラインクライアントに、新しいオプション--commandsが追加されました。これは\Tなどmysql独自のクライアントコマンドを一括で有効・
クライアントコマンドを利用したい場合は、起動時に次のように指定します。
mysql --commands=ON -u root -p
セキュリティポリシー上、クライアントからファイル出力などを禁止したい場合に、設定ファイルや起動オプションから挙動を統一できる点がメリットです。
MySQL 9.5の新機能
つづいて、MySQL 9.
innodb_log_writer_threads のデフォルト挙動の変更
MySQL 9.innodb_のデフォルト値の決め方が変更されました。デフォルト値は、バイナリログの有無log_)
公式ドキュメントでは次のように説明されています。
log_の場合bin = OFF - 論理CPU数が4以下:
innodb_log_ writer_ threads = OFF - 論理CPU数が5以上:
innodb_log_ writer_ threads = ON
- 論理CPU数が4以下:
log_の場合bin = ON (従来どおり) - 論理CPU数が32未満:
OFF - 論理CPU数が32以上:
ON
- 論理CPU数が32未満:
明示的に設定している環境では影響ありませんが、未設定の場合、CPUコア数とバイナリログの設定に応じて、より妥当な並列ログ書き出しの設定が自動で選ばれるようになります。
binlog_transaction_dependency_history_size のデフォルト値と上限の拡大
レプリケーションの並列実行に関係するbinlog_のデフォルト値が、25,000から1,000,000
この変数は、バイナリログに記録されたトランザクションの依存関係を解析する際に参照される履歴のサイズを表します。値が大きいほど、より多くのトランザクションについて依存関係を判断できるため、レプリカ側で同時に適用できるトランザクション数が増え、スループット向上が期待できます。
一方で、履歴を保持するために必要なメモリは増加するため、大きな値を設定する場合はメモリ使用量とのバランスを見ながら調整する必要があります。デフォルト値の引き上げは、特に大規模環境での並列レプリケーション性能を重視したチューニングだと言えるでしょう。
MySQL 9.5で削除されたレプリケーション関連変数
MySQL 9.
group_replication_ allow_ local_ lower_ version_ join replica_parallel_ type
9.my.を確認し、不要になった変数を削除しておくことをおすすめします。
まとめ
今回は MySQL 9.
-
9.
4では、JSON duality viewや ETAG()関数の追加により、JSONベースのアプリケーションとリレーショナルスキーマの橋渡しがしやすくなりました。あわせて、mysqlクライアントの--commandsオプションやコンポーネントロード処理の改善など、運用まわりの細かな使い勝手も向上しています。 -
9.
5では、 innodb_のデフォルト挙動の見直しやlog_ writer_ threads binlog_の拡大により、多コア環境・transaction_ dependency_ history_ size 大規模レプリケーション構成でのスループット改善が期待できます。不要になったレプリケーション関連変数も整理されているため、アップグレード前の設定見直しが重要です。
詳しく知りたい場合は、公式マニュアルのWhat Is New in MySQL 9.