ホームページ >データベース >mysql チュートリアル >mysql ライブラリに 1TB フォームをドロップする方法
テーブルを削除すると、
innodb エンジンは各
バッファ プール インスタンス内のテーブルをクリーンアップします。中間の対応するデータ ブロック ページについては、システムへの影響を避けるために、ここでのクリア操作は実際には
flush ではありませんが、関連するページは
flush キューから削除されます。 。ただし、削除プロセス中は、各
バッファ プール のグローバル ロックを保持し、# から削除するために、この
バッファ プール 内で対応するページを検索します。 ##フラッシュリスト
を削除します。 バッファ プール
内で検索および削除する必要があるページが多すぎると、トラバース時間が増加し、他のトランザクション操作がブロックされ、深刻な場合にはデータベースがロックされる可能性があります。 (推奨コース: MySQL チュートリアル)
ここでもう 1 つ注意する必要があるのは、データベースの
バッファ プール が大きい値に設定されている場合です。サイズが異なると、移動時間は変化します。
バッファ プール
をクリーニングする場合、このテーブルのデータを含む AHI
のクリーニングも含まれます。AHI
の機能については、主に の場合にここでは説明しません。 b ツリー
のレベルが高くなると、b ツリー
によるレイヤーごとの検索を避けるために、AHI
は特定の検索条件に基づいて対応するデータ ページを直接クエリできます。レイヤーごとの検索をスキップする レイヤーの配置手順。次に、AHI は バッファ プール
サイズの 1/16 を占有します。オンライン テーブル データが特に大きくなく、同時実行性もそれほど高くない場合は、AHI を有効にすることはお勧めできません。 AHI
機能をオフにします。 <pre class="brush:php;toolbar:false">mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | ON |
+----------------------------+-------+
1 row in set (0.01 sec)
mysql> SET GLOBAL innodb_adaptive_hash_index=OFF;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | OFF |
+----------------------------+-------+
1 row in set (0.01 sec)</pre>
が生成され、より多くの時間が消費され、ディスク IO
のオーバーヘッドが急増します。CPU
の負荷が高すぎます。他のプログラムの動作に影響を与えます。私の友人がオンライン データベースから 1 TB のテーブルを削除したことがありますが、その結果、データベースは 20 分間応答しなくなり、最終的にはデータベースがクラッシュして再起動されました。 これで、
が 2 つのことを実行したことがわかりました。次に、上記の 2 つのことを最適化します。
バッファをクリアする際に、 バッファ プール
のサイズを減らすには、innodb_buffer_pool_instances
パラメータを適切に設定し、バッファ プール
のデータ ブロック リストのスキャン時間を短縮し、# をオフにします。 ##AHIFunction
ステップ 2 では、
linux
複数のファイル名が同時に同じ
INODE
INODE への参照の数は N>1 であり、そのうちのいずれか 1 つを削除すると、ファイル名は非常に高速になります。直接の物理ファイル ブロックは削除されていないためです。ポインタが削除されただけです。
INODE の参照番号が N=1 の場合、ファイルを削除するにはすべてのデータをクリアする必要があります。時間のかかる;
データベース テーブルの
.ibd
先创建表文件的硬链接 ln t_test.ibd t_test.ibd.bak 删除表 drop table t_test;
最後のステップは、実際に物理ファイルを削除し、そのファイルが占有しているディスク領域を解放することです。次に問題は、物理ファイルを適切に削除する場合は、coreutils
# をお勧めします。ツールセットの##truncate
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.29.tar.xz 使用非root进行解压 tar -xvJf coreutils-8.29.tar.xz cd coreutils-8.29 ./configure make 使用root进行make install
がインストールされたら、大きなファイルを非常に削除するスクリプトを作成できます。
${i}G は、10G
#!/bin/bash TRUNCATE=/usr/local/bin/truncate for i in `seq 2194 -10 10 `; do sleep 2 $TRUNCATE -s ${i}G /data/mysql/t_test.ibd.hdlk done rm -rf /data/mysql/t_test.ibd.hdlk ;を削除するたびに意味します。
以上がmysql ライブラリに 1TB フォームをドロップする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。