ホームページ >データベース >mysql チュートリアル >MySQL の大規模テーブル最適化ソリューションの紹介
無料学習の推奨事項: mysql データベース(ビデオ)
背景
Alibaba Cloud RDS FOR MySQL (MySQL バージョン 5.7) データベース ビジネス テーブルには、毎月 1,000 万を超える新しいデータが追加されます。データ量が増加し続けると、大きなテーブルに対するクエリが遅くなり、ビジネスのピーク時に、メインのビジネス テーブルに対するクエリに数十秒かかることがあり、ビジネスに深刻な影響を及ぼします
プログラムの概要
1. データベース設計とインデックスの最適化
MySQL データベース自体は非常に柔軟性が高いため、パフォーマンスが不十分になり、開発者のテーブル設計機能とインデックス作成の最適化機能に大きく依存します。最適化の提案をいくつか示します。
名前が示すように、左端の優先順位を意味します。結合インデックスを作成するときは、ビジネス ニーズに応じて where 句で使用する必要があります。最も頻繁に使用される列は左端に配置されます。複合インデックスで非常に重要な問題は、列の順序をどのように配置するかです。たとえば、2 つのフィールド c1 と c2 が where の後に使用されている場合、インデックスの順序は (c1, c2) または (c2, c1) になります。正しいアプローチは繰り返すことです。値が小さいほど、上に配置されます。たとえば、列内の値の 95% が繰り返されない場合、この列は通常、先頭に配置できます。
2. データベースを次のように切り替えます。 PloarDB 読み取りと書き込みの分離
PolarDB Alibaba Cloud が自社開発した次世代リレーショナル クラウド データベースであり、MySQL と 100% 互換性があり、ストレージ容量は最大 100 TB に達します。単一データベースを最大16ノードまで拡張可能で、企業の多様なデータベース適用シーンに最適です。 PolarDB は、ストレージとコンピューティングを分離するアーキテクチャを採用しており、すべてのコンピューティング ノードがデータのコピーを共有し、分単位の構成アップグレードとダウングレード、第 2 レベルの障害回復、グローバル データの一貫性、および無料のデータ バックアップと災害復旧サービスを提供します。
#PloarDB 8 コア 32G 2 ユニット
##3. サブテーブルの履歴データを MySQL8.0 X-Engine ストレージ エンジンに移行します
分割ビジネス テーブルは 3 か月のデータを保持します (これは会社のニーズに基づいています)。履歴データは月ごとに履歴データベースの X-Engine ストレージ エンジン テーブルに分割されます。X-Engine ストレージ エンジン テーブルを選択する理由? その利点は何ですか? ?
X-Engine はオンライン トランザクション処理 (OLTP) セルフです。 -Alibaba Cloud データベース製品部門によって開発された、処理) データベース ストレージ エンジン。
X-Engine ストレージ エンジンは、(MySQL Pluginable Storage Engine 機能のおかげで) MySQL とシームレスに互換性があるだけでなく、階層化されたストレージ アーキテクチャも使用します。目標は、大規模な膨大なデータを保存し、高度な同時トランザクション処理機能を提供し、ストレージ コストを削減することであるため、ほとんどの大規模データ ボリューム シナリオでは、データにアクセスされる機会は不均等であり、実際には頻繁にアクセスされるホット データが原因となります。ごくまれに、X-Engine はデータアクセスの頻度に応じてデータを複数のレベルに分割し、各レベルのデータのアクセス特性に応じて、対応するストレージ構造を設計し、適切なストレージデバイス
4. Alibaba Cloud PloarDB MySQL8.0 バージョンの並列クエリ
テーブルを分割した後のデータ量は、まだ非常に大きい 大規模ですが、クエリが遅いという問題は完全には解決されませんが、ビジネス テーブルのサイズが縮小するだけです。これらの遅いクエリについては、PolarDB の並列クエリ最適化を使用する必要があります。PolarDB MySQL 8.0 は、並列クエリ フレームワークでは、クエリ データの量が特定のしきい値に達すると、並列クエリ フレームワークが自動的に開始され、クエリ時間が大幅に短縮されます。 データをストレージ層で異なるスレッドに分割すると、複数のスレッドが並列計算を実行します。パイプラインの結果はメイン スレッドに要約され、最後にメイン スレッドは単純なマージを実行してユーザーに返し、クエリの効率を向上させます。
Parallel Query はマルチコア CPU の並列処理能力を利用しており、8 コア 32 GB 構成を例にとると、概略図は次のようになります。
PARALLEL(x)/ … FROM …; – x >0
SELECT /* SET_VAR(max_Parallel_degree=n) */ * FROM … // n > 0クエリ テスト: データベースは 16 コア、32G で構成されており、単一テーブルのデータ量は 3000 万を超えています並列クエリが追加されるまで 4326 ミリ秒かかりました。追加後は 525ms となり、パフォーマンスは 8.24 倍向上しました。##大規模なテーブルでの遅いクエリには並列処理を使用していますが、クエリの最適化により効率は向上しましたが、リアルタイム レポートやリアルタイムの大画面に対する特定の要件の一部はまだ達成できず、処理にはビッグ データのみに依存する必要があります。 。
ここでは、Alibaba Cloud の対話型分析 Hologre をお勧めします (https://help.aliyun.com/product/113622.html)
# #6追記数千万の大きなテーブルの最適化はビジネスシナリオに基づいており、コストがかかります。最初からデータベースを水平分割して拡張することはできません。運用、保守、およびビジネスに対する問題が発生します。大きな課題です。多くの場合、結果は良くないかもしれません。データベース設計、インデックスの最適化、テーブルのパーティショニング戦略が整っているかどうかにかかわらず、それらを実装するための適切なテクノロジを、次の基準に基づいて選択する必要があります。ビジネスニーズ。
その他の関連する無料学習の推奨事項: mysql チュートリアル(ビデオ)
以上がMySQL の大規模テーブル最適化ソリューションの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。