:: DEVELOPER ZONE
以下のテストのほとんどは、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 バイナリは、速度および移植性を高めるため静的にリンクされています。
© 1995-2005 MySQL AB. All rights reserved.
