sql >> データベース >  >> RDS >> Mysql

Oracle MySQL、Percona Server、MariaDBの比較

    誰かがMySQLと言った時代には、MySQLしかありませんでした。異なるバージョン(4.0、4.1)を選択できますが、ベンダーは同じです。これは、Perconaが独自のMySQLフレーバーであるPerconaServerをリリースすることを決定したMySQL5.0/5.1周辺で変更されました。少し後、MariaDBがMariaDB 5.1に加わり、楽しみ(または混乱)が増しました。どのバージョンを使用すればよいですか? MySQL 5.1、Percona Server 5.1、MariaDB 5.1の違いは何ですか?どちらが速いですか?どちらがより安定していますか?どちらが優れた機能を持っていますか?時間の経過とともに、各フレーバーにますます多くの変更が導入されるにつれて、これはさらに悪化しました。このブログ投稿は、それらを差別化する主要な機能を要約する試みです。また、特定のタイプのプロジェクトに最適なフレーバーについて、いくつかの提案を行います。始めましょう。

    Oracle MySQL

    以前はMySQLでしたが、現在はアップストリームになっています。開発のほとんどはここから始まります。5.6以降の各バージョンは、いくつかの内部競合を解決し、パフォーマンスを向上させます。新機能も定期的に追加されています。 MySQL 5.6は、(とりわけ)GTIDと並列レプリケーションの初期実装をもたらしました。また、ほとんどのALTERをオンラインで実行できるようになりました。最新のMySQLバージョンであるMySQL5.7の機能を見てみましょう

    MySQL5.7の機能

    主な変更の1つは、デプロイメントプロセスの変更です。異なるスクリプトの代わりに、mysqld --initializeを実行するだけで、MySQLを最初からセットアップできます。もう1つの非常に重要な変更-論理クロックに基づく並列レプリケーション。最後に、複数のスキーマを使用するかどうかに関係なく、すべての場合に並列レプリケーションを使用できます。もう1つのレプリケーションの改善点は、マルチソースレプリケーションです。5.7スレーブは複数のマスターを持つことができます。これは、集約スレーブを構築し、たとえば、複数の個別のクラスターからのデータを結合する場合に優れた機能です。

    InnoDBは空間型のサポートを開始し、InnoDBバッファープールは実行時に最終的にサイズ変更できます。オンラインALTERは、パーティショニングやno-opALTERなどのより多くのケースをサポートするように改善されました。

    MySQLは、JSONに機能を追加することに焦点を当てたいくつかの新しい関数とともに、JSONデータ型をネイティブにサポートし始めました。最近では、データのセキュリティが非常に重要になっています。MySQL5.7は、テーブルごとのファイルテーブルスペースの保存データの暗号化をサポートしています。 SSLサポートにもいくつかの改善が追加されました(キーが配置されている場合はSSLが構成され、証明書の作成に使用できるスクリプトが含まれています)。ユーザー管理の観点から、パスワードの有効期限の設定が追加されました。これにより、パスワードの有効期限ポリシーの設計が少し簡単になります。

    DBAを支援することを目的としたもう1つの機能は、「sys」スキーマです。これは、パフォーマンススキーマを使いやすくするために設計された一連のビューです。 MySQL5.7にデフォルトで含まれています。

    最後に、MySQLグループレプリケーション(そして最終的にはMySQL InnoDBクラスター)がMySQL5.7に追加されました。プラグインとして機能し、5.7ブランチの最近のバージョンに含まれていますが、それは独自のトピックです。つまり、グループレプリケーションを使用すると、「仮想的に」同期クラスターを構築できます。

    これは間違いなく機能の完全なリストではありません。すべての機能に興味がある場合は、MySQL5.7のドキュメントを参照してください。

    Perconaサーバー

    当初、MySQLソースコードに適用する一連のパッチがあり、パフォーマンスの向上と機能が追加されていました。ある時点で、Perconaはこれらのパッチを含むMySQLの独自のビルドをリリースすることを決定しました。やがて、より多くの開発リソースが利用可能になり、より多くの機能が追加されました。

    一般に、Percona Serverは、複数のパッチ/改善が加えられた最新のMySQLバージョンと見なすことができます。時間の経過とともに、Percona Serverの機能改善の一部は、アップストリームの機能に置き換えられます。Oracleが、PerconaServerに追加された機能の1つに取って代わる機能を開発するたびに。実装が同等である限り、Perconaはアップストリームからのコードを優先して独自のコードを削除します。これにより、PerconaServerは基本的にOracleのMySQLのドロップイン代替品になります。パフォーマンスが大幅に向上した分野の1つは、InnoDBです。 XtraDBとしてブランド化するのに十分なほど大幅に変更されています。現在、InnoDBと完全に互換性がありますが、常にそうとは限りません。たとえば、PerconaServer5.5の一部の機能はMySQL5.5と互換性がありませんでした。これは、最近のPerconaServerバージョンにも当てはまります。重要なのは、デフォルトでは、Percona Serverでは互換性のないすべての機能が無効になっていることです。これにより、テストが簡単になり、必要に応じてOracleのMySQLにロールバックできます。上記のすべてを考慮して、Percona ServerからMySQLに移行する場合は、引き続き注意が必要です。互換性のない機能の1つが有効になっている可能性があります。

    強調する価値があるのは、Perconaがアップストリームのエンタープライズ機能の再実装に努めていることです。 MySQLの場合、例としてスレッドプールまたはPAM認証プラグインの実装があります。 Perconaサーバーのいくつかの機能を簡単に見てみましょう。

    PerconaServer5.7の機能

    XtraDBの主な機能の1つは、バッファプールのスケーラビリティの向上です。OracleがすべてのMySQLバージョンで行う作業による競合はますます少なくなっていますが、Perconaのエンジニアリングチームは、パフォーマンスをさらに向上させ、パフォーマンスを制限する可能性のある追加のミューテックスを削除するよう努めています。さらに、InnoDB内の競合に関するより多くのデータがInnoDBモニター(SHOW ENGINE INNODB STATUSを介してアクセス可能)に書き込まれます。たとえば、セマフォに関するセクションが追加されました。

    I / Oの分野では、別の一連の改善が行われました。 InnoDBでは、フラッシュメソッドをInnoDBテーブルスペースにのみ設定できます。これにより、InnoDBREDOログのダブルバッファリングが発生します。 XtraDBを使用すると、これらのファイルにもO_DIRECTを使用できます。また、SHOW ENGINEINNODBSTATUSの出力にチェックポイントに関するデータを追加します。それに加えて、並列ダブルライトバッファーとマルチスレッドLRUフラッシャーが実装され、InnoDB内のI/O操作の競合を減らしています。

    スレッドプールは、PerconaServerによって利用可能になったもう1つの機能です。 Oracle MySQLでは、Enterpriseエディションでのみ使用できます。ここでは、Perconaの実装を無料で使用できます。一般に、スレッドプールは、データベースへの既存の接続を再利用することにより、アプリケーションからの多数の接続を提供しながら、競合を減らします。

    さらに2つの機能は、エンタープライズバージョンのMySQLの機能を直接置き換えるものです。それらの1つは、Perconaによって開発されたPAM認証プラグインであり、LDAP、RSA SecurID、またはPAMでサポートされているその他の方法などのさまざまな認証オプションを使用できるように設計されています。 2番目の機能もセキュリティに関連しています-監査ログプラグイン。データベースサーバーで実行されたアクションの記録を含むファイルが作成されます。

    Perconaは、他のストレージエンジンに大幅な改善を導入することがあります。たとえば、MEMORYエンジンで行った変更により、VARCHARまたはBLOBタイプのデータを使用できるようになりました。

    バックアップロックの導入もかなり重要な改善でした。 OracleとMariaDBでは、一貫性のあるバックアップを取得するためにテーブルをロックする唯一の方法は、読み取りロック付きのフラッシュテーブル(FTWRL)を使用することでした。かなり重く、MySQLは開いているすべてのテーブルを閉じる必要があります。一方、バックアップロックは、メタデータロックのより軽量なアプローチを使用します。 FTWRLを実行している負荷の高いサーバーの多くの場合、実行可能と見なされるには時間がかかりすぎます(サーバーを長時間ロックします)が、バックアップロックを使用するとmysqldumpまたはxtrabackupを使用してバックアップを取ることができます。

    Perconaは、他のベンダーの機能の移植にも対応しています。そのような例の1つは、MariaDBの「一貫したスナップショットを使用したトランザクションの開始」の移植です。この機能はバックアップにも関連しています。この機能を使用すると、読み取りロック付きのFLUSH TABLEを実行せずに、(mysqldumpを使用して)一貫した論理バックアップを作成できます。

    最後に、可観測性を向上させる3つの機能-最初に:ユーザー統計。これは、ユーザー、インデックス、テーブル、およびスレッドに関するデータを収集するかなり軽量の機能です。これにより、未使用のインデックスを検索したり、サーバーの負荷を担当しているユーザーを特定したりできます。現在、performance_schemaに対して部分的に冗長ですが、少し軽量で、Performance_schemaについて誰も夢にも思わなかったMySQL 5.0〜5.1の時代に作成されました。

    2番目-拡張された低速クエリログ。繰り返しになりますが、long_query_timeの最高の粒度が1秒であったときに追加されました。この追加により、マイクロ秒の粒度と、クエリごとのInnoDB統計またはその全体的なパフォーマンス特性に関する一連の追加データが得られました。一時テーブルを作成しましたか?インデックスを使用しましたか? MySQLクエリキャッシュにキャッシュされていますか?

    上記で数回言及した3番目の機能-PerconaServerは、SHOW ENGINEINNODBSTATUSでアップストリームよりも大幅に多くのデータを公開します。ワークロードをさらに理解し、問題が発生する前にさらに多くの問題を把握するのに間違いなく役立ちます。

    もちろん、これは完全なリストではありません。詳細に興味がある場合は、PerconaServerのドキュメントを確認することをお勧めします。

    MariaDB

    MariaDBはMySQLのフォークとして始まりましたが、元のMySQL開発チームの一部がMariaDBに加わったことで、すぐに機能の追加に集中しました。 MariaDB 5.3では、オプティマイザーに多くの機能が追加されました。たとえば、バッチキーアクセス、マルチレンジ読み取り、インデックス条件プッシュダウンなどです。これにより、MariaDBは、MySQLまたはPerconaServerが苦労するいくつかのワークロードで優れたものになりました。これまで、これらの機能の一部はMySQLに追加されていました(主にMySQL 5.6)が、一部はまだMariaDBに固有です。

    MariaDBによって導入されたもう1つの重要な機能は、グローバルトランザクションIDでした。それほど後のことではありませんが、Oracleは独自の実装をリリースしましたが、MariaDBが最初に実装しました。同様の話は、別のレプリケーション機能であるマルチソースレプリケーションです。MariaDBはOracleの前にそれを持っていました。現在、最近リリースされたMariaDB 10.2には、まだ開発中のMySQL8.0で利用できるようになる機能も含まれています。たとえば、再帰的な一般的なテーブル式やウィンドウ関数について話します。

    MariaDB10.2の機能

    前述したように、MariaDB 10.2では、ウィンドウ関数と再帰的な共通テーブル式が導入されています。これは、開発者がより効率的なSQLクエリを作成するのに役立つSQLの拡張機能です。

    非常に重要な変更は、MariaDB10.2がInnoDBを使用することです。 10.1までは、XtraDBがデフォルトのストレージとして使用されていました。残念ながら、これにより、最新のXtraDBに追加された機能をMariaDB10.2ユーザーが利用できなくなります。

    仮想列が改善されました。10.2ではさらに多くの制限が解除されました。

    最後に、同じイベントに対する複数のトリガーのサポートが追加されました。たとえば、同じテーブルにONUPDATEトリガーを複数作成できるようになりました。

    開発者は、JSONサポートとそれに関連するいくつかの機能の恩恵を受ける必要があります。また、空間データをGeoJSON形式にエクスポートできる新しい関数も気に入っているはずです。 JSONについて言えば、EXPLAIN FORMAT=JSON出力が改善されました。より多くのデータが表示されます。

    セキュリティ面では、OpenSSL1.1とLibreSSLのサポートが追加されました。

    もちろん、このリストは完全ではありません。MySQL10.2に追加されたものに興味がある場合は、ドキュメントを参照してください。

    新機能に加えて、MariaDB 10.2は、以前のバージョンで実装された機能の恩恵を受けています。最も重要なものを見ていきます。

    MariaDB10.1の最も重要な機能

    まず、10.1以降のMariaDBにはGaleraクラスターがバンドルされています。追加のライブラリをインストールする必要はなく、すべてを使用する準備ができています。

    MariaDB 10.1は、保存データ暗号化の実装をもたらしました。 OracleのMySQLに実装されている機能と比較すると、MariaDBの方が拡張されています。表領域を暗号化するだけでなく、REDOログ、一時ファイル、およびバイナリログも暗号化します。これにはいくつかの問題があります-mysqldumpやxtrabackupなどのCLIツールはバイナリログにアクセスできず、暗号化されたインスタンスのバックアップに問題がある可能性があります(これは特にxtrabackupに当てはまります-ごく最近、MariaDBは保存データをサポートするMariaDBBackupと呼ばれるxtrabackupフォークを作成しました暗号化)。

    わかりました。どのフレーバーを使用すればよいですか?

    通常のように、正解は次のようになります。「状況によって異なります」:-)。いくつかの観察結果を共有します。これは、決定に役立つ場合と役に立たない場合がありますが、最終的には、ベンチマークを実行し、環境とアプリケーションに最適なオプションを見つけるのはあなた次第です。

    まず、流れについてお話しましょう。 Oracleは新しいバージョンをリリースします-たとえばMySQL5.7です。パフォーマンス面では、現時点では、これは市場で最速のMySQLフレーバーです。これは、Oracleだけがその程度までInnoDBの改善に取り組むのに十分なリソースを持っているためです。数か月以内に(5.7の場合は4か月でした)、Perconaは一連の改善を加えたPercona Server 5.7をリリースします。ワークロードのタイプによっては、アップストリームよりも優れたパフォーマンスを提供する場合があります。最後に、MariaDBは新しいアップストリームバージョンを採用し、その上に新しいバージョンを構築します。

    これがカレンダーでの様子です(MySQL 5.7についてはまだ話し合っています)。

    MySQL 5.7 GA:2015年10月21日

    Percona Server 5.7 GA:2016年2月23日

    MariaDB 10.2 GA:2017年5月23日

    MariaDBがMySQL5.7に基づくバージョンをリリースするのにどれくらいの時間がかかったかに注意してください-以前のすべてのバージョンはMySQL5.6に基づいており、明らかに、MySQL5.7よりも低いパフォーマンスを提供していました。一方、MariaDB 10.2がリリースされ、XtraDBの代わりにInnoDBが使用されています。 OracleがMySQLとPerconaServerの間のパフォーマンスのギャップをほぼ埋めたことは事実ですが、それでも「ほとんど」です。その結果、MariaDB 10.2は、場合によってはPercona Serverよりもパフォーマンスが低下する可能性があります(MariaDB 5.3で行われたオプティマイザー作業により、一部はMySQLでまだ再作成されていないため)

    機能的には、より複雑です。 MariaDBは多くの機能を追加しているので、それらのいくつかに興味がある場合は、MariaDBの使用を検討することをお勧めします。それには欠点もあります。 Percona Serverには、アップストリームのMySQLとは異なる多くの機能がありましたが、OracleがMySQLでそれらを実装し始めたとき、Perconaは、アップストリームからの実装を使用することを優先して、実装を減価償却することにしました。これにより、MySQLとPercona Serverで異なるコードの量が減り、Percona Serverのコードの保守が容易になり、最も重要なこととして、Percona ServerがMySQLと100%互換性を持つようになります。

    残念ながら、これはMariaDBには当てはまりません。 MariaDBは最初にGTIDを導入しましたが、それは事実ですが、OracleがGTIDのバージョンを開発した後、MariaDBは独自の実装に固執することを決定しました。このブログは、どちらの実装が優れているかを判断する場所ではありませんが、その結果、互換性のない2つの異なるGTIDシステムを管理する必要があります。これにより、レプリケーションを管理するツールに負担がかかり、相互運用性が低下します。レプリケーションへのこだわり-グループコミットと並列レプリケーション:OracleとMariaDBの両方に独自の実装があり、両方を使用する場合は、必要なチューニングを適用するために両方を学習する必要があります-ノブは異なり、動作も異なります。同様のケースは、仮想列のサポートです。2つの異なる、100%互換性のない実装であり、その結果、構文がわずかに異なるため、MariaDBからデータを簡単にダンプしてOracleのMySQLにロードすることはできませんでした。そのため、新しい機能にMariaDBのバージョンを使用することにした場合、Oracleの実装を使用するためにMySQLに戻って移行したい場合でも、そのバージョンで行き詰まってしまう可能性があります。せいぜい、移行を実行するにははるかに多くの労力が必要になります。もちろん、常に1つの環境にとどまっている場合は、深刻な影響はない可能性があります。しかし、それでも、インターネットでブログを読んで、MySQLのフレーバーに実際には適用できないソリューションを見つけた場合にのみ、互換性の欠如が目立ちます。

    つまり、要約すると、MySQLとの互換性を維持することに関心がある場合は、Percona Server(またはもちろんMySQL自体)がおそらく最適な方法です。パフォーマンスに関心がある場合は、最新のMySQL上に構築されたPercona Serverがあれば、それが最適な方法かもしれません。もちろん、MariaDBのベンチマークを行い、MariaDBに固有の最適化の一部からワークロードが恩恵を受けられないかどうかを確認することもできます。運用面では、環境の1つ(Oracle / PerconaまたはMariaDB)のどちらか適切な方に固執することをお勧めします。 MySQLまたはPerconaServerには、より一般的に使用され、外部ツールとの統合がわずかに簡単であるという利点があります(すべてのツールがすべてのMariaDB機能をサポートしているわけではないため)。 MariaDBに実装されたばかりの新しくて光沢のある機能の恩恵を受ける場合は、潜在的な互換性の問題とパフォーマンスの低下の可能性を念頭に置いて、それを検討する必要があります。

    このブログ投稿で、MySQLの世界でのさまざまな選択肢と、それらを比較できるさまざまな角度についてのアイデアが得られたことを願っています。結局のところ、セットアップに最適なものを決定するのはあなたの仕事になります。簡単ではないかもしれませんが、それでも私たちには選択肢があり、自分に最適なものを選ぶことができることに感謝する必要があります。


    1. ツリービューコントロールを使用したアクセスメニューの作成

    2. mysqlデータベースのサイズを取得する方法は?

    3. PG列をNULLABLETRUEに変更するにはどうすればよいですか?

    4. MySQLの単一引用符、二重引用符、逆引用符の使用法の説明