Pluggable Storage Engineのオーバーヘッドとエンジン別性能比較

Pluggable Storage Engineはdynamic linkなのでオーバーヘッドがどれくらいなのか気になって調べることにしました。

先に結論を述べておくと、Pluggable化そのものはあまり気にしなくて良さそうです。

測定にはこんな感じでmysqlslapを使いました。同時に100個のスレッドが1000回ずつ処理を行います。

./mysqlslap --iterations=1000 --concurrency=100 --auto-generate-sql --engine=myisam,tritonn

ここで使用しているtritonnエンジンはmyisamをpluggable化しただけのエンジンです。まだSenna呼出機能とか持っていません。

まずmyisam(built-in myisam)ですが、こんな結果になりました。

Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 0.172 seconds
        Minimum number of seconds to run all queries: 0.128 seconds
        Maximum number of seconds to run all queries: 0.217 seconds
        Number of clients running queries: 100
        Average number of queries per client: 0

平均レスポンスは172msです。

続いてtritonn(pluggable myisam)ですが、平均レスポンスは173msということで、ほとんど差がありません。

Benchmark
        Running for engine tritonn
        Average number of seconds to run all queries: 0.173 seconds
        Minimum number of seconds to run all queries: 0.136 seconds
        Maximum number of seconds to run all queries: 0.205 seconds
        Number of clients running queries: 100
        Average number of queries per client: 0

つまり、dynamic linkになるということ自体を気にしてbuilt-in版のTritonnをビルドし続ける必要性は無さそうということです。

せっかくなので他のエンジンもいろいろやってみました。ここから先は、ただのエンジン性能比較です。

memoryストレージエンジン。myisamよりも10%程度速いです。

Benchmark
        Running for engine memory
        Average number of seconds to run all queries: 0.156 seconds
        Minimum number of seconds to run all queries: 0.137 seconds
        Maximum number of seconds to run all queries: 0.174 seconds
        Number of clients running queries: 100
        Average number of queries per client: 0

innodbストレージエンジン。この手の単純性能テストは相変わらず苦手のようです。

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.309 seconds
        Minimum number of seconds to run all queries: 0.290 seconds
        Maximum number of seconds to run all queries: 0.368 seconds
        Number of clients running queries: 100
        Average number of queries per client: 0

blackholeストレージエンジン。これがSQLエンジン部分(ストレージエンジンより上)のおおよそのオーバーヘッドになります。

Benchmark
        Running for engine blackhole
        Average number of seconds to run all queries: 0.031 seconds
        Minimum number of seconds to run all queries: 0.022 seconds
        Maximum number of seconds to run all queries: 0.043 seconds
        Number of clients running queries: 100
        Average number of queries per client: 0

こうしてみるとやはり性能に関してストレージエンジンが与える影響は大きいことが分かりますね。

最後にcsvストレージエンジン。意外と健闘してました。内部処理が単純なだけかもですけど。

Benchmark
        Running for engine csv
        Average number of seconds to run all queries: 0.416 seconds
        Minimum number of seconds to run all queries: 0.316 seconds
        Maximum number of seconds to run all queries: 0.455 seconds
        Number of clients running queries: 100
        Average number of queries per client: 0