これによる影響を軽減するためにできることは2つあります
オプション#1:変数を増やします tmp_table_size
および/または
これらのオプションは、メモリ内の一時テーブルが大きすぎると見なされる前にどれだけ大きくなるかを制御し、一時的なMyISAMテーブルとしてディスクにページングします。これらの値が大きいほど、「ディスク上のtmpテーブルにコピーする」可能性は低くなります。サーバーに十分なRAMがあり、 max_connections 単一のDB接続が独自の一時テーブル用に大量のRAMを必要とする場合は、適度に構成されています。
オプション#2:tmpテーブルにRAMディスクを使用する
LinuxでRAMディスクを構成してから、 tmpdir mysqlでは、RAMディスクがマウントされているフォルダになります。
手始めに、OSでRAMディスクを構成します
Linuxに/var/ tmpfs
というフォルダーを作成しますmkdir /var/tmpfs
次に、この行を/ etc / fstabに追加します(たとえば、16GBのRAMディスクが必要な場合)
none /var/tmpfs tmpfs defaults,size=16g 1 2
サーバーを再起動します。
注:再起動せずにRAMディスクを作成することは可能です。サーバーの再起動後にRAMディスクを確保するために、前述の行を/ etc/fstabに追加することを忘れないでください。
今MySQLの場合:
この行を/etc/my.cnf
に追加します[mysqld]
tmpdir=/var/tmpfs
mysqlを再起動します。
オプション#3:tmpテーブルをできるだけ早くRAMディスクに入れます(最初にオプション#2を適用すると仮定します)
MySQLがメモリ内の大きなtmpテーブルをRAMディスクに移行するホイールを回転させないように、tmpテーブルをできるだけ早くRAMディスクに強制することをお勧めします。これを/etc/my.cnfに追加するだけです:
[mysqld]
tmpdir=/var/tmpfs
tmp_table_size=2K
mysqlを再起動します。これにより、最も小さな一時テーブルでさえ、RAMディスク内に存在するようになります。 ls -l /var/tmpfs
を定期的に実行できます 臨時雇用者のテーブルが行き来するのを見る。
試してみてください!!!
警告
/ var / tmpfs 24/7に一時テーブルしか表示されない場合、これはOSの機能/パフォーマンスに影響を与える可能性があります。 / var / tmpfsが過密にならないようにするには、クエリの調整を検討してください。これを行うと、/ var/tmpfsで実体化するtmpテーブルが少なくなるはずです。