以下のテストのほとんどは、MySQL ベンチマークを使用した Linux で実行されていますが、これ以外のオペレーティングシステムおよびワークロードに対しても一定の指針になります。
-static
とリンクした場合に最速のバイナリが得られます。
Linux 上では、pgcc
および
-O3
でコンパイルした場合に最速のコードが得られます。これらのオプションで
sql_yacc.cc
をコンパイルする場合は、gcc/pgcc
で関数のすべてをインラインにする際に大量のメモリが要求されるため約
200M のメモリが必要です。MySQL
のコンフィギャ時に CXX=gcc
も設定して、libstdc++
ライブラリ(これは不要です)が含まれないようにします。pgcc
の一部のバージョンでは、生成されたコードを
x586 タイプのプロセッサ(AMD
など)すべてで動作可能にするコンパイラオプションを使用しても、コードが純正
Pentium
プロセッサでしか実行できないため注意が必要です。
適切なコンパイラおよびコンパイラオプションを使用することで、アプリケーションの速度が 10−30% 改善されます。これは各自で SQL サーバをコンパイルする場合に特に重要です。
Cygnus CodeFusion と Fujitsu コンパイラの両方をテストしましたが、いずれもバグフリーではなく、最適化をオンにして MySQL をコンパイルするには不十分でした。
MySQL
のコンパイル時は、使用するキャラクタセットのサポートのみを含めます(オプション
--with-charset=xxx
)。 標準の MySQL
バイナリディストリビューションは、すべてのキャラクタセットをサポートするようにコンパイルされています。
以下に実施した測定結果の一部を紹介します。
pgcc
を使用し、すべてを
-O6
でコンパイルした場合、mysqld
サーバは gcc
2.95.2 と比較して
1% 速度が上がる。
動的にリンクした場合(-static
なし)は、結果が Linux 上で 13%
遅くなった。クライアントアプリケーションには動的リンクの
MySQL
ライブラリを使用できることに注意する。これは、サーバのパフォーマンス上重大である。
strip libexec/mysqld
を使用して
mysqld
バイナリをストリップすると、生成されたバイナリの速度を
4% まで上げられる。
同一ホスト上で実行されるクライアントからサーバへの接続で、Unix
ソケットファイルではなく、TCP/IP
で接続すると、7.5%
パフォーマンスが遅くなった(ホスト名
localhost
に接続する場合、MySQL
ではデフォルトでソケットファイルが使用される)。
クライアントからサーバへの TCP/IP 接続で別のホストにあるリモートサーバに接続した場合、100M イーサネットによる接続でも、同一ホスト上のローカルサーバに接続した場合と比較して、8-11% 遅くなった。
暗号化した接続(内部 SSL サポートによるすべてのデータの暗号化)を使用してベンチマークテストを実行した場合、パフォーマンスが 55% 遅くなった。
--with-debug=full
でコンパイルすると、ほとんどのクエリが
20% 遅くなる。
一部のクエリはかなり長くかかった(たとえば
MySQL ベンチマークは 35%
の速度低下)。--with-debug
を使用すると、この速度低下は 15%
で済む。--with-debug=full
でコンパイルされた mysqld
バージョンは、--skip-safemalloc
オプションで起動すると実行時のメモリチェックを無効化できる。この場合の最終的な結果は、--with-debug
で構成した場合に非常に近くなる。
Sun UltraSPARC-IIe, Forte 5.0 は、gcc
3.2 より 4% 速度が上がった。
Sun UltraSPARC-IIe, Forte 5.0 では、64 ビットモードより 32 ビットモードのほうが 4% 速かった。
gcc
2.95.2 for UltraSPARC
にオプション -mcpu=v8
-Wa,-xarch=v8plusa
を付けてコンパイルすると、パフォーマンスが
4% 改善した。
Solaris 2.5.1, MIT-pthreads は、単一プロセッサ上で Solaris ネイティブスレッドより 8-12% 遅かった。CPU の負荷が増加するとこの差はさらに拡大する。
--log-bin
を使用して実行すると
mysqld
が 1% 遅くなった。
フレームポインタ
-fomit-frame-pointer
または
-fomit-frame-pointer -ffixed-ebp
なしで gcc
を使用して Linux-x86
でコンパイルすると、mysqld
が
1-4% 速くなった。
pgcc
によるコンパイルに MySQL AB
提供の MySQL-Linux
ディストリビューションを使用したが、AMD
で実行されないコードを生成するバグが
pgcc
にあったため、通常の
gcc
の使用に戻さざるを得ませんでした。このバグが解決されるまで
gcc
の使用を続行します。
ただし、AMD
以外のコンピュータを使用する場合は、pgcc
でコンパイルすると高速なバイナリが得られます。標準の
MySQL Linux
バイナリは、速度および移植性を高めるため静的にリンクされています。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.