[+/-]
        glibc
        に関する以下の注意事項は、MySQL
        を自分でビルドする場合にのみ適用されます。x86
        マシン上で Linux
        を実行している場合、当社が提供するバイナリを使用する方がはるかに適切です。当社のバイナリは、高負荷なサーバに適したものするために、最適なコンパイラオプションを使用して、当社が考案した最適なパッチ適用済みバージョンの
        glibc
        をリンクしています。一般のユーザにとって、多数の同時接続や
        2GB
        の制限を超えるテーブルがある構成であっても、ほとんどの場合、当社のバイナリは最良の選択です。以下のテキストを読んで、どうすべきか判断がつかない場合は、最初に当社のバイナリを試して自社の要件を満たすかどうかを確認し、十分でないことがわかった場合にのみ独自のビルドを検討してください。その場合は、不足な点を当社にお知らせください。次回のバイナリのビルドの際に参考にさせていただきます。
      
        MySQL は、Linux 上で LinuxThreads
        を使用します。glibc2
        が組み込まれていない旧バージョンの Linux
        を使用している場合は、MySQL
        をコンパイルする前に LinuxThreads
        をインストールする必要があります。LinuxThreads
        は、http://www.mysql.com/downloads/os-linux.html
        で入手できます。
      
注意: SMP システム上の Linux 2.2.14 と MySQL で未知の問題が発生したことがあります。SMP システムを使用している場合は、できるだけ速やかに Linux 2.4 にアップグレードすることをお勧めします。これによって、システムの処理速度と安定性が向上します。
        注意: バージョン 2.1.1 以前のバージョンの
        glibc は、INSERT DELAYED
        ステートメントを発行したときに使用される
        pthread_mutex_timedwait
        処理に重大なバグがあります。glibc
        をアップグレードするまでは、INSERT
        DELAYED
        を使用しないことをお勧めします。
      
        1,000
        を超える同時接続を予定している場合は、LinuxThreads
        にいくつかの変更を加えて再コンパイルし、新しい
        libpthread.a を MySQL
        に再リンクする必要があります。
        sysdeps/unix/sysv/linux/bits/local_lim.h
        の PTHREAD_THREADS_MAX を 4096
        に増やし、linuxthreads/internals.h の
        STACK_SIZE を 256 KB
        に減らしてください。このパスは
        glibc
        のルートからの相対パスです。 注意:
        STACK_SIZE がデフォルト値の 2MB
        である場合、MySQL は約 600 〜 1,000
        接続で不安定になります。
      
MySQL が十分な数のファイルまたは接続を開けない場合は、その数のファイルを処理するように Linux を設定していない可能性があります。
Linux 2.2 以降では、以下を実行して、割り当てられているファイルハンドルの数をチェックできます。
cat /proc/sys/fs/file-max cat /proc/sys/fs/dquot-max cat /proc/sys/fs/super-max
        16 MB を超えるメモリがある場合は、init
        スクリプト(SuSE Linux の
        /etc/init.d/boot.local
        など)に以下のような記述を追加してください。
      
echo 65536 > /proc/sys/fs/file-max echo 8192 > /proc/sys/fs/dquot-max echo 1024 > /proc/sys/fs/super-max
root アカウントでコマンドラインから上記のコマンドを実行することもできますが、次回にコンピュータがリブートしたときにそれらの設定は失われます。
        あるいは、sysctl
        ツールを使用して、ブート時に以下のパラメータを設定することもできます。このツールは、多くの
        Linux
        ディストリビューションで使用されています(SuSE
        Linux 8.0 以降、SuSE
        でもこのツールが追加されています)。/etc/sysctl.conf
        という名前のファイルに以下の値を入力してください。
      
# Increase some values for MySQL fs.file-max = 65536 fs.dquot-max = 8192 fs.super-max = 1024
        /etc/my.cnf
        に以下を追加する必要もあります。
      
[mysqld_safe] open-files-limit=8192
これによって、MySQL は最大で 8,192 の接続およびファイルを作成できるようになります。
        LinuxThreads の STACK_SIZE
        定数は、アドレス空間でのスレッドスタックのスペーシングを制御します。アドレス空間は、個別のスレッドのスタックに十分なスペースを提供できる程度に大きくなければなりませんが、いくつかのスレッドのスタックがグローバルな
        mysqld
        データにぶつからない程度に小さくなければなりません。mmap()
        の Linux
        実装は、すでに使用されているアドレスをマップアウトするように指示されると、エラーを返さずに、マップ済みの領域を正常にマップ解除して、ページ全体のデータを消去することが実験でわかっています。mysqld
        やその他のスレッドアプリケーションの安全性は、スレッドを作成するコードの
        "紳士的な"
        動作にかかっています。ユーザは、任意の時点で稼動しているスレッドの数が、スレッドスタックがグローバルヒープから離れていられる程度に小さくなるようにするための措置をとる必要があります。mysqld
        では、max_connections
        変数に適切な値を設定してこの "紳士的な"
        動作を強制する必要があります。
      
        自分で MySQL をビルドする場合、LinuxThreads
        にパッチを適用する作業をしたくなければ、max_connections
        を 500
        以下の値に設定してください、大きなキーバッファや大きなヒープテーブルなど、mysqld
        が大量のメモリを割り当てなければならないものがある場合や、2G
        のパッチが適用された 2.2
        カーネルを実行している場合は、さらに小さな値を設定します。当社のバイナリまたは
        RPM バージョン 3.23.25
        以降を使用している場合は、大量のデータを持つキーバッファまたはヒープテーブルがなければ、max_connections
        を 1500 に設定しても大丈夫です。LinuxThreads の
        STACK_SIZE
        の値を小さくすればするほど、スレッドを支障なく作成できるようになります。128K
        から 256K までの範囲の値を推奨します。
      
        多数の同時接続を使用する場合、fork
        爆弾攻撃を避けるために、子プロセスの fork
        や複製のプロセスにペナルティを科すという、2.2
        カーネルの "機能"
        に悩まされることがあります。これにより、同時実行クライアントの数を増やすと、MySQL
        がうまくスケールしなくなります。シングル CPU
        システムでは、スレッド生成が非常に遅くなることでこれが明らかになりました。これは、MySQL
        に接続するのに長い時間がかかり(1
        分程度)、接続を切断するのにも同じだけ時間がかかることを意味します。マルチ
        CPU
        システムでは、クライアント数の増加に伴って、クエリ速度が徐々に落ちていくのが観測されました。解決法を見つける過程で、ユーザの
        1
        人からカーネルパッチを受け取りました。このユーザのサイトではこのパッチが大きな効果を上げているということでした。このパッチは、http://www.mysql.com/Downloads/Patches/linux-fork.patch
        で入手できます。当社は、開発システムと実稼動システムの両方で、このパッチに非常に広範囲に及ぶテストを実行しました。このパッチは、何の問題も引き起こすことなく
        MySQL
        のパフォーマンスを大幅に向上させました。2.2
        カーネル上で高負荷のサーバを実行しているユーザに、このパッチをお勧めします。2.4
        カーネルではこの問題は修正されています。したがって、システムの現在のパフォーマンスに満足していない場合は、2.2
        カーネルにパッチを適用するよりも、2.4
        カーネルにアップグレードする方が簡単です。2.4
        カーネルは、この公正バグが修正されたほかに、優れた
        SMP ブーストも提供します。
      
        2 CPU マシンでバージョン 2.4 上の MySQL
        をテストした結果、MySQL
        のスケーラビリティが非常に向上することがわかりました。1,000
        クライアントに達するまでクエリスループットが低下することは実質的に皆無で、MySQL
        のスケーリングファクタ(1クライアントでのスループットに対する最大スループットの比率として算出される)は
        180% でした。 4 CPU
        システムでも同様の結果が観察されました。クライアント数が
        1,000
        に達するまで実質的に速度低下はなく、スケーリングファクタは
        300% でした。したがって、高負荷 SMP
        サーバの場合は、現時点で 2.4
        カーネルを使用することを強くお勧めします。最大パフォーマンスを達成するには、2.4
        カーネル上で最も高い優先順位を設定して
        mysqld
        プロセスを実行することが不可欠であることがわかりました。
        これを行うには、renice -20 $$
        コマンドを mysqld_safe
        に追加します。4 CPU
        マシン上でのテストでは、優先順位を高くすると、400
        クライアントでのスループットが 60%
        増加しました。
      
        また、現在、当社は、4-way システムおよび
        8-wayシステムで 2.4 カーネル上の
        MySQL
        のパフォーマンスがどれだけ向上するかについての情報を収集中です。このようなシステムにアクセスでき、何らかのベンチマークを行った場合は、結果を
        http://www.mysql.com/company/contact/
        にお送りください。将来、このマニュアルにそれらの結果を記載します。
      
        特に SMP システム上で顕著な、MySQL
        のパフォーマンスを大きく損なうもう 1
        つの問題があります。glibc-2.1 の
        LinuxThreads
        の相互排他ロック(mutex)の実装は、短時間だけ相互排他ロックを保持する多数のスレッドを持つプログラムに悪影響を及ぼします。皮肉なことに、SMP
        システムでは、MySQL を未修正の
        LinuxThreads
        にリンクしている場合、多くの場合、マシンからプロセッサを取り外すと
        MySQL
        のパフォーマンスが向上します。当社は、この動作を修正するための、glibc
        2.1.3
        用のパッチを用意しました(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch)。
      
        MySQL バージョン 3.23.36
        は、glibc-2.2.2
        のアダプティブロックを使用します。これは、glibc-2.1.3
        のパッチ適用済みの相互排他ロックよりもさらに適切です。ただし、状況によって
        glibc-2.2.2
        の現在の相互排他ロックのコードはオーバースピンし、これによって
        MySQL
        のパフォーマンスは損なわれるということに注意してください。mysqld
        プロセスの優先順位を最も高いものに変更することで、この状況が発生する可能性を下げることができます。オーバースピン動作は、パッチで修正することもできました。このパッチは、http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch
        で入手できます。
        このパッチは、オーバースピン、スレッドの最大数、およびスタックスペーシングの修正を一体化したものです。patch
        -p0 </tmp/linuxthreads-2.2.2.patch の
        linuxthreads
        ディレクトリでパッチを適用する必要があります。
        glibc-2.2
        の将来のリリースに何らかの形でこのパッチが組み込まれることが望まれます。いずれにしても、glibc-2.2.2
        にリンクしている場合は、STACK_SIZE
        と PTHREAD_THREADS_MAX
        を修正する必要があります。将来、デフォルトが高負荷の
        MySQL
        設定として許容できる値に修正されて、その結果ユーザ自身のビルドが
        ./configure; make; make install
        まで減ることが望まれます。
      
        上記のパッチを使用して
        libpthread.a
        の静的ライブラリを別にビルドし、MySQL
        に静的にリンクするためにのみ使用することをお勧めします。これらのパッチが
        MySQL にとって安全であり、MySQL
        のパフォーマンスを大幅に向上させることはわかっていますが、その他のアプリケーションについてはわかっていません。その他のアプリケーションをこのライブラリのパッチ適用済みバージョンにリンクする場合や、パッチ適用済みの共有バージョンをビルドしてシステムにインストールする場合は、LinuxThreads
        に依存するその他のアプリケーションに関してはユーザ自身の責任で行ってください。
      
MySQL のインストール時に未知の問題が発生した場合や、一般的なユーティリティがハングした場合は、それがライブラリまたはコンパイラに関連するものである可能性が高いです。その場合は、当社のバイナリを使用することでそれらの問題は解決されます。
        バイナリディストリビューションの既知の問題の
        1 つは libc
        を使用する旧バージョンの Linux システム(Red
        Hat 4.x や Slackware
        など)に関連するもので、ホスト名解決で重大ではない問題がいくつか発生します。
        See 項2.6.2.1. 「Linux の注意事項
          (バイナリディストリビューション)」。
      
LinuxThreads を使用している場合は、最小で 3 つのプロセスが稼動しているのが確認されます。これらは、実際はスレッドで、1 つは LinuxThreads マネージャ用のスレッド、1 つは接続を処理するスレッド、1 つはアラームとシグナルを処理するスレッドです。
注意: Linux カーネルと LinuxThreads ライブラリは、デフォルトでは 1,024 のスレッドしか持つことはできません。したがって、パッチ未適用のシステムでは、MySQL への接続は最大で 1,021 しか使用できません。この制限を回避する方法については http://www.volano.com/linuxnotes.html ページを参照してください。
        ps で dead 状態の
        mysqld
        デーモンプロセスが表示された場合は、通常は、MySQL
        にバグがあるか、壊れたテーブルがあることを意味します。
        See 項A.4.1. 「MySQL が何度もクラッシュする場合に行うこと」。
      
        SIGSEGV シグナルで
        mysqld が停止した場合に Linux
        上でコアダンプを取得するには、--core-file
        オプションを指定して mysqld
        を起動します。注意: ulimit -c
        1000000 を mysqld_safe
        に追加するか、--core-file-size=1000000
        を指定して mysqld_safe
        を起動して、コアファイルのサイズを増やします。
        See 項4.8.2. 「mysqld_safe(mysqld
        のラッパ)」。
      
独自の MySQL クライアントをリンクしているときに、以下のエラーが発生した場合
ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
それらを実行するときに、以下のいずれかの方法で問題を回避できます。
        富士通コンパイラ (fcc / FCC)
        を使用している場合は、MySQL
        のコンパイルでいくつかの問題が発生します。これは、Linux
        ヘッダファイルが非常に gcc
        指向であるためです。
      
        fcc/FCC を使用する場合は、以下の
        configure 行が有効です。
      
CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \ -DCONST=const -DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib \ -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const \ -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \ '-D_EXTERN_INLINE=static __inline'" ./configure --prefix=/usr/local/mysql \ --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared \ --with-low-memory
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.

