はじめに
2021年7月6日に MariaDB の新しいメジャーバージョンである 10.6 がGAリリース(10.6.3)されました。
その後、8月6日には 10.6.4 がリリースされ、これが現在の最新版となっています。
また、MariaDB社が開発しているプロキシソフトウェア MaxScale に関しても、6月30日にベータ版ではありますが次のバージョンである「6.0」が発表されました。
この記事では、上記の MariaDB 10.6 および MaxScale 6.0 の情報について現時点でわかる範囲でご紹介しようと思います。
MariaDB 10.6 について
MariaDB 10.6で追加された新機能や機能改善などを、公式のドキュメントから確認してみましょう。
新機能
Atomic DDL
CREATE TABLE
, ALTER TABLE
, RENAME TABLE
, DROP TABLE
, DROP DATABASE
などのDDLがアトミックに実行できるようになりました。つまり、DDLを実行した時の結果が「完全に完了する」(バイナリログに記録される)か「全て元の状態に戻る」のどちらかになります。
ただし、複数のテーブルを DROP TABLE をする場合、テーブルの全てがアトミックに処理されるのではなく、個々のテーブルごとのDROPがアトミックになる点に注意が必要です。
また、新たにDDL用のログ(–log-ddl-recoveryオプション)が作られるようになりました。デフォルトのログ名は『ddl-recovery.log』です。これは、突然のクラッシュした際などにサーバーの状態を回復するために使用されます。これによってDDL実行中であってもクラッシュセーフであることが保証されます。
その他、アトミックDDLの詳細についてはマニュアルもありますので、そちらもご参照ください。
新しいSQL文法
いくつか新しいSQL構文が追加されています。主なものを以下に列挙します。
OFFSET句は、SELECTで返される結果セットのうち、指定したオフセットの後にあるものだけを返すことができます。
さらにFETCH句では、返す行数を指定できます。ONLY句またはWITH TIES句では、FETCHした行数からさらに結果を返す行を指定できます。
※ WITH TIES句を使用する場合は別途 ORDER BY を指定している必要があります
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
mysql> CREATE TABLE t1 (i INT); mysql> INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(5),(6); mysql> SELECT i FROM t1 ORDER BY i ASC; +------+ | i | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 5 | | 6 | +------+ 7 rows in set (0.000 sec) ### 最初の2行を無視する場合 mysql> SELECT i FROM t1 ORDER BY i ASC OFFSET 2 ROWS; +------+ | i | +------+ | 3 | | 4 | | 5 | | 5 | | 6 | +------+ 5 rows in set (0.000 sec) ### 最初の2行を無視して、そのうち最初の3行を抽出する場合 mysql> SELECT i FROM t1 ORDER BY i ASC OFFSET 2 ROWS FETCH FIRST 3 ROWS ONLY; or mysql> SELECT i FROM t1 ORDER BY i ASC LIMIT 3 OFFSET 2; +------+ | i | +------+ | 3 | | 4 | | 5 | +------+ 3 rows in set (0.000 sec) ### 最初の2行を無視して、そのうち最初の3行を抽出し、なおかつ最後のレコードと同じレコードが続く場合にはまとめて抽出したい場合 mysql> SELECT i FROM t1 ORDER BY i ASC OFFSET 2 ROWS FETCH FIRST 3 ROWS WITH TIES; +------+ | i | +------+ | 3 | | 4 | | 5 | | 5 | +------+ 4 rows in set (0.000 sec) |
なお、このSQL構文が実装された影響で「OFFSET」が予約語になりました。
行ロックの取得を待たずに、即座にSELECTを実行できるようになります(ロックされていたレコードは結果セットから除外されます)。これは、MySQLで既に実装されている同構文と同じ機能です。
インデックス作成時(ALTER TABLEコマンドでも可)に、インデックスにIGNOREDオプションを付与すると、そのインデックスは使用されなくなります。こちらもMySQLで既に実装されている Invisible Inexes と同等の機能です。
JSON形式のデータをテーブル(表)形式に変換する関数です。こちらもMySQLで同様の機能が実装されています。
上記のほかにも、Oracleデータベースとの互換性を担保するために、以下のような関数が追加されました。
機能改善
InnoDB関連
InnoDBに関して、いくつかの改善が提供されています。主なものを以下に列挙します。
- 空のテーブルに対するINSERT文が最適化され、より高速になりました
- row_format=COMPRESSED なテーブルがデフォルトで read_only になりました(将来的にCOMPRESSEDテーブルは非推奨になる布石)
- Information Schema SYS_TABLESPACES テーブルが直接ファイルシステムを参照するようになりました(合わせて SYS_DATAFILESテーブルは削除されます)
- MariaDB5.5との互換性のため用意されていた innodb_checksum_algorithm オプションの設定値(innodb / none)が削除され、"crc32"しかサポートされなくなりました
レプリケーション, Galera, バイナリログ関連
- CHANGE MASTER TO の MASTER_HOST, MASTER_USER オプションに指定できる文字数の上限が引き上げられました(255文字 / 128文字)
- wsrep_modeパラメータ変数が追加されました。これは将来Galeraのチューニングに利用できるようになります。
- binlog_expire_logs_secondsシステム変数が導入されました(MySQLに既にあるものと同じ)
削除されたパラメータ変数
MariaDB 10.6で、以下のパラメータ変数が削除されました。my.cnfで設定している場合は、内容を見直す必要があります。
- innodb_adaptive_max_sleep_delay
- innodb_background_scrub_data_check_interval
- innodb_background_scrub_data_compressed
- innodb_background_scrub_data_interval
- innodb_background_scrub_data_uncompressed
- innodb_buffer_pool_instances
- innodb_commit_concurrency
- innodb_concurrency_tickets
- innodb_file_format
- innodb_large_prefix
- innodb_lock_schedule_algorithm
- innodb_log_checksums
- innodb_log_compressed_pages
- innodb_log_files_in_group
- innodb_log_optimize_ddl
- innodb_page_cleaners
- innodb_replication_delay
- innodb_scrub_log
- innodb_scrub_log_speed
- innodb_sync_array_size
- innodb_thread_concurrency
- innodb_thread_sleep_delay
- innodb_undo_logs
その他
上記に記載した以外にも下記のような変更が加えられています。
- bind_address 変数に IPv4 だけでなく IPv6 も指定できるようになりました
- TokuDB / Cassandra ストレージエンジンが削除されました
- INFORMATION_SCHEMA.KEYWORDS / INFORMATION_SCHEMA.SQL_FUNCTIONS という2つのビューテーブルが追加されました
- innodb_flush_method 変数のデフォルト値が fsync から O_DIRECT になりました
MaxScale 6.0 について
こちらの詳細は現時点ではリリースノートにまとめられています。
※ ベータ版のため、今後内容が変更になる可能性はございます
新機能
MaxScale10.6では、いくつかの新しい機能が追加される予定です。以下、主なものを紹介します。
NoSQL向けのプロトコルを扱えるモジュールが追加されます。最初は、MongoDBのコマンドを同等のSQL文に透過的に変換して、MariaDB上で実行できるようにする機能が含まれているようです。
これにより、MongoDBクライアント(ライブラリ)を使ったクライアントアプリケーションで、MariaDBサーバーをバックエンドとして使うことができます。また、コマンドの変換はモジュール内で行われるため、MaxScaleルータ機能およびフィルタ機能と一緒に使うことができます。
- maxctrlコマンドのデフォルト値を設定
~/.maxctrl.cnf
ファイルで [maxctrl] セクションを設定していれば、その中の設定が maxctrl コマンドのデフォルト値として使用されるようになります。
- REST API Log Interface の実装
REST APIは、MaxScaleのログを通常のHTTPリソースとWebSocketストリームの両方として配信できるようになりました。
- filterの動的変更
maxctrl alter filter(セッション単位の場合はmaxctrl alter session-filters)コマンドを使えば、MaxScaleの稼働中でもfilterの設定を動的に変更できるようにできました。
構成の同期機能を使って、複数のMaxScaleインスタンスが監視対象のデータベース・クラスタを介して同期される構成ファイルを共有することができるようになりました。
Readwritesplit機能の中で、個別のセッションにおいてPrepared Statementをキャッシュする機能が実装されました。
- SQL queries tool / Logs viewer
GUIを使ってクエリの実行結果やログを視覚的に確認できるようになりました。詳しくはMAXGUIのページをご確認ください。
機能改善
MaxScaleの従来の機能に関しても、多くの改善点が見受けられます。以下、主なものを紹介します。
- Columnstore向けのMonitor機能が、クラスタ変更にも対応
Columnstoreクラスタを監視するMonitorについて、クラスタの構成が変更された時に自動でその内容を適用するようになりました。
詳細は Monitor 機能のドキュメントを参照ください。
- causal_reads機能とHintfilter機能が Prepared Statements にも対応
causal_reads 機能と Hintfilter 機能が、Prepared Statementsに対しても使用できるようになりました。
- Readwritesplit機能が「Pipeline」をサポート
Readwritesplit機能において、write文の「パイプライン」実行をサポートされるようになりました。これにより、パイプラインを使用するコネクター(MariaDB JDBCやNode.JSコネクターなど)での、バッチ処理(データローディング)のパフォーマンスが大幅に向上します。
- threads変数のデフォルトが「auto」になった
MaxScale の threads 変数のデフォルト値が、従来の「1」から「auto」に変更されました。
おわりに
以上、MariaDB 10.6 と MaxScale 6.0 の特徴を簡単に紹介しました。
もし、MariaDB 10.6 および MaxScale 6.0 についてもっと情報が知りたい、もしくは導入(アップグレード)を検討しているという方がいれば、ぜひ以下のフォームより弊社までお問い合わせください。