MySQL データベース内の数十億のデータを素早くクリーンアップする方法

MySQL データベース内の数十億のデータを素早くクリーンアップする方法

今日、ディスクアラーム例外を受け取りました。50G ディスクが爆発しました。分析と解決のプロセスは次のとおりです。

1. Linuxサーバーに入り、mysqlフォルダ内の各データベースが占有するディスク容量を確認します。

olderdb だけで 25G を占有していることに気付きましたか?

2. SQLyogを使用してMySQLデータベースにログインし、データベース内の各テーブルが占有するスペースを確認します。

SELECT CONCAT(テーブルスキーマ,'.',テーブル名) AS 'aaa',  
  table_rows AS '行数'、  
  CONCAT(ROUND(データ長/(1024*1024*1024),6),' G') AS 'データサイズ',  
  CONCAT(ROUND(index_length/(1024*1024*1024),6),' G') AS 'インデックスサイズ',  
  CONCAT(ROUND((データ長+インデックス長)/(1024*1024*1024),6),' G') AS'合計' 
information_schema.TABLES から  
WHERE table_schema LIKE 'olderdb';

3. 主キーインデックスをクエリする

軌道からのインデックスを表示

戦略を採用する

前提条件: 現在、データの80%を削除する必要があります

① 削除文

delete ステートメントの削除速度はインデックスの数に比例することがわかっています。このテーブルのインデックスの数はすでに非常に多く、データ量も非常に大きいため、従来の delete ステートメントを使用して削除すると、間違いなく数日かかります。

Delete ステートメントで削除してもディスク領域は解放されず、必ずアラームが表示されるため、この方法はお勧めできません。

② ドロップテーブル

同じ構造を持つ新しいテーブルを作成し、「cc」という名前を付け、このテーブルに保存するデータを挿入してから、古いテーブルを削除します。

SQL ステートメントは次のとおりです。

古いテーブルに基づいて新しいテーブルを作成する

テーブルcc LIKE orbitを作成します。

データを挿入する(数百万のデータをバッチで挿入する必要があります。一度に 300,000 ~ 400,000 が最適で、結局のところ、MySQL のデータ処理能力には限界があります)

日付によるクエリと挿入(毎日約 300,000 のデータ ポイントが生成されるため、日付の挿入が使用されます)

cc に INSERT INTO SELECT * FROM orbit WHERE xttime > '2018-04-16 00:00:00' AND xttime<='2018-04-17 00:00:00';

結果は次のとおりです。

50万件以上のデータを処理するのに5分もかからず、比較的高速であることがわかります。

クリーニング後、データテーブルスペースが解放されます

それから古いテーブルを捨てる

ドロップテーブル軌道

たった3秒ほどかかりました。

新しいテーブルの名前を「cc」に変更します

ALTER TABLE cc を orbit に変更する

要約する

上記は、MySQL データベース内の数十億のデータをすばやくクリーンアップする方法の紹介です。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • 数十億のデータに対するMySQLページングの最適化に関する簡単な説明
  • パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

<<:  JavaScriptの擬似配列と配列の使い方と違い

>>:  Linux で Nginx 1.16.0 をインストールするための詳細なチュートリアル

推薦する

CSS でのフィルタープロパティの使用に関する詳細な説明

フィルター属性は要素の視覚効果を定義しますぼかし画像にガウスぼかしを適用します。 「半径」の値は、ガ...

Windows 8 での MySQL Community Server 5.6 のインストールと設定のチュートリアル

この記事では、Windows 8 での MySQL5.6 のインストールと設定のチュートリアルを記録...

CSSでカスタムフォント(font-face)を導入する方法の詳細な説明

なぜこれを使ったのか?それはポスターを作ることから始まりました。それは嵐の夜でした。 。 。さて、無...

CSS3実践手法のまとめ(推奨)

1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....

Vueは透かし効果を簡単に実現します

序文: Vueプロジェクトで透かし効果を使用するには、コンテナを指定できます効果画像: 1. コンテ...

Web ページ制作におけるテーブル属性 CellPad、CellSpace、Border の説明と使用

cellspacing は表内のセル間の距離です。セルパディングは、表のセル内の空白スペースです。一...

ウェブページの広告デザインにおけるウェブデザインの寸法とルール

1. 800*600 未満の場合、Web ページの幅が 778 以内であれば、水平スクロール バーは...

MySQL でのログインを取り消す

コンセプト紹介: MySQL の redo ログにはトランザクションの動作が記録されることはご存じの...

jsはショッピングカートの加算と減算、価格計算を実装します

この記事の例では、ショッピングカートの加算と減算、価格計算を実装するためのjsの具体的なコードを共有...

手の動きをリアルタイムで監視するための Handtrack.js ライブラリ (推奨)

【はじめに】: Handtrack.jsは、ブラウザ上で直接リアルタイムの手の動きの追跡と検出を実...

同じドメイン名を持つ Nginx プロキシのフロントエンドとバックエンドの分離プロジェクトの完全な手順

フロントエンド プロジェクトとバックエンド プロジェクトは分離されており、フロントエンドとバックエン...

vue3 再帰コンポーネントカプセル化の全プロセス記録

目次序文1. 再帰コンポーネント2. 右クリックメニューコンポーネント要約する序文今日、プロジェクト...

Vue でフルスクリーンを実装し、フルスクリーン終了を監視する

目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...

mysql ワイルドカード (sql 高度なフィルタリング)

目次まず、値の一部と一致させるために使用される特殊文字であるワイルドカードについて簡単に紹介します。...

MySQLのMVCCマルチバージョン同時実行制御の実装

1 MVCCとは何かMVCC の正式名称は、マルチバージョン同時実行制御です。データベースへの同時ア...