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 をインストールするための詳細なチュートリアル

推薦する

Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?

序文ご存知のとおり、nginx 構成ファイルは add_header ディレクティブを使用して応答ヘ...

VMWare を使用して Windows 上で Linux 環境を構築する手順 (画像とテキスト)

Mac を返却して以来、元のラップトップは使用されていません。このラップトップの構成は非常に良好で...

独自の YUM リポジトリを作成する手順

簡単に言うと、ウェアハウスとして使用される仮想マシンの IP は 192.168.149.129 で...

MySQLにデータを素早くインポートする方法

序文:日々の勉強や仕事の中で、データをエクスポートする必要に迫られることがよくあります。たとえば、デ...

Web でよく使われるフォントの紹介 (iOS および Android ブラウザでサポートされているフォント)

年末なので仕事も少なくなっています。私が何もせずにいるのを見ると、上司はきっと不快に思うでしょう。そ...

5つのCSSスクロール天井実装方法の比較(パフォーマンス向上版)

改訂版のプレビューこの記事は 3 日前に書かれたものです。先輩の同僚から改訂の提案をいくつかいただき...

TypeScript のユニオン型、交差型、型ガード

目次1. ユニオンタイプ2. クロスオーバータイプ3. 型保護3.1 カスタム型保護3.2 保護の種...

CentOS 6-7 PHPのyumインストール方法(推奨)

1. 現在インストールされているPHPパッケージを確認するyum list installed |...

JS 実用的なオブジェクト指向スネークゲームの例

目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....

WeChat アプレット学習 WXS 使用方法チュートリアル

wxsとは何ですか? wxs (WeiXin Script) は、小規模プログラム用のスクリプト言語...

Docker で Elasticsearch Kibana と ik Word Segender をデプロイする詳細な説明

esインストール docker pull elasticsearch:7.4.0 # -d : バッ...

mysql MDLメタデータロックの詳細な分析

序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...

CSS3はマスク連打機能を実現する

最近Bステーションでスマートアンチブロッキング弾幕と呼ばれる弾幕エフェクトを見ました。これは伝説のマ...

Kubernetesでポッドを作成する方法

目次ポッドを作成するには? kubectl ツールポッドを作成するには?前回の記事では、コンテナとポ...

DockerがMySQL構成実装プロセスを開始

目次実際の戦闘プロセスまずは主なコマンドと詳細を一つずつ説明しましょう起動が成功したかどうかを確認す...