無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 6 最適化 :: 6.5 MySQL サーバの最適化 :: 6.5.4 MySQL の速度に対するコンパイルとリンクの影響
« 6.5.3 クエリオプティマイザパフォーマンスの管理

6.5.5 MySQL でのメモリの使用 »
Section Navigation      [Toggle]
  • 6.5 MySQL サーバの最適化
  • 6.5.1 システム、コンパイル時間およびスタートアップパラメータのチューニング
  • 6.5.2 サーバパラメータのチューニング
  • 6.5.3 クエリオプティマイザパフォーマンスの管理
  • 6.5.4 MySQL の速度に対するコンパイルとリンクの影響
  • 6.5.5 MySQL でのメモリの使用
  • 6.5.6 MySQLの DNS の使用

6.5.4. MySQL の速度に対するコンパイルとリンクの影響

以下のテストのほとんどは、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 バイナリディストリビューションは、すべてのキャラクタセットをサポートするようにコンパイルされています。MySQL のコンパイル時は、使用するキャラクタセットのサポートのみを含めます。 これは--with-charsetオプションからconfigureによって管理されます。

以下に実施した測定結果の一部を紹介します。

  • pgccを使用し、すべてを -O6でコンパイルした場合、mysqldサーバは gcc2.95.2と比較して 1% 速度が上がる。

  • 動的にリンクした場合(-staticなし)は、結果が Linux 上で 13% 遅くなった。クライアントアプリケーションには動的リンクの MySQL ライブラリを使用できることに注意する。これは、サーバのパフォーマンス上重大である。

  • 同一ホスト上で実行されるクライアントからサーバへの接続で、Unix ソケットファイルではなく、TCP/IP で接続すると、7.5% パフォーマンスが遅くなった(Unixではlocalhostに接続する場合、MySQL ではデフォルトでソケットファイルが使用される)。

  • TCPクライアントからサーバへの TCP/IP 接続で別のホストにあるリモートサーバに接続した場合、100M イーサネットによる接続でも、同一ホスト上のローカルサーバに接続した場合と比較して、8?11% 遅くなった。

  • 暗号化した接続(内部 SSL サポートによるすべてのデータの暗号化)を使用してベンチマークテストを実行した場合、パフォーマンスが 55% 遅くなった。

  • --with-debug=fullでコンパイルすると、ほとんどのクエリが 20% 遅くなる。 一部のクエリはかなり長くかかった(たとえば MySQL ベンチマークは 35% の速度低下)。--with-debug(=fullなしで)を使用すると、この速度低下は 15% で済む。--with-debug=fullでコンパイルされた mysqldバージョンは、--skip-safemallocオプションで起動すると実行時のメモリチェックを無効化できる。この場合の最終的な結果は、--with-debugで構成した場合に非常に近くなる。

  • Sun UltraSPARC-IIe, Forte 5.0 は、gcc3.2 より 4% 速度が上がった。

  • Sun UltraSPARC-IIe, Forte 5.0 では、64 ビットモードより 32 ビットモードのほうが 4% 速かった。

  • gcc2.95.2 for UltraSPARC にオプション -mcpu=v8 -Wa,-xarch=v8plusaを付けてコンパイルすると、パフォーマンスが 4% 改善した。

  • Solaris 2.5.1, MIT-pthreads は、単一プロセッサ上で Solaris ネイティブスレッドより 8?12% 遅かった。CPU の負荷が増加するとこの差はさらに拡大する。

  • フレームポインタ -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 バイナリは、速度および移植性を高めるため静的にリンクされています。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.