検索
ホームページデータベースmysql チュートリアルMySQL の大規模テーブル最適化ソリューションの紹介

MySQL の大規模テーブル最適化ソリューションの紹介

無料学習の推奨事項: mysql データベース(ビデオ)

背景

Alibaba Cloud RDS FOR MySQL (MySQL バージョン 5.7) データベース ビジネス テーブルには、毎月 1,000 万を超える新しいデータが追加されます。データ量が増加し続けると、大きなテーブルに対するクエリが遅くなり、ビジネスのピーク時に、メインのビジネス テーブルに対するクエリに数十秒かかることがあり、ビジネスに深刻な影響を及ぼします

プログラムの概要

MySQL の大規模テーブル最適化ソリューションの紹介

1. データベース設計とインデックスの最適化

MySQL データベース自体は非常に柔軟性が高いため、パフォーマンスが不十分になり、開発者のテーブル設計機能とインデックス作成の最適化機能に大きく依存します。最適化の提案をいくつか示します。

  • 時刻型をタイムスタンプ形式に変換し、int 型で保存し、インデックスを構築してクエリ効率を向上させます
  • フィールド定義は null ではないことをお勧めします。null 値はクエリや最適化が難しく、追加のインデックス スペースを占有します。
  • 列挙型 ENUM
  • の代わりに TINYINT 型を使用してください。正確な浮動小数点数を格納します。FLOAT および DOUBLE の代わりに DECIMAL を使用する必要があります。
  • フィールドの長さは重要です。ビジネス ニーズに応じて、あまり大きく設定しないでください。
  • TEXT 型は使用しないでください。どうしても使用しなければならない場合は、使用頻度の低い大きなフィールドを他のテーブルに分割することをお勧めします
  • MySQL にはインデックス フィールドの長さに制限があります。はい、innodb エンジンの各インデックス列の長さは制限されていますデフォルトでは最大 767 バイトであり、すべてのインデックス列の長さの合計は 3072 バイトを超えることはできません (mysql8.0 の単一インデックスでは 1024 文字を作成できます)
  • 大テーブルに DDL 要件がある場合は、 DBA

左端インデックス一致ルール

名前が示すように、左端の優先順位を意味します。結合インデックスを作成するときは、ビジネス ニーズに応じて where 句で使用する必要があります。最も頻繁に使用される列は左端に配置されます。複合インデックスで非常に重要な問題は、列の順序をどのように配置するかです。たとえば、2 つのフィールド c1 と c2 が where の後に使用されている場合、インデックスの順序は (c1, c2) または (c2, c1) になります。正しいアプローチは繰り返すことです。値が小さいほど、上に配置されます。たとえば、列内の値の 95% が繰り返されない場合、この列は通常、先頭に配置できます。

  • 複合インデックスindex(a,b,c)
  • ここで、a=3はaのみを使用します
  • #ここで、a=3とb=5はa,bを使用します
  • where a=3 and b=5 and c=4 uses a, b,c
  • where b=3 or where c=4 インデックスは使用されません
  • where a=3 and c= 4 a=3 および b> 10 および c=7 のみ a
  • は a,b
  • を使用します。a=3 および b は「xx%」のように、c=7 は a,b
  • を使用します。
  • これは、実際には複数のインデックスを作成するのと同じです: key (a)、key(a,b)、key(a,b,c)

2. データベースを次のように切り替えます。 PloarDB 読み取りと書き込みの分離

PolarDB Alibaba Cloud が自社開発した次世代リレーショナル クラウド データベースであり、MySQL と 100% 互換性があり、ストレージ容量は最大 100 TB に達します。単一データベースを最大16ノードまで拡張可能で、企業の多様なデータベース適用シーンに最適です。 PolarDB は、ストレージとコンピューティングを分離するアーキテクチャを採用しており、すべてのコンピューティング ノードがデータのコピーを共有し、分単位の構成アップグレードとダウングレード、第 2 レベルの障害回復、グローバル データの一貫性、および無料のデータ バックアップと災害復旧サービスを提供します。

    クラスター アーキテクチャ、コンピューティングとストレージの分離
  • PolarDB はマルチノード クラスター アーキテクチャを採用しており、Writer ノード (マスター ノード) と複数の Reader ノード (読み取り専用ノード) が存在します。各ノード 分散ファイル システム (PolarFileSystem) を介して基盤となるストレージ (PolarStore) を共有
  • 読み取り/書き込み分離
  • アプリケーションがクラスター アドレスを使用する場合、PolarDB は内部プロキシ レイヤー (プロキシ)、およびアプリケーション すべてのリクエストは最初にプロキシを通過し、次にデータベース ノードにアクセスします。プロキシ層は、セキュリティ認証と保護を実行するだけでなく、SQL を解析し、書き込み操作 (トランザクション、UPDATE、INSERT、DELETE、DDL など) をマスター ノードに送信し、読み取り操作 (SELECT など) を均等に分散することもできます。 ) を複数のノードに送信し、読み取りノードは読み取りと書き込みの自動分離を実現します。アプリケーションの場合、単一ポイントのデータベースを使用するのと同じくらい簡単です。
オフライン混合シナリオ: 異なるサービスは異なる接続アドレスを使用し、相互影響を避けるために異なるデータ ノードを使用します

MySQL の大規模テーブル最適化ソリューションの紹介

Sysbench パフォーマンス ストレス テスト レポート:

#PloarDB 4 コア 16G 2 ユニット

MySQL の大規模テーブル最適化ソリューションの紹介
MySQL の大規模テーブル最適化ソリューションの紹介#PloarDB 8 コア 32G 2 ユニット

MySQL の大規模テーブル最適化ソリューションの紹介
##3. サブテーブルの履歴データを MySQL8.0 X-Engine ストレージ エンジンに移行しますMySQL の大規模テーブル最適化ソリューションの紹介

分割ビジネス テーブルは 3 か月のデータを保持します (これは会社のニーズに基づいています)。履歴データは月ごとに履歴データベースの X-Engine ストレージ エンジン テーブルに分割されます。X-Engine ストレージ エンジン テーブルを選択する理由? その利点は何ですか? ?

  1. X-Engine のストレージ コストは InnoDB の約半分であり、コストを節約できます。
  2. X-Engine 階層型ストレージは QPS を向上させ、階層型ストレージを採用します。構造を構築し、ホット データとコールド データを結合します。これらのデータはさまざまなレベルに保存され、コールド データが配置されているレベルはデフォルトで圧縮されます。

X-Engine はオンライン トランザクション処理 (OLTP) セルフです。 -Alibaba Cloud データベース製品部門によって開発された、処理) データベース ストレージ エンジン。
X-Engine ストレージ エンジンは、(MySQL Pluginable Storage Engine 機能のおかげで) MySQL とシームレスに互換性があるだけでなく、階層化されたストレージ アーキテクチャも使用します。目標は、大規模な膨大なデータを保存し、高度な同時トランザクション処理機能を提供し、ストレージ コストを削減することであるため、ほとんどの大規模データ ボリューム シナリオでは、データにアクセスされる機会は不均等であり、実際には頻繁にアクセスされるホット データが原因となります。ごくまれに、X-Engine はデータアクセスの頻度に応じてデータを複数のレベルに分割し、各レベルのデータのアクセス特性に応じて、対応するストレージ構造を設計し、適切なストレージデバイス

## に書き込みます。
    #X-Engine は、階層ストレージのアーキテクチャ基盤として LSM-Tree を使用し、再設計されました:
  • ホット データ レイヤーとデータ更新は、インメモリ データベース テクノロジ (ロックフリー) を通じてメモリ ストレージを使用します。インデックス構造/追加のみ) により、トランザクション処理のパフォーマンスが向上します。
  • パイプライン トランザクション処理メカニズムは、トランザクション処理の複数の段階を並行して実行し、スループットを大幅に向上させます。
  • アクセス頻度の低いデータは段階的に削除または永続ストレージ層に統合され、多層ストレージデバイス(NVM/SSD/HDD)と組み合わせて保存されます。
  • パフォーマンスに大きな影響を与える圧縮プロセスに対して多くの最適化が行われました。
  • データ ストレージの粒度を分割し、比較的集中したデータ更新ホットスポットの特性を利用し、データを再利用します。マージプロセスでは可能な限り。
  • LSM の形状を細かく制御し、I/O および計算コストを削減し、マージ プロセス中のスペースの増加を効果的に軽減します。
  • また、よりきめ細かいアクセス制御とキャッシュ メカニズムを使用して、読み取りパフォーマンスを最適化します。

MySQL の大規模テーブル最適化ソリューションの紹介

4. Alibaba Cloud PloarDB MySQL8.0 バージョンの並列クエリ

テーブルを分割した後のデータ量は、まだ非常に大きい 大規模ですが、クエリが遅いという問題は完全には解決されませんが、ビジネス テーブルのサイズが縮小するだけです。これらの遅いクエリについては、PolarDB の並列クエリ最適化を使用する必要があります。

PolarDB MySQL 8.0 は、並列クエリ フレームワークでは、クエリ データの量が特定のしきい値に達すると、並列クエリ フレームワークが自動的に開始され、クエリ時間が大幅に短縮されます。

データをストレージ層で異なるスレッドに分割すると、複数のスレッドが並列計算を実行します。パイプラインの結果はメイン スレッドに要約され、最後にメイン スレッドは単純なマージを実行してユーザーに返し、クエリの効率を向上させます。
Parallel Query はマルチコア CPU の並列処理能力を利用しており、8 コア 32 GB 構成を例にとると、概略図は次のようになります。

MySQL の大規模テーブル最適化ソリューションの紹介

並列クエリは、大規模なテーブル クエリ、複数テーブルの結合クエリ、計算負荷の大きいクエリなど、ほとんどの SELECT ステートメントに適しています。非常に短いクエリの場合、効果はあまり目立ちません。

並列クエリの使用では、ヒント構文を使用して単一のステートメントを制御できます。たとえば、システムがデフォルトで並列クエリをオフにしているが、高頻度で遅い SQL クエリを高速化する必要がある場合、次のことができます。特定の SQL へのヒントの使用が高速化されます。

SELECT /

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) MySQL の大規模テーブル最適化ソリューションの紹介

MySQL の大規模テーブル最適化ソリューションの紹介

# #6追記

数千万の大きなテーブルの最適化はビジネスシナリオに基づいており、コストがかかります。最初からデータベースを水平分割して拡張することはできません。運用、保守、およびビジネスに対する問題が発生します。大きな課題です。多くの場合、結果は良くないかもしれません。データベース設計、インデックスの最適化、テーブルのパーティショニング戦略が整っているかどうかにかかわらず、それらを実装するための適切なテクノロジを、次の基準に基づいて選択する必要があります。ビジネスニーズ。

その他の関連する無料学習の推奨事項: mysql チュートリアル(ビデオ)

以上がMySQL の大規模テーブル最適化ソリューションの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
InnoDBバッファープールとそのパフォーマンスの重要性を説明してください。InnoDBバッファープールとそのパフォーマンスの重要性を説明してください。Apr 19, 2025 am 12:24 AM

Innodbbufferpoolは、データをキャッシュしてページをインデックス作成することにより、ディスクI/Oを削減し、データベースのパフォーマンスを改善します。その作業原則には次のものが含まれます。1。データ読み取り:Bufferpoolのデータを読む。 2。データの書き込み:データを変更した後、bufferpoolに書き込み、定期的にディスクに更新します。 3.キャッシュ管理:LRUアルゴリズムを使用して、キャッシュページを管理します。 4.読みメカニズム:隣接するデータページを事前にロードします。 BufferPoolのサイジングと複数のインスタンスを使用することにより、データベースのパフォーマンスを最適化できます。

MySQL対その他のプログラミング言語:比較MySQL対その他のプログラミング言語:比較Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

MySQLの学習:新しいユーザー向けの段階的なガイドMySQLの学習:新しいユーザー向けの段階的なガイドApr 19, 2025 am 12:19 AM

MySQLは、データストレージ、管理、分析に適した強力なオープンソースデータベース管理システムであるため、学習する価値があります。 1)MySQLは、SQLを使用してデータを操作するリレーショナルデータベースであり、構造化されたデータ管理に適しています。 2)SQL言語はMySQLと対話するための鍵であり、CRUD操作をサポートします。 3)MySQLの作業原則には、クライアント/サーバーアーキテクチャ、ストレージエンジン、クエリオプティマイザーが含まれます。 4)基本的な使用には、データベースとテーブルの作成が含まれ、高度な使用にはJoinを使用してテーブルの参加が含まれます。 5)一般的なエラーには、構文エラーと許可の問題が含まれ、デバッグスキルには、構文のチェックと説明コマンドの使用が含まれます。 6)パフォーマンスの最適化には、インデックスの使用、SQLステートメントの最適化、およびデータベースの定期的なメンテナンスが含まれます。

MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境