MySQL 互換のDB、Percona Server を使う理由

  • 205
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Percona Server とは

logo.png

Percona 社が開発する、MySQL 互換のデータベースです。

Oracle社の開発する、MySQLをベースにPercona 社が独自の追加機能を加えたものになります。MySQLと互換性があり、特にデータファイルの変換等行うことなく、そのままMySQLと入れ替えて使うことができます。

当然、クライアント・サーバ間のプロトコルも互換性があります。クライアント側はMySQL Clientのままでも問題ありません。

Percona 社って?

Percona Serverの開発のほか、MySQLの商用サポートやコンサルティングを行っている会社です。World wide 120人ぐらい社員がいるようです。
Percona LIVEという大規模なMySQLのカンファレンスでも有名です。

MySQL の運用ツール集である、Percona Toolkit は使っている人も多いと思います(昔、Maatkit と呼ばれていました)。

オススメな点

レスポンスタイムの分布を監視できる

RESPONSE TIME DISTRIBUTION
私が一番気に入ってる機能です。レスポンスタイムの分布を監視することができます。
I_SのQUERY_RESPONSE_TIMEテーブルに、各レスポンスタイム(Time) とその累積クエリ数(Count)、累積時間(Total)が記録されます。

この例では、0.1秒以下で完了したクエリが8066クエリあったことがわかります。

SELECT * from INFORMATION_SCHEMA.QUERY_RESPONSE_TIME

time count total
0.000001 0 0.000000
0.000010 17 0.000094
0.000100 4301 0.236555
0.001000 1499 0.824450
0.010000 14851 81.680502
0.100000 8066 443.635693
1.000000 0 0.000000
10.000000 0 0.000000
100.000000 1 55.937094
1000.000000 0 0.000000
10000.000000 0 0.000000
100000.000000 0 0.000000
1000000.000000 0 0.000000
TOO LONG QUERY 0 0.000000

私はこのデータを定期的に集めて、各レスポンスタイムごとのクエリ数をグラフ化しています。
スロークエリログでは把握しきれない、細かいパフォーマンスの変動を確認することができます。

graph.png
Percona MySQL Monitoring Templates

詳細なスロークエリログ

Percona Serverではスロークエリログが拡張されています。以下のようにより詳細なパフォーマンス統計がログに出力されます。パフォーマンスが劣化したタイミングの情報が詳細に記録されるため「同じクエリでも遅いときと速いときがある」といった場面で活躍してます。

  • InnoDB_IO_r_wait はディスクの読み取りにかかった時間
  • Full_scan はフルスキャン(インデックスが利用されていない読み取り)の有無
  • Tmp_table_on_disk はディスク上でのソートの有無
slow_query.log
# Time: 120114  6:34:33
# User@Host: user[user] @  [10.10.10.10]
# Thread_id: 28313080  Schema: mydb  Last_errno: 0  Killed: 0
# Query_time: 0.588882  Lock_time: 0.000068  Rows_sent: 3  Rows_examined: 183839  Rows_affected: 0  Rows_read: 100
# Bytes_sent: 121  Tmp_tables: 0  Tmp_disk_tables: 0  Tmp_table_sizes: 0

/+ Percona Server 独自のログ +/
# InnoDB_trx_id: 9903E4DB1
# QC_Hit: No  Full_scan: No  Full_join: No  Tmp_table: No  Tmp_table_on_disk: No
# Filesort: No  Filesort_on_disk: No  Merge_passes: 0
#   InnoDB_IO_r_ops: 0  InnoDB_IO_r_bytes: 0  InnoDB_IO_r_wait: 0.000000
#   InnoDB_rec_lock_wait: 0.000000  InnoDB_queue_wait: 0.000000
#   InnoDB_pages_distinct: 11359

MySQL と高い互換性が保たれている

Percona ServerはMySQLのコードをベースに+αするかたちで開発されています。MySQLがバージョンアップすれば、その修正内容は同じバージョンのPerconaにも取り込まれます。

これは重要なことです。基本的にはMySQLと同じと考えられるため、様々な人が発信している、MySQLのバグ情報や検証結果をそのまま利用することができるからです。

デフォルトでPercona の追加機能の多くは無効になっており、安定性が重視されている点も好感が持てます。

MariaDBは5.5までは、MySQLをベースにしていたのですが、10.0からはMySQLとソースがわかれてしまいました。

パフォーマンスにすぐれる(ただし、5.5まで?)

MySQLに先行して、InnoDBの改善が行われており、高いパフォーマンスが出ます。PerconaのサイトにはMySQL 5.5 に比べて、Percona 5.5 の方が 40%ほど高性能というベンチマーク結果が掲載されています。
自分で検証してみても、Percona 5.5の方が非常に高いパフォーマンスが出ることを確認できました。

benchmark
Percona Server Benchmarks より

同様の改善がMySQL 5.6で行われたため、5.6では差は小さくなっています。
※ Percona のサイトには5.6でも差がでると書いてあるのですが、自分で試した限りあまり差はなかったです。

有償版 MySQL の機能が無料で使える

MySQL Enterprise Edition の有償機能相当の機能を一部、Perconaでは無料で使うことが可能です。

MySQL Enterprise Edition には上記以外にも様々な有償機能があります(Enterprise MonitorやEnterprise Firewall とか)。

デメリットは

リリースは本家 MySQLより遅れます。
マイナーバージョンであれば、1ヶ月〜2ヶ月程度のラグがあります。メジャーバージョンではさらに時間がかかるようです。5.6 では、MySQLが2013/02にGAリリースになったのに対し、Percona は2013/06でした。

有償サポートを検討しているのであれば、DBで圧倒的 実績No.1のOracle社の保守・サポートを受けれない点もデメリットでしょう。

Percona Serverのダウンロード

https://www.percona.com/downloads/percona-server