ホームページ >php教程 >PHP开发 >MySQL はパフォーマンスに焦点を当て、関連する分析コマンドの詳細な説明を行っています。

MySQL はパフォーマンスに焦点を当て、関連する分析コマンドの詳細な説明を行っています。

高洛峰
高洛峰オリジナル
2016-11-19 09:32:491243ブラウズ

1. MySQL のパフォーマンス監視に焦点を当てる


QPS (1 秒あたりのクエリ): ここでの QPS は、実際には MySQL サーバーによって 1 秒あたりに実行されるクエリの総量を指します:
QPS = クエリ / 秒


TPS (TPS)トランザクション ボリューム): MySQL Server には直接トランザクション カウンターがありません。ロールバック カウンターとコミット カウンターを通じてのみシステム トランザクション ボリュームを計算できます。したがって、次の方法でクライアント アプリケーションによって要求された TPS 値を取得する必要があります:
TPS = (Com_commit + Com_rollback) / Seconds


キー バッファー ヒット率: キー バッファー ヒット率は、MyISAM タイプ テーブルのインデックスを表します。キャッシュヒット率。このヒット率の大きさは、MyISAM タイプのテーブルの読み取りおよび書き込みパフォーマンスに直接影響します。キー バッファのヒット率には、実際には読み取りヒット率と書き込みヒット率が含まれます。これら 2 つのヒット率の値は MySQL では直接指定されませんが、次のように計算できます:
key_buffer_read_hits = (1 - Key_reads / Key_read_requests) * 100 %
key_buffer_write_hits= (1 - Key_writes / Key_write_requests) * 100%

Innodb バッファー ヒット率: ここで、Innodb バッファーとは、Innodb タイプのテーブル スペースのデータとインデックスをキャッシュするために使用されるメモリである innodb_buffer_pool を指します。キー バッファーと同様に、MySQL サーバーによって提供される対応するステータス値に基づいてヒット率を計算することもできます:
innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100%


クエリ キャッシュ ヒット率: クエリ キャッシュを使用する場合の場合、クエリ キャッシュが正しく使用されているかどうかがわかる可能性があるため、クエリ キャッシュのヒット率を監視することも必要です。

クエリ キャッシュのヒット率は次のように計算されます:
Query_cache_hits= (Qcache_hits / (Qcache_hits + Qcache_inserts)) * 100%


テーブル キャッシュのステータス: テーブル キャッシュの現在のステータスは、システム パラメーター table_open_cache の設定が適切かどうかを判断するのに役立ちます。ステータス変数 Open_tables と Opened_tables の比率が低すぎる場合は、テーブル キャッシュ設定が小さすぎることを意味します:
SHOW STATUS LIKE 'Open%';
​​
スレッド キャッシュ ヒット率: スレッド キャッシュ ヒット率はシステムを直接反映します。パラメータ thread_cache_size 設定は適切ですか? thread_cache_size パラメータを適切に設定すると、新しい接続の作成に必要なリソースを大量に節約できます。
スレッド キャッシュ ヒット率は次のように計算されます:
Thread_cache_hits = (1 - Threads_created / Connections) * 100%

ロック ステータス: ロック ステータスにはテーブル ロックと行ロックが含まれます。システム ステータス変数を通じてロックの合計数を取得できます。 、lock 他スレッドを待たせた回数、ロック待ち時間情報。
SHOW STATUS LIKE '%lock%';
ロック関連のシステム変数を通じて、他の既存のスレッドが待機している回数を含むテーブル ロックの合計数を取得できます。同時に、行ロックの合計数、行ロックの合計時間、各行ロックの待機時間、行ロックによる最大待機時間、行ロックの数など、非常に詳細な行ロック情報も取得できます。現在行ロックを待機しているスレッドの数。これらの量を監視することで、システム全体のロックアップが深刻かどうかを明確に理解できます。 Table_locks_waited と Table_locks_immediate の比率が大きい場合は、テーブル ロックによるブロックが深刻であることを意味しており、Query ステートメントの調整、ストレージ エンジンの変更、またはビジネス ロジックの変更が必要になる可能性があります。調整した。もちろん、具体的な改善方法は実際のシナリオに基づいて判断する必要があります。 Innodb_row_lock_waits が大きい場合は、Innodb の行ロックも深刻であり、他のスレッドの通常の処理に影響を与えていることを意味します。原因も見つけて解決する必要があります。深刻な Innodb 行ロックの原因は、Query ステートメントで使用されるインデックスが十分に適切ではなく (Innodb 行ロックはインデックスに基づいてロックされる)、ギャップ ロックが大きすぎることである可能性があります。また、システム自体の処理能力が限られており、他の側面 (ハードウェア デバイスなど) を考慮する必要がある場合もあります。

レプリケーションの遅延: レプリケーションの遅延は、スレーブ データベースが不整合な状態にある時間の長さに直接影響します。
スレーブノードで「SHOW SLAVE STATUS」コマンドを実行し、Seconds_Behind_Master項目の値を取得して、スレーブの現在の遅延(単位:秒)を把握します。

Tmp テーブルのステータス: Tmp テーブルのステータスは主に、MySQL が一時テーブルを多量に使用するかどうか、および一時テーブルが大きすぎてメモリからディスク ファイルにスワップアウトする必要があるかどうかを監視するために使用されます。一時テーブルの使用状況情報は、次のメソッドで取得できます:
SHOW STATUS LIKE 'Created_tmp%';
+-------------------------+ -------+
| 値 |
+--------------------------+------+
| 作成された_tmp_disk_tables |
| 作成された_tmp_tables |
+-------------+------+
非常に大きい場合は、システム内のソート操作が多すぎるか、テーブルの接続方法があまり最適化されていない可能性があります。また、Created_tmp_tables に対する Created_tmp_disk_tables の比率が高すぎる (10% を超えるなど) 場合は、tmp_table_size システム パラメーターが十分に大きく設定されているかどうかを検討する必要があります。


Binlog Cache の使用状況: Binlog Cache は、まだディスクに書き込まれていない Binlog 情報を保存するために使用されます。
関連するステータス変数は次のとおりです:
SHOW STATUS LIKE 'Binlog_cache%';
​​Binlog_cache_disk_use の値が 0 ではないため、Binlog キャッシュのサイズが十分ではない可能性があり、binlog_cache_size システム パラメーターのサイズを増やすことができます。

Innodb_log_waits 量: Innodb_log_waits ステータス変数は、Innodb ログ バッファー内のスペース不足によって引き起こされる待機数を直接反映します。
SHOW STATUS LIKE 'Innodb_log_waits';
この変数値の発生頻度はシステムの書き込みパフォーマンスに直接影響するため、値が 1 秒あたり 1 回に達したら、システム パラメータ innodb_log_buffer_size の値を増やす必要があります。 , これはシステムによって共有されます。キャッシュが適切に増加していれば、メモリ不足の問題は発生しません。


2. 性能解析コマンドの詳細説明


SHOW STATUS;
FLUSH STATUS;

現在の接続数を表示 SHOW STATUS LIKE 'Thread_%';
Thread_cached: キャッシュされたスレッドの数
Thread_running: アクティブ化されたスレッドの数
Thread_connected: 現在接続されているスレッドの数
Thread_created: 作成されたスレッドの総数

スレッド キャッシュ ヒット数
Thread_connected = SHOW GLOBAL STATUS LIKE Thread_created;
Connections = SHOW GLOBAL STATUS LIKE 'Connections';
TCH=(1 - (Threads_created / Connections) ) * 100

View active接続内容
SHOW PROCESSLIST;

TCH数が90%未満の場合、接続の作成に時間がかかり、Thread_cached

QPS(1秒あたりのクエリ処理)の数を増やしますMyISAMエンジン

Questions = SHOW GLOBAL STATUS LIKE 'Questions';
Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
QPS=Questions/Uptime

TPS (1 秒あたりに送信されるトランザクション数)、つまり、1 秒あたりにサーバーによって処理されるトランザクションの数 (ある場合) InnoDB表示、InnoDBがないと表示されません。

Com_commit = 'Com_commit' のようなグローバル ステータスを表示;
Com_rollback = 'Com_rollback' のようなグローバル ステータスを表示;
Uptime = 'Uptime' のようなグローバル ステータスを表示;
TPS=(Com_commit + Com_rollback)/Uptime

QPS および TPS の値アーキテクチャを構築するときにテストのピークに近づいている場合は、神があなたとともにおられますように

読み取り/書き込み率
Qcache_hits = SHOW GLOBAL STATUS LIKE 'Qcache_hits';
Com_select = SHOW GLOBAL STATUS LIKE 'Com_select';
Com_insert = 'Com_insert' のようなグローバル ステータスを表示;
Com_update = 'Com_update' のようなグローバル ステータスを表示;
Com_delete = 'Com_delete' のようなグローバル ステータスを表示;
Com_replace = 'Com_replace' のようなグローバル ステータスを表示;
R /W=(Com_select + Qcache_hits) / (Com_insert + Com_update + Com_delete + Com_replace) * 100

読み取り/書き込み率。読み取りが多ければ読み取りが最適化され、書き込みが多ければ書き込みが最適化されます。

1 分あたりの遅いクエリ数
Slow_queries = SHOW GLOBAL STATUS LIKE 'Slow_queries';
Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
SQPM=Slow_queries / (Uptime/60)

Slow queries /Questions Ratio
Slow_queries = SHOW GLオーバルSTATUS LIKE 'Slow_queries';
Questions = SHOW GLOBAL STATUS LIKE 'Questions';
S/Q=Slow_queries/Questions

新しいバージョンがオンラインになるときは遅いクエリに注意してください

1分あたりのFull_join
Select_full_join = SHOW GLOBAL STATUS LIKE 'Select_full_join';
Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
FJPM=Select_full_join / (Uptime/60)

インデックスを使用しないことによる Full_join、インデックスを最適化

Innodb バッファ読み取りヒット数
Innodb_buffer_pool_reads = SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
Innodb_buffer_pool_read_requests = SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
IFRH=(1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100

InnoDB バッファ ヒット率ターゲット 95 %-99%;

テーブルキャッシュ
Open_tables= SHOW GLOBAL STATUS LIKE 'Open _tables';
Opened_tables= SHOW GLOBAL STATUS LIKE 'Opened_tables';
table_cache= SHOW GLOBAL STATUS LIKE 'table_cache';

table_cache は Open_tables より大きく、Opened_tables より小さい必要があります


一時テーブルディスク比率

Created_tmp_tables = 'Created_tmp_tables' のようなグローバル ステータスを表示します;
Created_tmp_disk_tables = 'Created_tmp_disk_tables' のようなグローバル ステータスを表示します;

TDR=(Created_tmp_disk_tables/Created_tmp_tables)*100


「Innodb_row_lock_%」のようなグローバル ステータスを表示';

Innodb_row_lock_current_waits

MySQL 5.0.3 で追加された行ロックの数。

Innodb_row_lock_time

MySQL 5.0.3 での行ロックの取得に費やされた合計時間 (ミリ秒単位)。ロック時間_最大値

MySQL 5.0.3 で追加された行ロックの最大時間 (ミリ秒)。

Innodb_row_lock_waits

MySQL 5.0.3 で追加された行ロックの待機回数。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。