![tmpdirのサイズを制限する](https://rvso.com/image/1417411/tmpdir%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%88%B6%E9%99%90%E3%81%99%E3%82%8B.png)
使用可能なディスク領域をすべて「消費」しないように、MySQL tmpdir のディスク使用量を制限する必要があります。使用可能な領域は約 30G ありますが、mysqld がそれをすべて使用して一時テーブルを作成しているのを確認しました。
私の最初のアプローチはディスク クォータを実装することでしたが、ディスクの使用中にクォータを設定する方法がわからなかったため、問題が発生しました。おそらく起動時に init スクリプトで実行できると思いますが、それが良いアイデアかどうかはわかりません。
何か提案はありますか? このような状況でのベストプラクティスは何でしょうか?
OSはRedHat
uname -a
Linux www.myservername.com 2.6.18-194.17.1.el5 #1 SMP Mon Sep 20 07:12:06 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
mysql --version
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (x86_64) using readline 5.1
答え1
本当にそうでしょうか? 私の知る限り、一時テーブルはクエリに必要な間だけ存在しますが、その後は消えてしまいます。30 GB の一時テーブルを必要とするアクティブなクエリが多数ある場合、空き領域をすべて使用する場合よりも多くの問題が発生します (ディスク IO などを意味します)。
ulimit で遊ぶことはできますが、少なくともサービスを再起動する必要があるため、クォータを設定するよりも優れているかどうかはわかりません。
答え2
LVM をお持ちの場合は、必要なサイズで別のパーティション マウントを作成します。mysqld に --tmpdir オプションを使用できます。
これをチェックして。一時ファイル
答え3
仮想マシンで何度も試した後、クォータを強制的にオン (-m) にするのは実稼働環境にとってリスクが大きすぎると判断しました。このインフラストラクチャを管理しているため、この問題は 1 回しか発生していませんが、巨大な一時テーブルを作成するサーバー内の危険なクエリに関連していると思われます。
ご提案くださった皆様、ありがとうございます。