0

MySQL 5.5 サーバーで発生している問題を理解しようとしています。

このサーバーは多数のデータベースをホストします。毎日特定の時間に、プロセスがこのデータベース内の 2 つのテーブルに一連の挿入を実行します。このプロセスは、挿入される行の量に応じて 5 ~ 15 分かかります。

このプロセスは完全に実行されます。しかし、これには予想外の副作用があります。他のすべての挿入と更新は、挿入される 2 つに関係のないテーブルで実行され、プロセスが停止するまでただ座って待機します。このデータベースの外部での読み取りと書き込みは問題なく機能し、SELECT ステートメントも問題ありません。

では、単一のテーブルがサーバー全体ではなくデータベースの残りの部分をブロックする (負荷が原因で) 可能性があるのはなぜでしょうか?

背景のビット:-

  • 挿入されるテーブルは、1,000 万から 2,000 万行の MyISAM です。

  • MySQL は Percona V5.5 であり、Debian で実行されている 1 つのスレーブにサービスを提供しています。

  • レコードを挿入するプロセスによって、明示的なロックが呼び出されることはありません。

  • どの Insert ステートメントも、他のテーブルからデータを選択しません。これらは INSERT IGNORE ステートメントでもあります。

追加情報:

これが発生している間、PROCESS LIST に LOCK テーブル エントリはなく、この問題の原因となっているレコードを挿入するプロセッサはテーブル ロックを発行しません。

テーブル ロックの通常の原因については既に調査しており、それらを除外したと思います。この動作は、MySQL の動作方法に関係があるか、大きなデータベース ファイルを持っていることの癖であるか、OS/ファイル システムに関係している可能性さえあります。

4

1 に答える 1

0

数週間試した後、最終的にこれを見つけました: Yoshinori Matsunobu Blog - MyISAM and Disk IO Scheduler

Yoshinori は、スケジューラ キューを (デフォルトの 128 から) 100000 に変更すると、ほとんどのスケジューラで MyISAM のスループットが劇的に向上することを示しています。

システムにこの変更を加えた後、このプロセスの実行中に MyISAM テーブルでデータベースがハングする劇的なインスタンスはなくなりました。データの量で予想されるようにわずかな速度低下がありましたが、システムは安定したままでした。

MyISAM でパフォーマンスの問題が発生している場合は、Yoshinori のブログ エントリを読んで、この修正を検討してください。

于 2013-11-26T09:37:37.453 に答える