ページ ツリー
メタデータの末尾にスキップ
メタデータの先頭に移動

 

1. SQLの差異

項目
MySQL
MariaDB
Autoincrement最大値に達すると、以降は最大値を繰り返す。Warningのみ。エラーにならない。tinyintであれば、,125,126,127,127,127…となる。最大値-1まで。以降はエラーを返す。tinyintは125,126,ERROR,ERROR,…となる。
INSERT,UPDATE,DELETEパーティションバージョン5.6から未対応
SHOW文 WHERE句バージョン5.6から未対応
EXPLAIN文 JSON形式バージョン5.6から未対応
Optimizer Traceバージョン5.6から未対応

基本的に同じプロトコルで通信を行うため、ユーザレベルでの際はあまり無い。
上記の未対応箇所以外であれば、そのままDBをすげ替えても問題ない。

 

2. 機能面での差異

MySQL5.5以前までは、MariaDBもバージョンが一緒になるようにバージョンがつけられていた。(例:MySQL5.5≒MariaDB5.5)
しかし、MySQL5.6からは、MariaDBのバージョンは10になるため注意が必要

両バージョン5.5どうしで比較すると、MariaDB5.5は、MySQL5.5コミュニティ版 + (スレッドプール+プランナ改良)という形になっている。

 

2.1. スレッドプール

スレッドプールはMySQL Enterprise版のみ採用されているが、Maria DBでは標準でサポートされています。

2.2. optimizer_switch

optimizer_switchは、オプティマイザの動作を制御するためのシステム変数です。
下記の表の値を変更することで、オプティマイザの動作が変更できます。

この変数にはグローバル値とセッション値があり、実行時に変更できます。グローバル値のデフォルトはサーバーの起動時に設定されます。

Flag and default setting
Supported in MariaDB since
Supported in MySQL since
derived_merge=onMariaDB 5.3-
derived_with_keys=onMariaDB 5.3-
engine_condition_pushdown=onMariaDB 5.5MySQL 5.5
exists_to_in=onMariaDB 10.0-
extended_keys=onMariaDB 5.5 
firstmatch=onMariaDB 5.3 
index_condition_pushdown=onMariaDB 5.3MySQL 5.6
index_merge=onMariaDB 5.1MySQL 5.1
index_merge_intersection=onMariaDB 5.1MySQL 5.1
index_merge_sort_intersection=offMariaDB 5.3-
index_merge_sort_union=onMariaDB 5.1MySQL 5.1
index_merge_union=onMariaDB 5.1MySQL 5.1
in_to_exists=onMariaDB 5.3-
join_cache_bka=onMariaDB 5.3 
join_cache_hashed=onMariaDB 5.3 
join_incremental=onMariaDB 5.3 
loosescan=onMariaDB 5.3-
mrr=offMariaDB 5.3MySQL 5.6
mrr_cost_based=offMariaDB 5.3MySQL 5.6
mrr_sort_keys=offMariaDB 5.3-
materialization=on (semi-join, non-semi-join)MariaDB 5.3-
subquery_cache=onMariaDB 5.3-
semijoin=onMariaDB 5.3-
semijoin_with_cache=onMariaDB 5.3-
firstmatch=onMariaDB 5.3-
partial_match_rowid_merge=onMariaDB 5.3-
partial_match_table_scan=onMariaDB 5.3-
outer_join_with_cache=on##MariaDB 5.3-
optimize_join_buffer_size=off##MariaDB 5.3-
table_elimination=onMariaDB 5.1-

 

2.3. バイナリログ

項目
Maria DB
MySQL 5.6
補足
ローベースロギング
Row-Based Logging:RBL
(version 2)
 データそのものの圧縮ではなく、それまで変更前後の全レコードデータを書き込んでいたのを、
変更されたカラムのみ書き込むことでデータ総量を圧縮する。

ステートメントベースロギング
Stetement-Based Logging: SBL
(version 1)

デフォルトの設定

 

2.4. UNDOログ

MySQL5.6でテーブルスペースからUNDOログを分離。またpurgeスレッド任意の数だけ起動できる。
MariaDBUNDOログはテーブルスペースに保持している、purgeスレッドは1つのみ

 

2.5. INNODB

MySQL5.6独自の機能。

  1. buffer_poolの内容を保存したり読み込む
  2. FLUSH TABLES FOR EXPORTなど使い、テーブル単位でファイルバックアップ可能
  3. buffer_poolのキャッシュクリアスレッドpage_cleaner
  4. FullText Index (ただし、MariaDBも対応予定)

 

2.6. レプリケーション

MySQL5.5から、スレーブ側はparallel workerをサポート。
スレーブ側はデータベース毎に独立した更新処理可能

ただし、データベース単位なので、データベースを分割していない限り効果は限定的。
また単一トランザクション内でデータベースをまたいで更新なんてするとマスタ-スレーブ間で一貫性が崩れる可能性がある

 

2.7. GTID

MySQL5.6から採用されたGTIDだが、MariaDBと書式フォーマットに差異がある。

DB
フォーマット
Maria DB
`gitd_domain_id`-`server_id`-transaction_id
MySQL 5.6
`UUID`:transaction_id

transaction_idは共通で、1から割り当てられるシーケンス番号(整数値)
MySQLのUUID(Universally Unique Identifier)は自動割当てではあるが、
MariaDBのgitd_domain_idはレプリケーションするサーバクラスタ毎に手動で割り振る。server_idは従来と同じ。

 

3. 性能比較

MySQLとMariaDBの性能比較を下記にまとめた。
mysqlslapを用いたMySQLとMariaDBの性能比較(innodb使用)

  • ラベルがありません
コメントを書く…