mysql“データベースをドロップ”時間がかかります—どうして?

StackOverflow https://stackoverflow.com/questions/150058

  •  02-07-2019
  •  | 
  •  

質問

mysql5.0と一対のデータベース" A"と「B」、両方とも大きなinnodbテーブルを使用します。 "データベースAをドロップ;"データベース" B"をフリーズします。数分間。 「A」を使用しているものはありません。その時点で、なぜこれほど集中的な操作なのですか?

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

役に立ちましたか?

解決

だから、 Matt Rogishの答えが100%役立つかどうかわからない。

問題は、MySQL *がテーブルのオープンとクローズの周りにミューテックス(相互排他ロック)を持っていることです。したがって、基本的には、テーブルがクローズ/削除されている場合、 no otherテーブルを開くことができます。

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

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

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

他のヒント

スカッフマンのフォロー:

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

innodb_file_per_table = 1

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

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

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

デフォルトでは、指定されたmysqlサーバーインストール内のすべてのinnodbデータベースは、データファイルの同じ物理プールを使用するため、「データベースAのドロップ」が考えられます。データベースBに影響する可能性があります。 innodbデータファイルの大量の再取得を伴う可能性がありますが、操作の強度のため、または設計上、それがブロッキング操作であると考えられます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top