スマートスタイル TECH BLOG

データベース&クラウド技術情報

PHP+MySQLでMemcachedプラグインを使うと高速化するか調べてみた

MySQL では 「InnoDB Memcached」プラグインを使うことで、Memcached プロトコルを使ってテーブルデータに直接アクセスすることができるようになります。

参考:MySQL :: MySQL 5.7 Reference Manual :: 14.20 InnoDB memcached Plugin

今回はPHPとMySQLの組み合わせでMemcachedプロトコルを使ったデータアクセスと、PHPからSQLを使ったデータアクセスでどれくらい速度差が出るのかを調べて見ました。

このシリーズの他の記事はこちら

  • MySQLでMemcachedプロトコルを使う
  • ベンチマーク MySQL Memcachedプラグイン vs Memcached vs Redis
  • PHP+MySQLでMemcachedプラグインを使うと高速化するか調べてみた
  • 環境

    AWS の m4.2xlarge インスタンスを使用しました。

    スペック

    vCPU: 8 core
    MEM: 32GB
    DISK: gp2 – 16GB

    バージョン

    MySQL: 5.7.20
    PHP : 7.1.11

    ベンチマーク方法

    ベンチマーク方法は、PHPのベンチマークスクリプトから、同一マシンのMySQLに対して、Memcachedプロトコル経由で追加、読み込み、更新、削除をそれぞれ10万回実行するのにかかった時間と、同じくPHPのベンチマークスクリプトからSQLを通じて同様の追加、読み込み、更新、削除を10万回実行するのにかかった時間を比較します。

    ベンチマークスクリプト

    ベンチマークスクリプトは以下になります。
    接続処理は一回のみ、SQLについてはプリペアドステートメントを利用しています。

    ベンチマーク結果

    プロトコル 処理 結果
    Memcached 追加 124.84秒
    Memcached 取得 3.66秒
    Memcached 削除 125.40秒
    SQL 追加 129.55秒
    SQL 取得 8.01秒
    SQL 削除 132.09秒

    追加と削除については、プロトコルの違いで大きな速度差はありませんでした。
    これは更新処理にかかる時間の大半はディスクへの書き出しなど重い処理が占めているため、Memcachedプラグインを使うことで得られる高速化の影響がそれほど現れなかったと考えられます。
    取得についてはMemcachedプロトコルを使うことで実行にかかる時間が半分程度になったことから大きく高速化されたと言えると思います。

    まとめ

    計三回にわたってMySQLのInnoDB Memcachedプラグインについて取り上げてきました。
    下記の用途以外にも、MySQLのInnoDBとして格納されることから工夫次第では色々な使い方ができると思います。

    • Memcachedプロトコルを使いながらデータの高可用性を実現したい
    • MySQLに格納されている比較的単純なデータの読み込み処理を高速化したい
    • Key/Value なデータをリアルタイムにMySQLの他のテーブルとJOINして使いたい
    このシリーズの他の記事はこちら

  • MySQLでMemcachedプロトコルを使う
  • ベンチマーク MySQL Memcachedプラグイン vs Memcached vs Redis
  • PHP+MySQLでMemcachedプラグインを使うと高速化するか調べてみた

  • MySQL

     

    Return Top