背景 Alibaba Cloud RDS for MySQL(MySQL バージョン 5.7)データベースのビジネス テーブルの新しいデータの量は、毎月 1,000 万を超えています。データ量が増え続けるにつれて、当社のビジネスでは大きなテーブルに対するクエリが遅くなります。ビジネスのピーク時には、メインのビジネス テーブルに対する遅いクエリに数十秒かかり、ビジネスに深刻な影響を及ぼします。 プログラム概要 1. データベース設計とインデックスの最適化 MySQLデータベース自体は非常に柔軟性が高いため、開発者のテーブル設計とインデックスの最適化能力に大きく依存し、パフォーマンスが不十分になります。ここでは、最適化の提案をいくつか紹介します。
左端のインデックスマッチングルール 名前が示すように、左端が最初です。複合インデックスを作成するときは、ビジネス ニーズに応じて、where 句で最も頻繁に使用される列を左端に配置する必要があります。複合インデックスにとって非常に重要な問題は、列の順序をどのように配置するかということです。たとえば、c1 と c2 という 2 つのフィールドが where の後で使用される場合、インデックスの順序は (c1, c2) とすべきでしょうか、それとも (c2, c1) とすべきでしょうか。正しいアプローチは、重複値が少ない列を先頭に配置することです。たとえば、列内の値の 95% が重複していない場合、この列は通常先頭に配置できます。
2. データベースをPloarDBの読み書き分離に切り替える PolarDB は Alibaba Cloud が独自に開発した次世代リレーショナル クラウド データベースで、MySQL と 100% 互換性があり、最大 100 TB のストレージ容量を備えています。単一のデータベースを最大 16 ノードまで拡張できるため、企業におけるさまざまなデータベース アプリケーション シナリオに適しています。 PolarDB は、ストレージとコンピューティングを分離するアーキテクチャを採用しています。すべてのコンピューティング ノードはデータのコピーを共有し、分単位の構成のアップグレードとアップグレード、第 2 レベルの障害回復、グローバルなデータ一貫性、無料のデータ バックアップおよび災害復旧サービスを提供します。 クラスタアーキテクチャ、コンピューティングとストレージの分離 読み取りと書き込みの分離 アプリケーションがクラスター アドレスを使用する場合、PolarDB は内部プロキシ レイヤー (プロキシ) を介して外部サービスを提供します。アプリケーションの要求は、データベース ノードにアクセスする前に、まずプロキシを通過します。プロキシ層は、セキュリティ認証と保護を実行できるだけでなく、SQL を解析し、書き込み操作 (トランザクション、UPDATE、INSERT、DELETE、DDL など) をマスター ノードに送信し、読み取り操作 (SELECT など) を複数の読み取り専用ノードに均等に分散して、自動的な読み取りと書き込みの分離を実現します。アプリケーションの場合、単一ポイント データベースを使用するのと同じくらい簡単です。 オフラインハイブリッドシナリオでは、相互の影響を避けるために、異なるサービスが異なる接続アドレスと異なるデータノードを使用します。 Sysbench パフォーマンス ストレス テスト レポート: PloarDB 4コア 16G 2台 PloarDB 8コア 32G 2台 3. 履歴データをシャードテーブルからMySQL 8.0 X-Engineストレージエンジンに移行する ビジネス テーブルには 3 か月分のデータが保持され (これは企業のニーズに基づいています)、履歴データは履歴データベース X-Engine ストレージ エンジン テーブルに月次テーブルとして分割されます。X-Engine ストレージ エンジン テーブルを選択する理由は何ですか? その利点は何ですか? コスト削減: X-EngineのストレージコストはInnoDBの約半分です。 X-Engine 階層型ストレージは QPS を向上させます。階層型ストレージ構造を使用してホット データとコールド データを異なるレイヤーに保存し、コールド データが配置されているレイヤーをデフォルトで圧縮します。 X-Engine は、Alibaba Cloud のデータベース製品部門によって開発されたオンライン トランザクション処理 (OLTP) データベース ストレージ エンジンです。
4. Alibaba Cloud PloarDB MySQL 8.0バージョンの並列クエリ テーブルを分割した後もデータ量は依然として大きく、遅いクエリの問題は完全には解決されず、ビジネステーブルのサイズが縮小されるだけです。遅いクエリのこの部分では、PolarDBの並列クエリ最適化を使用する必要があります。 PolarDB MySQL 8.0 では、並列クエリ フレームワークがリリースされました。クエリするデータの量が一定のしきい値に達すると、並列クエリ フレームワークが自動的に開始され、クエリ時間が飛躍的に短縮されます。データはストレージ レイヤーで異なるスレッドに分割され、複数のスレッドが並列で計算します。結果パイプラインはメイン スレッドに集約され、最終的にメイン スレッドが簡単なマージを行ってユーザーに返すため、クエリの効率が向上します。 並列クエリは、大規模なテーブル クエリ、複数のテーブルを結合するクエリ、大規模な計算ワークロードを伴うクエリなど、ほとんどの SELECT ステートメントに適用できます。非常に短いクエリの場合、効果はそれほど劇的ではありません。 並列クエリの使用: ヒント構文を使用して、単一のステートメントを制御できます。たとえば、システムで並列クエリがデフォルトでオフになっているが、高頻度で実行される低速の SQL クエリを高速化する必要がある場合、ヒントを使用して特定の SQL を高速化できます。 SELECT /+PARALLEL(x)/ … FROM …; – x > 0 SELECT /*+ SET_VAR(max_parallel_degree=n) */ * FROM … // n > 0 クエリテスト: データベース構成 16 コア 32G 単一テーブルデータ量が 3000 万を超える 並列クエリ前の時間は 4326 ミリ秒でしたが、並列クエリを追加した後は 525 ミリ秒になり、パフォーマンスが 8.24 倍向上しました。 5. Hologreのインタラクティブ分析 並列クエリ最適化を使用することで、大規模テーブルに対する低速クエリの効率は向上しましたが、リアルタイム レポートやリアルタイムの大画面などの特定の要件はまだ達成できず、処理にはビッグ データに頼るしかありません。 6. 追記 数千万のデータを持つ大規模なテーブルの最適化は、ビジネス シナリオに基づいており、コストを犠牲にして最適化されています。データベースをすぐに水平に分割して拡張することではありません。これは、運用と保守、ビジネスに大きな課題をもたらし、多くの場合、効果は良くない可能性があります。データベース設計、インデックスの最適化、テーブル パーティション分割戦略が整っているかどうかに関係なく、ビジネス ニーズに応じて適切なテクノロジを選択して実装する必要があります。 これで、MySQL の大規模テーブル最適化ソリューションに関するこの記事は終了です。MySQL の大規模テーブル最適化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vue2.x における双方向バインディングの原理と実装
>>: LambdaProbe を使用して Tomcat を監視する方法
1. インストールヒント: 現在、VUE3.0 の公式翻訳ドキュメントはありません。しかし、すでに誰...
クラウドサーバーを使用するとデータベースに接続できる場合もありますが、Navicat Premium...
LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...
この記事では、Linux のユーザーとグループの管理によく使用されるコマンドをまとめます。ご参考まで...
HTMLカラーブロックを使用してデータを動的に表示する <スタイル タイプ="te...
1. システム環境[root@localhost ホーム]# cat /etc/redhat-re...
1. Canvas画像をCSS背景画像として使用するCSS ペイント API は、Canvas キャ...
目次継承とプロトタイプチェーン継承されたプロパティ継承されたメソッドJavaScript でのプロト...
関連記事:初心者が学ぶ HTML タグ (1)初心者は、いくつかの HTML タグを理解することで ...
この記事は主に、MySQL インデックスの長さ制限の原理の分析を紹介します。サンプル コードを通じて...
この記事では、タイムライン機能を実装するためのVue.jsの具体的なコードを参考までに共有します。具...
目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...
目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...
目次1. 直接譲渡2. 浅いコピー3. ディープコピー1. JSONオブジェクトメソッド2. 再帰コ...
この記事では、参考までに、簡単なログイン機能を実装するためのvue+tp5の具体的なコードを紹介しま...