常に約1200万行のmysqlテーブルがあります。テーブルのサイズをある程度管理しやすくするために、古いデータを削除する必要があります。
現在、cronジョブを使用して、このクエリを毎日午前0時に実行しています。
DELETE FROM table WHERE endTime < '1393632001'
クエリが最後に実行されたとき、4,602,400が調べられ、3分以上かかり、CPUがルーフを通過しました。
古いデータをクリアしながら、CPU、同期db接続、ディスクキュー深度などが不当に急上昇しないようにするにはどうすればよいですか?
PS:クエリが実際に使用サイクルのかなり都合の悪い時間に発生していることに気付くでしょう。クエリのタイミングを毎日使用する最低のポイントで発生するように既にシフトしていると仮定します。また、「endTime」にはインデックスがありません。非常に頻繁に挿入される大量のデータがあり、ルックアップが少ないため、可能であればそれを維持したいと思います。
多分cronジョブを使用して、10分ごとに1ラウンドあたり100kまたは5分ごとに50kごとに削除
「データベース管理者」でより良い答えが得られます
—
James Anderson