GaussDB for MySQL パフォーマンス最適化の詳細な説明

GaussDB for MySQL パフォーマンス最適化の詳細な説明

背景

まず、MySQL 8.0でのトランザクション送信の一般的なプロセスを見てみましょう。

上記のプロセスは、MySQL 8.0 の WAL 原則の実装です。このプロセスは、トランザクションの送信時に、書き込みバッファとディスクへのフラッシュのプロセスを完了する必要があることを意味します。

しかし、このプロセスには問題があります。各サーバーの CPU には制限があり、サーバーが処理できるスレッドの数にも制限があります。そのため、業務における同時トランザクションの数がサーバーが並行して処理できる数よりはるかに多い場合、後続のトランザクションは前のトランザクションが送信された後にしか処理できません。それまでは、彼らは何もできなかった。したがって、高同時実行シナリオでは、スレッドの使用率をさらに向上させる方法が、高同時実行トランザクションを作成するための鍵となります。

インスピレーションは人生から生まれる

最適化は、何もないところから想像できるものではなく、現実から生まれるものであることもよくあります。次に、取引送信プロセスに非常によく似た、身近な例である速達配送について見てみましょう。

今日の速達便では、一般的に1人の配達員が1つのエリアを担当します。速達便が普及し始めた頃は、荷物の量も少なかったため、基本的に1人の配達員が指定時間内に配達を完了することができました。

しかし、速達便の件数が増加すると、宅配業者は1つのコミュニティで配達してから次のコミュニティに到着するまでに長い時間を費やす必要があり、その結果、宅配業者が時間通りに配達できなくなることがよくあります。この問題に駆り立てられて、速達ステーションという新しい産業が生まれ始めました。

速達配送の最適化原則

次に、宅配ステーションが実際にどのような問題を解決するのかを見てみましょう。

速達の過程で、最も時間がかかるのは荷物の積み下ろしではなく、電話と待ち時間です。コミュニティへの配達にかかる時間は、最後の人が荷物を取りに来る時間によって決まります。最後の人が代金を受け取った後は、配達員は電話をかける以外何もできません (最後の人が荷物を取りに来る時間が不確かなため、隣のコミュニティの人々に通知する方法はありません)。そうなると、この待ち時間は宅配業者にとって無駄になります。

宅配ステーションはこの問題を大幅に解決できます。宅配便業者は到着後、宅配便を降ろして次のコミュニティに行くだけで済みます。残りの作業はステーションのスタッフが行うことができるため、宅配便業者の配達効率が大幅に向上します。

分析する

データベースに戻って、トランザクション スレッドを宅配便業者、ストレージ上のファイルを宅配便を受け取る人と考えると、この 2 つは非常によく似ていることがわかります。では、速達配送を最適化するのと同じように、トランザクション処理プロセスを最適化することはできるのでしょうか?答えはイエスです。

速達ステーションの最適化原則によれば、速達ステーションは顧客が商品を受け取るのを待つ時間を配達員に節約することが分かっています。では、取引処理プロセスには待機プロセスがありますか?答えは「はい」です。ストレージ IO の待機時間は長くなります。データベースの使用経験が豊富な開発者は、REDO ログがストレージに書き込まれるのを待つディスク IO パフォーマンスが、データベースの書き込みパフォーマンスを大きく左右することを知っています。最新のデータベース、特にコンピューティングとストレージを分離している GaussDB (MySQL 用) などのデータベースでは、ストレージ IO 時間がトランザクション処理時間全体の大部分を占めます。ログ バッファーのマージ書き込みにより、同時実行状況での全体的なスループットを向上させることができますが、IO の待機時間中にこれらのスレッドが他の処理 (待機中の他のトランザクションの処理など) を実行できる場合は、この限りではありません。その後、パフォーマンスがさらに向上します。

GaussDB の最適化 (MySQL 用)

待機ポイントが見つかったので、速達の最適化方法と同様に、データベースに「速達ステーション」を作成し、「速達ステーション」に待機を任せ、トランザクション スレッドが他の待機中のトランザクションを処理できるようにすることで、CPU が「アイドル」にならないようにします。

図 5 に示すように、GaussDB (for MySQL) は、REDO ログのディスクへのフラッシュ アクションが完了した後にトランザクションをコミットできます。ただし、この時点ではクライアントに応答せず、次のトランザクションを直接処理します。同時に、少数の「コミット後のワーカースレッド」を使用して、ログ書き込みの完了をバッチで待機し(待機プロセスは実際には CPU を占有しません)、クライアントに応答します。これにより、「待機」と「次のトランザクションの処理」が並列化され、CPU が「ビジー」な状態を維持できます。

実際のテスト

実際のテストによると、標準の sysbench 書き込みモデルでは、Post Commit を使用しない場合、最大パフォーマンスは約 350,000 QPS です。Post Commit を使用した後は、QPS が 420,000 以上に達し、書き込みパフォーマンスが 20% 向上します。

上記は、GaussDB for MySQL パフォーマンス最適化の詳細な説明です。GaussDB for MySQL パフォーマンス最適化の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLデータベースのタイムアウト設定を構成する方法の例
  • Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法
  • MySQL データベースのバックアップ設定 遅延バックアップ方式 (MySQL マスター スレーブ構成)
  • MySQLはパフォーマンスを最適化するためにインデックスを使用します
  • MySQLはステータスの表示と分析の説明を通じてデータベースのパフォーマンスを最適化します
  • MySQL データベースのパフォーマンス最適化の概要
  • mysql 構成接続パラメータ設定とパフォーマンスの最適化

<<:  HTML thead タグの定義と使用法の詳細な紹介

>>:  CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策

推薦する

Vue 大画面データ表示例

効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...

複数のネットワークカードを備えた Linux システムでのルーティング構成の詳細な説明

Linux でのルーティング設定コマンド1. ホストルーティングを追加する ルートを追加 -host...

JavaScript カスタム カレンダー効果

この記事では、JavaScriptカスタムカレンダーエフェクトの具体的なコードを参考までに紹介します...

クラウドサーバーを購入し、Alibaba Cloud に Pagoda Panel をインストールする手順

アリババクラウドがサーバーを購入クラウドサーバーを購入し、サーバーバージョンとしてcentos 7....

MySQL のタイムスタンプと日付時刻のタイムゾーンの問題によって生じる DTS の落とし穴の詳細な説明

目次MySQL で現在の時刻を表現するにはどうすればよいでしょうか?結論は確認するピットMySQL ...

Tomcat マルチレイヤーコンテナの設計に関する簡単な説明

目次コンテナ階層サーブレットの検索を要求するプロセス仕組みTomcat のコンテナは Servlet...

MYSQL トランザクション チュートリアル Yii2.0 マーチャント引き出し機能

序文私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉...

jQueryはシンプルなポップアップウィンドウ効果を実装します

この記事では、簡単なポップアップウィンドウ効果を実現するためのjQueryの具体的なコードを参考まで...

Linux環境でグラフデータベースneo4jを構築する方法の説明

Neo4j (Nosql の 1 つ) は、高性能なグラフ データベース (分散をサポートしていませ...

黒、白、グレーの控えめでエレガントなウェブデザインを鑑賞

クラシックな色の組み合わせの中でも、黒、白、グレーの時代を超えた魅力を否定できる人はおそらくいないで...

ApacheBench でマルチ URL をサポートする方法

標準の ab は単一の URI でのストレス テストのみをサポートしており、実際のニーズを満たしてい...

flex-grow、flex-shrink、flex-basis、9グリッドレイアウトを理解する

1. flex-grow、flex-shrink、flex-basis プロパティflex-grow...

CSS3 3Dクールキューブ変形アニメーションの実装

私はコーディングが大好きです。コーディングすると幸せになります!みなさんこんにちは、Counterで...

CSS を使用して複数の方法で等幅レイアウトを実装するサンプルコード

この記事で説明する等幅レイアウトでは、純粋な CSS を使用して、要素の幅を手動で設定することなく、...