Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL Blackhole & Replication パフォーマンス検証

昔書いたのですが、再度掲載します。 昔書いた内容としては、結果的に話と、マスタ: をBlackholeエンジンでスレーブを、MyIsamエンジンにすると、BlackHoleエンジンが、データをキューイングする働きをし、更新のパフォーマンスが大幅に向上するよって話でした。

テストとしては以下のような方法をとりました。

上記の環境で、

マスタ スレーブ
MyISAM MyISAM
Blackhole MyISAM

で試験を行った結果、どれくらいパフォーマンスに差が出るのか検証したグラフが以下のものになります。

▼インサートでのパフォーマンス速度差 INSERT処理に関しては、BLACKHOLEエンジン、MyISAMほぼ変わらない速度でした。ただし、MyISAMと違う点につきましては、BLACKHOLEエンジンは、更新データキューイングのみを行っているため、アプリケーションからの更新処理負荷になることがありません。このメリットを大きい!!

▼UPDATE処理での速度差 MyISAMの場合、10000件の、更新処理を境に処理パフォーマンスが大幅に劣化しました。原因としましては、MyISAMのロックメカニズム(表ロック)の関係で、ロック開放を待ちながらの更新が起因しているものと思われます。 また、100000件処理時のBLACKHOLEエンジンと、MyISAMの時間差は、2時間51分37秒です。この大幅の速度差は、やはり、BLACKHOLEエンジンのテーブルは値そのものを持っていないことが大きな要因かと思います。

▼DELETEでの速度差 更新処理同様、MyISAMの場合、10000件を境に処理パフォーマンスが大幅に劣化しました。原因としましては、MyISAMのロックメカニズム(表ロック)の関係で、ロック開放を待ちながらの更新が起因しているものと思われます。 また、100000件処理時のBLACKHOLEエンジンと、MyISAMの時間差は、34分7秒です。この大幅の速度差は、やはり、BLACKHOLEエンジンのテーブルは値そのものを持っていないことが、大きな要因です。

とこんな結果でした。実際の測定はマスタのみの時間を計測しただけなので、スレーブ側に変更されたデータがレプリケーションされる部分については、ほとんど変わらないかと思います。ここで重要な部分は、「マスタ」に負荷をかけていない部分なので、要件に合うのであれば、BLACKHOLEエンジンを採用してみてもいいのかも?というだけです。^^;

BLACKHOLEエンジンが利用される想定としては

  • 更新の負荷を下げたい、参照DBへの反映は多少遅れても良い ミッションクリティカルな部分での採用にはお勧めできませんが、たとえば、FACEBOOKでの「いいね!」ボタンでのデータ反映とかメインシステムに影響が少ない部分で利用できるかと思います。
  • マスタ&スレーブの構成で、スレーブを参照専用にしているシステムである というか、その前提で上記の例も書いているので、あえて説明するまでもないですが、BackHole -> MyISAMMyISAM -> MyISAM, InnoDB -> InnoDBの構成であり、マスタがなんらかの負荷でマスタがダウンしたとしても、結局スレーブ側の反映どんな形式であってもリスクは同じです。