InnoDB エンジンのパフォーマンスを最適化するための my.cnf パラメータ構成

InnoDB エンジンのパフォーマンスを最適化するための my.cnf パラメータ構成

私はインターネット上で数え切れないほどの my.cnf 構成を読みましたが、言及されている構成のほとんどは次のようなものでした。

1. innodb_buffer_pool_size
2. innodb_log_file_size
3. innodb_log_buffer_size
4. innodb_flush_log_at_trx_commit

次に、シングルスレッドとマルチスレッドの 2 つの例を記述して、構成パラメータを変更することでパフォーマンスが向上するかどうかをテストしました。結果は、innodb_flush_log_at_trx_commit のみがパフォーマンスを向上できることを示しています。パラメータ 1、2、3 については、いずれか 1 つをオンにしても、3 つすべてを同時に調整しても、テストのパフォーマンスには影響しません。考えてみると、テスト データの量が十分ではなかったことが原因かもしれません。条件が許せば、より多くのデータを使用してこれら 3 つのパラメーターをテストします。

innodb_flush_log_at_trx_commit の詳細な説明は次のとおりです。

innodb_flush_log_at_trx_commit が 0 に設定されている場合、ログ バッファーは 1 秒ごとにログ ファイルに書き込まれ、同時にログ ファイルのフラッシュ (ディスクへの書き込み) 操作が実行されます。このモードでは、トランザクションがコミットされても、ディスクへの書き込み操作はアクティブにトリガーされません。
innodb_flush_log_at_trx_commit が 1 に設定されている場合、MySQL はトランザクションがコミットされるたびにログ バッファー内のデータをログ ファイルに書き込み、ディスクにフラッシュします。
innodb_flush_log_at_trx_commit が 2 に設定されている場合、MySQL はトランザクションがコミットされるたびにログ バッファー データをログ ファイルに書き込みます。ただし、フラッシュ操作は同時には発生しません。このモードでは、MySQL は 1 秒ごとにフラッシュ操作を実行します。

結果

0 に設定すると、このモードは最も高速になりますが、安全性は低くなります。mysqld プロセスがクラッシュすると、最後の 1 秒間のすべてのトランザクション データが失われます。
1 に設定すると、このモードは最も安全ですが、最も遅くなります。 mysqld サービスまたはサーバー ホストがクラッシュした場合、バイナリ ログでは最大 1 つのステートメントまたは 1 つのトランザクションが失われる可能性があります。
2 に設定すると、このモードは 0 よりも高速かつ安全になります。最後の 1 秒間のすべてのトランザクション データは、オペレーティング システムがクラッシュした場合、またはシステムの電源が失われた場合にのみ失われる可能性があります。

: プロセスのスケジュールの問題により、この「1 秒に 1 回のフラッシュ操作」は「1 秒あたり」100% であることが保証されません。

結論: innodb_flush_log_at_trx_commit を 0 または 2 に設定した場合の速度は同様であり、どちらも 1 に設定した場合よりもはるかに高速です。

これは、InnoDB エンジンと MyISAM エンジンの違いを思い出させます。InnoDB の利点は、並行処理が MyISAM よりも高速であることです。スレッド プールの数は、CPU スレッドの数に応じて設定されています。その後、スレッド プールの数を CPU スレッドの数よりも大きく、大きく、さらに大きく設定しました。その結果、テスト プログラムのパフォーマンスが再び向上しました。酔っていました。スレッド プールに対する私の理解はあまりにも浅すぎたことが判明しました。最適なスレッドプールサイズ

以下もご興味があるかもしれません:
  • MySQL5.6.17データベースをインストールするときにMy.iniファイルを構成する方法
  • MySql 5.7.20 のインストールとデータおよび my.ini ファイルの構成
  • MySQL 5.6 & 5.7 の最適な構成ファイル テンプレート (my.ini)
  • MySQL サービスのパフォーマンス最適化 - my.cnf_my.ini 構成手順 (16G メモリ)
  • MySQL 最適化設定ファイル my.ini (discuz フォーラム)
  • MySQL 構成パラメータ my.ini/my.cnf の詳細な分析
  • MySQL my.ini 設定ファイルの詳細な説明
  • 権限の問題によりMySQLの設定ファイルmy.cnfを起動できない問題の解決方法
  • 現在使用されている設定ファイル my.cnf を表示する mysql メソッド (推奨)
  • MySQL my.cnf 設定を変更しても効果がない問題の解決策
  • MySQL 5.5.x my.cnf パラメータ設定の最適化の詳細
  • MySQL 設定ファイル my.cnf の最適化の詳細な説明 (mysql5.5)
  • MySQL パフォーマンス最適化の道 --- 設定ファイル my.cnf を変更する
  • MariaDB (MySQL ブランチ) my.cnf 構成ファイルの中国語注釈付きバージョン
  • MySQL 設定ファイル my.cnf パラメータの最適化と中国語の詳細な説明
  • MySQL 設定ファイル my.cnf の中国語での詳細な説明と、MySQL パフォーマンスの最適化方法の共有
  • MySQL 設定ファイル my.cnf の中国語版の比較
  • MySQL 設定ファイル my.cnf の例の最も詳細な翻訳
  • MySql 最適化のための my.ini 中国語構成スキームの詳細な説明: InnoDB、4GB メモリ、および複数のクエリ

<<:  WeChatアプレットがテキストスクロールを実装

>>:  Linuxカーネルのアクセス制御セキュリティを強化する方法

推薦する

JavaScript でプライベート メンバーを作成する

目次1. クロージャを使用する2. ES6クラスを使用する3. ES2020提案を使用する4. We...

2017 最新バージョンの Windows インストール MySQL チュートリアル

1. まず、MySQL の公式サイトから最新バージョンの MySQL をダウンロードします。リンクを...

CSS でのフィルタープロパティの使用に関する詳細な説明

フィルター属性は要素の視覚効果を定義しますぼかし画像にガウスぼかしを適用します。 「半径」の値は、ガ...

CSSポジショニングによる階層関係の問題の詳細な説明

絶対、相対、固定位置の位置決めabsolue: 絶対配置。上、下、左、右を使用して、配置先の親要素に...

HTML で複数のクラス属性を定義する場合の無効な解決策

HTML を記述する過程で、クラス属性に複数の値を定義することがよくありますが、定義した値が無効であ...

Ubuntuはカーネルモジュールをコンパイルし、その内容はシステムログに反映されます。

目次1.Linuxログインインターフェース2. コードを書く3. Makefileを書く4. コンパ...

仕事の効率を上げるJS略語スキル20選

目次複数の変数を同時に宣言する場合は、1 行に短縮できます。分割代入は複数の変数に同時に値を割り当て...

Centos7 での python3 のインストールとアンインストールに関するチュートリアル

1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...

JavaScript の 3 つの BOM オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

Vue3 コンポジション API の紹介

目次概要例なぜそれが必要なのでしょうか?設定参照、反応的計算して見るライフサイクルVue3.0 は ...

タグのターゲットリンクを iframe に向ける方法

コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...

ZabbixはSNMPに基づいてLinuxホストを監視します

序文: Linux ホストは、エージェント プログラムをインストールする場合でも、SNMP を使用す...

Reactスロットの使い方

目次必要コアアイデアReactでスロットを実装する2つの方法必要コンポーネントを自分で書きました。コ...

Vue で HTML 5 ドラッグ アンド ドロップ API を使用する方法

ドラッグ アンド ドロップ API は、ドラッグ可能な要素を HTML に追加し、ドラッグ可能な豊富...

kubernetes1.5.2 から kubernetes1.10 にアップグレードする際の主要な設定変更記録

この記事では、kubernetes1.5.2 から kubernetes1.10 にアップグレードす...