MySQL サーバー IO 100% 分析および最適化ソリューション

MySQL サーバー IO 100% 分析および最適化ソリューション

序文

ストレス テスト中に、リソース使用のボトルネックによって発生する最も直接的なパフォーマンスの問題が、ビジネス トランザクションの応答時間が長すぎることや、TPS が徐々に低下することなどである場合。問題箇所の分析では、通常、TOP や nmon を使用して CPU やメモリの使用状況を確認するなど、サーバーのリソース使用率を監視することが最優先事項であり、その後、ネットワーク IO やディスク IO の問題などの IO の問題をトラブルシューティングします。 ディスク IO の問題の場合、一般的な問題は、SQL 構文の問題、MYSQL パラメータ構成の問題、または IOPS スループット レートの問題につながるサーバー自体のハードウェア ボトルネックです。

この記事では主にMySQLサーバIO 100%の分析と最適化計画を紹介します。詳しい紹介を見てみましょう。

【質問】

書き込みが主となるMySQL 5.6.21データベースインスタンスがあり、IO %utilは100%に近い。

高い書き込みIOPS

【分析プロセス】

1. iotopツールを使用すると、現在のIO消費量が最も高いmysqlスレッドを確認できます。

2. スレッド 49342 のスタックを確認すると、ファイル 9 に対応する REDO ログが更新されていることがわかります。

3. ファイル番号9はREDOログの最初のファイルに対応します。

MySQL プロセスが REDO ログ ファイルを頻繁に更新するのはなぜでしょうか? REDO ログ フラッシュ戦略と組み合わせて分析する必要があります。鍵となるのは innodb_flush_log_at_trx_commit パラメータです。

デフォルト値は 1 で、これが最も安全です。ただし、書き込み負荷が高い場合はパフォーマンスに重大な影響を与える可能性があります。トランザクションがコミットされるたびに、MySQL はログ バッファー内のデータをログ ファイルに書き込み、ディスクにフラッシュします。

このクラスターの書き込みシナリオを考慮すると、書き込みのほとんどは小さなトランザクションであり、各トランザクションのコミットによってディスク フラッシュがトリガーされます。このシナリオでは、innodb_log_buffer_size と innodb_log_file_size を増やすことによる最適化の効果は明ら​​かではありません。

【最適化計画】

1. アプリケーション レベルでは、書き込み負荷が大きいシステムの場合、単一の挿入ステートメントを小さなバッチの挿入ステートメントに最適化できます。これにより、トランザクションのコミット数と REDO ログのフラッシュ数が減り、理論的にはパフォーマンスが向上します。

2. MySQL レベルでは、ログ タイプのシステムの場合、ダウンタイム時に少量のデータ損失が許容される場合は、innodb_flush_log_at_trx_commit パラメータを 2 に調整できます。

2 に設定すると、トランザクションがコミットされたときに書き込み操作のみが実行され、システム ページ キャッシュのみが書き込まれることが保証されます。したがって、インスタンスがクラッシュしてもトランザクションは失われませんが、システムがクラッシュするとトランザクションが失われる可能性があります。

このサーバーでのテストでは、パラメータを 2 に調整すると、IO 要求が 200M/S から 10M/S 程度に低下し、圧力が 10 倍以上軽減されます。

3. システムレベルでは、よりパフォーマンスの高いディスクに交換する

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。
  • Xiaomi が SQL インテリジェント最適化および書き換えツール SOAR を正式にオープンソース化
  • MySQL の order by ステートメントの最適化方法の詳細な説明
  • MYSQL設定パラメータの最適化の詳細な説明
  • MySQL の集計関数 count の使用法とパフォーマンスの最適化テクニック
  • MySQL は SQL ステートメントの最新のレコードをクエリします (最適化)
  • MySQL数千万の大規模データに対する30のSQLクエリ最適化テクニックの詳細な説明
  • PHP+MySQL で一定期間内に毎日のデータ統計の最適化操作例を実現
  • SQL 文の最適化: JOIN、LEFT JOIN、RIGHT JOIN 文の最適化
  • データベースSQL文の最適化

<<:  Vue はタブ ラベルを実装します (ラベルが自動スクロールを超える)

>>:  docker で Apollo をデプロイする詳細なチュートリアル

推薦する

DCL を使用して MySQL でユーザーを管理し、権限を制御する方法

DCL (データ制御言語): データベースのアクセス権とセキュリティ レベルを定義し、ユーザーを作成...

MySQLでルートユーザーのパスワードを変更する方法

方法1: SET PASSWORDコマンドを使用する mysql> username@loca...

MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明

概要今日は主に、MySQL データベースから binlog ログを正しく削除する方法を紹介します。ロ...

MySQL でのテーブルの作成と削除の詳細な例

テーブル作成コマンドには以下が必要です。 テーブルの名前フィールド名各フィールドを定義します(タイ...

Alibaba Cloud Ubuntu 16.04 が IPSec サービスを構築

IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...

HTML 5 スタイルシートのリセット

この CSS リセットは、Eric Meyers の CSS リセットに基づいて変更されており、特に...

Docker で MySQL をインストールし、リモート接続を実装するチュートリアル

画像をプルする docker プル mysql完成した画像を見る Docker イメージイメージを介...

nginx httpモジュールのデータ保存構造の概要

このセクションから、http モジュールの実装原理について説明します。http モジュールで非常に重...

MySQLクエリトランザクション処理へのノード接続の実装

目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...

JS配列の一般的な方法とテクニックを学び、マスターになりましょう

目次splice() メソッドjoin() メソッド逆() メソッドevery() メソッド削減()...

MySQL 5.7.18 リリース インストール ガイド (bin ファイル バージョンを含む)

インストール プロセスは、コンパイル手順を除いて、基本的にソース バージョンと同じです。この記事では...

JSフロントエンドモジュール化のいくつかの仕様についての簡単な説明

目次序文フロントエンドモジュール開発の価値厄介な名前の競合面倒なファイル依存関係モジュール化の利点C...

Linux sftp コマンドの使用法の概要

sftp は、安全なファイル転送プロトコルである Secure File Transfer Prot...

MySQL Routerのインストールと展開

目次01 MySQLルーターの紹介MySQL Router とは何ですか? 02 MySQLルータの...

MySQL DDL による同期遅延を解決する方法

目次序文解決ツールの紹介仕組み使用制限使用上の注意使用例いくつかのパラメータの説明出力例Tencen...