11

データベース「A」と「B」のペアを備えた mysql5.0。どちらも大きな innodb テーブルを備えています。「データベース A をドロップします。」データベース「B」を数分間フリーズします。その時点で「A」を使用しているものは何もないのに、なぜこれほど集中的な操作になるのでしょうか?

ボーナス ポイント: 「A」を使用し、データを「B」にアップロードしてから、「B」の使用に切り替えるとすると、これをより速く行うにはどうすればよいでしょうか? データベースを削除することは、通常、常に行う必要があるようなことではないため、これは少し外れています。

4

3 に答える 3

13

したがって、Matt Rogish の回答が 100% 役立つかどうかはわかりません。

問題は、MySQL* にはテーブルの開閉に関するミューテックス (相互排他ロック) があるため、基本的に、テーブルが閉じられている/削除されている場合、他のテーブルを開くことができないということです

これは私の同僚によってここで説明されています: http://www.mysqlperformanceblog.com/2009/06/16/slow-drop-table/

影響を軽減する優れた戦略の 1 つは、XFS のようなファイルシステムを使用することです。

回避策は醜いです。基本的に、テーブルを削除する前に、テーブル内のすべてのデータをかじる必要があります (上記のリンクのコメント #11 を参照)。

于 2009-08-29T05:05:05.253 に答える
10

スカフマンの続き:

my.cnf を変更 (および MySQL を再起動) して、以下を含めます。

innodb_file_per_table = 1

( http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html )

これにより、データベースに専用のファイル ストレージが与えられ、共有プールから取り出されます。次に、テーブル/インデックスを異なる物理ディスクに配置して、I/O をさらに分割し、パフォーマンスを向上させるなどの楽しいことを行うことができます。

これは既存のテーブルを変更しないことに注意してください。それらを独自のファイル ( http://capttofu.livejournal.com/11791.html ) に入れるには、作業を行う必要があります。

于 2008-09-29T21:27:21.967 に答える
6

デフォルトでは、特定の mysql サーバー インストール内のすべての innodb データベースはデータ ファイルの同じ物理プールを使用するため、「データベース A を削除する」はデータベース B に影響を与える可能性があります。操作の強度または設計によるブロック操作であると考えられます。

ただし、私自身は試したことはありませんが、各データベースに異なる物理ファイルを使用させることができると思います。それができない場合は、同じマシンに 2 つの異なる mysql インストールを並べて使用する必要があるかもしれませんが、これは完全に実行可能です。

于 2008-09-29T18:52:47.283 に答える