はじめまして。サイバーエージェントでインフラエンジニアをしていますSです。
よろしくお願いします。
現在、弊社ではMySQLの使用が多いのですが、
別のオープンソース・データベースとしてMariaDBを触ってみました。
MariaDBはMySQLからフォークして立ち上げられたプロジェクトで、
インストール手順などはMySQLとほぼ一緒です。
MySQLを使用している方は何の違和感もなく導入できると思います。
その中で、今回は『MariaDB』の拡張機能や新機能を見てみました。
Storege Engine
MySQLに含まれる(MyISAM、Blackhole、CVS、Memory、and Archive storage engine)のもの以外に以下をサポートしている。
・Aria ・・・・・・・・・ MyISAMベースのMariaDB用ストレージエンジン
・PBXT ・・・・・・・ PrimeBase社が開発
・XtraDB ・・・・・ Percona社が開発、InnoDBがベースで高スペックサーバ向けにカスタマイズされている
・FederatedX ・ Federatedの代替
・OQGRAPH ・・ MariaDB5.2よりサポート開始
・SphinxSE ・・・ MariaDB5.2よりサポート開始
・IBMDB2I. ・・・ Mysql5.1.55移行では削除されたもの |
Pool of Thread
以下のオプションで起動することにより、接続スレッドの同時実行を調整可能となり、短いクエリ(実行時間が短い)でいくつかのテーブル/行ロックが存在する場合パフォーマンスを上げることができる
mysqld --thread-handling=pool-of-threads --thread-pool-size=20 |
Table Elimination
Viewからのデータ取得時に実行計画の最適化を行う。
下記のように、table1~table4を使用し作成したtest_vにアクセスした際
必要なテーブルにしかアクセスしなくなる。
Query optimizer
①サブクエリの最適化
以下のオプションを使用することによりサブクエリを使用しているSQL文の実行計画が変化する
set optimizer_switch='semijoin=on,firstmatch=on,materialization=on,loosescan=on'; |
例)
以下の例では、TABLE_4の「DEPENDENT SUBQUERY」でのアクセスがなくなり、
table_4も「PRIMARY」でのアクセスとなる。
②サブクエリキャッシュ
以下のオプションを使用することによりサブクエリ部分をキャッシュにのせる
set optimizer_switch='subquery_cache=on'; |
例)
以下の例では、実際に実行されているSQL文に<expr_cache><が追加され
キャッシュされアクセスされている。
③Index Condition Pushdown
通常インデックスの使用時はB-Tree indexを取得した後、tableのレコードにアクセスしデータを取得するが
『Index Condition Pushdown』機能はインデックスレコードが、それらをチェックすることができる
※B-Tree indexを取得した後、チェックを行い必要なデータのみ取得する
以下のオプションで有効になる
> set optimizer_switch='index_condition_pushdown=on'; |
例)実行計画が「Using index condition」と変化し、機能を使用している
④Multi Range Read
先にインデックスから読み込むべき行を特定し、ストレージエンジンにとって
都合の良い順序(ROWIDなど)で行を読み込むことによって高速化を図る
※MySQL5.6にて導入(実行計画では「Using MRR」と表示される)
MariaDBでは「Rowid-ordered scan」や「Key-ordered scan」と表示される
以下のオプションで有効になる
> set optimizer_switch='mrr=on,mrr_sort_keys=on,mrr_cost_based=off'; |
例)実行計画に「Rowid-ordered scan」が追加され、機能を使用している
何点か『MariaDB』の拡張機能や新機能を見てみましたが、
『MySQL』の機能より良くなっている点が何点か確認できました。
他にも、機能はあり、今後も追加されていくと思います。
しかし、今後『MySQL』もバージョンが上がると新しい機能が付いてくるとも思います。
今後も引き続き、いろいろなオープンソース・データベースの機能を見ていき、
サービスにあったものを導入できればと考えています。