2015/10/17にGAになったMariaDB 10.1.8のまとめです。
参考までに本家のドキュメントへのリンクも貼っています。
足りないところなど補足していただけると助かります。
Security
Data at Rest Encryption
10.1.3及び10.1.4から利用可能な機能です。
簡単にいえばデータ暗号化の機能で、XtraDB/InnoDB及びAriaストレージエンジンに対応しています。
暗号化の範囲は個別のテーブル及びXtraDB/InnoDBのログファイルとなっています。
暗号化の復号にかかるオーバーヘッドは大体3〜5%とのこと。
Password Validation
10.1.2から利用可能な機能です。
ユーザーのパスワードに対して、例えば「大文字の英字を1文字以上含む」と言った規約を設定することが出来ます。
プラグインをインストール(INSTALL PLUGIN)することによりポリシーを設定することが可能です。
現在サポートされているのは以下の2種類です。
- simple_password_check
- cracklib_password_check
設定したパスワードのポリシーは、次回以降の設定から適用されます。
HA
Galera support
10.1.1から、Galeraが同梱されるようになりました。
10.1のパッケージは、MariaDB単体か、またはGaleraのノードとして利用することが可能になります。
ソースからビルドする際は、ビルドオプションのWITH_WSREP
をON
にしておく必要があります。
Optimistic mode of in-order parallel replication
10.1.3からparallel replicationにOptimistic modeが追加されました。
このモードがONの状態では、DDL同士が同じ行を変更するなどで起こるコンフリクトを楽観的に解決するようになります。
例えばトランザクションA, Bがコンフリクトした場合、後者のトランザクションがロールバックされ、前者のトランザクションを適用します。変更が適用されたら、その後再度後者を適用します。
これによってトランザクションのロールバックが起こりますが、基本的にはこのロールバックのコストより並列でbinlogを適用する事によるコスト削減のメリットのほうが大きくなるようです。
GTID対応
GTIDに対応することで、GTIDが有効化されているMySQL5.6、またはそれ以上のバージョンのslaveとなることが可能になりました。
MySQLとMariaDBを混在させるパターンや、MySQLからMariaDBにマイグレーションする場合に重要な機能ですね。
Scalability
パフォーマンス改善
MariaDB 10.1 can do 1 million queries per second
状況によるので、この辺りはまた別途ベンチマークを取ってみたいですね。
Defragmentation
innodb-defragment=1
を設定することで、OPTIMIZE TABLE
で新しいテーブルの作成をせずにデフラグを行うことができるようになりました。
Information Schema
wsrep (write set replication)向けのテーブルが2つ、GIS(地理情報)向けのテーブルが2つ追加されました。
また、以下のテーブルにカラムが追加されました
GIS
10.1.2から、地理情報向けの標準関数が増えました。
Syntax
Consistent IF [NOT] EXISTS/OR REPLACE Support
いくつかのDDLに対して、IF [NOT] EXISTS
,OR REPLACE
が利用可能になります。
- CREATE DATABASE
- CREATE EVENT
- CREATE FUNCTION UDF
- CREATE INDEX
- CREATE ROLE
- CREATE SERVER
- CREATE TRIGGER
- CREATE USER
- CREATE VIEW
- DROP EVENT
- DROP INDEX
- DROP ROLE
- DROP TRIGGER
- DROP USER
SHOW/FLUSH Syntax
information_schemaのテーブルに対してSHOW/FLUSH文が利用可能になりました。
SHOW文を利用すると、複数のカラムが存在しても古き良き80x25のサイズに合わせて省略してくれるそうです。
ANALYZE/EXPLAIN
ANALYZE及びANALYZE FORMAT=JSON
がEXPLAINと同等のフォーマットで結果を返すようになりました。
EXPLAIN FORMAT=JSONがMySQL5.6に合わせて再実装されました。
GET_LOCK(str,timeout)
GET_LOCK(str,timeout)の第二引数であるtimeoutにマイクロ秒を指定することが可能になりました。
オプティマイザ
ORDER BY
ORDER BY
の挙動が変わったそうです。
ドキュメントへもある通り深く追えなかったので、あまり説明できません。
frm
.frmファイルがtemporary tableに対して作成されなくなります
MAX_STATEMENT_TIME
max_statement_timeを1以上の値にすると、指定秒数を超えたクエリの実行は自動的に中止されるようになります。
UNION ALL
UNION ALLの実行にtemporary tableが利用されなくなりました。
この変更はMySQL5.7にバックポートされるそうです。
malloc()の実行タイミングの変更
malloc()
の実行タイミングを変えたことで、簡単なクエリの実行が早くなったそうです。
WebscaleSQLのパッチ適用
幾つかのWebscaleSQLのパッチが適用されたそうです。
XtraDB/InnoDB
ページサイズの上限が64KBに
MySQL5.7と同様に、innodb_page_size
に対して32k
と64k
が指定できるようになります。
その他
Slow log
Slow Query Log(及びmysql.slow_log)にUPDATE/DELETE文が記載されるとき、変更のあった行数を表示するようになった。
Primary Key
PRIMARY KEYに指定されていて、かつDEFAULT NULLが指定されているカラムは自動的にNOT NULL DEFAULT 0に変換されるようになった。
インストール
パッケージマネージャからインストールすることが出来ます。
公式からインストールのための設定を自動生成できるので、試してみてください。
設定例を記載しておきます。
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/rhel6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ yum install mariadb mariadb-server
baseurlが10.1になっていることを確認してください。