ホームページ  >  記事  >  データベース  >  mysql ライブラリに 1TB フォームをドロップする方法

mysql ライブラリに 1TB フォームをドロップする方法

王林
王林転載
2023-06-02 22:43:461057ブラウズ

1. バッファ プールをクリアする

テーブルを削除すると、innodb エンジンは各 バッファ プール インスタンス内のテーブルをクリーンアップします。中間の対応するデータ ブロック ページについては、システムへの影響を避けるために、ここでのクリア操作は実際には flush ではありませんが、関連するページは flush キューから削除されます。 。ただし、削除プロセス中は、各 バッファ プール のグローバル ロックを保持し、# から削除するために、この バッファ プール 内で対応するページを検索します。 ##フラッシュリスト を削除します。 バッファ プール内で検索および削除する必要があるページが多すぎると、トラバース時間が増加し、他のトランザクション操作がブロックされ、深刻な場合にはデータベースがロックされる可能性があります。 (推奨コース: MySQL チュートリアル)

ここでもう 1 つ注意する必要があるのは、データベースの

バッファ プール

が大きい値に設定されている場合です。サイズが異なると、移動時間は変化します。 バッファ プールをクリーニングする場合、このテーブルのデータを含む AHI のクリーニングも含まれます。AHI の機能については、主に の場合にここでは説明しません。 b ツリー のレベルが高くなると、b ツリー によるレイヤーごとの検索を避けるために、AHI は特定の検索条件に基づいて対応するデータ ページを直接クエリできます。レイヤーごとの検索をスキップする レイヤーの配置手順。次に、AHI は バッファ プール サイズの 1/16 を占有します。オンライン テーブル データが特に大きくなく、同時実行性もそれほど高くない場合は、AHI を有効にすることはお勧めできません。 AHI 機能をオフにします。 <pre class="brush:php;toolbar:false">mysql&gt; SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index'; +----------------------------+-------+ | Variable_name                   | Value | +----------------------------+-------+ | innodb_adaptive_hash_index | ON    | +----------------------------+-------+ 1 row in set (0.01 sec) mysql&gt; SET GLOBAL innodb_adaptive_hash_index=OFF; Query OK, 0 rows affected (0.00 sec) mysql&gt; SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index'; +----------------------------+-------+ | Variable_name                   | Value | +----------------------------+-------+ | innodb_adaptive_hash_index | OFF   | +----------------------------+-------+ 1 row in set (0.01 sec)</pre>

2. 該当するディスク データ ファイルを削除します。 ibd

データ ファイルを削除するとき、データ ファイルが存在しない場合、大きすぎると、削除プロセスで大量の

IO

が生成され、より多くの時間が消費され、ディスク IO のオーバーヘッドが急増します。CPU の負荷が高すぎます。他のプログラムの動作に影響を与えます。私の友人がオンライン データベースから 1 TB のテーブルを削除したことがありますが、その結果、データベースは 20 分間応答しなくなり、最終的にはデータベースがクラッシュして再起動されました。 これで、

drop table

が 2 つのことを実行したことがわかりました。次に、上記の 2 つのことを最適化します。

Buffer Pool

バッファをクリアする際に、 バッファ プールのサイズを減らすには、innodb_buffer_pool_instances パラメータを適切に設定し、バッファ プールのデータ ブロック リストのスキャン時間を短縮し、# をオフにします。 ##AHIFunctionステップ 2 では、linux

のハード接続機能を巧みに使用して、実際の物理ファイルの削除を遅らせることができます。

複数のファイル名が同時に同じ INODE

を指している場合、この

INODE への参照の数は N>1 であり、そのうちのいずれか 1 つを削除すると、ファイル名は非常に高速になります。直接の物理ファイル ブロックは削除されていないためです。ポインタが削除されただけです。INODE の参照番号が N=1 の場合、ファイルを削除するにはすべてのデータをクリアする必要があります。時間のかかる;データベース テーブルの .ibd

ファイルにハード リンクを作成すると、テーブルが削除されたときに、物理ファイルを削除する場合、実際に削除されるのは物理ファイルへのポインタなので、削除操作の応答速度は約1秒以内と非常に高速です。 #
先创建表文件的硬链接
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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。