MySQL の遅いクエリの例

MySQL の遅いクエリの例

導入

スロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメントを記録できます。パフォーマンスのボトルネックを特定して分析することで、データベース システムのパフォーマンスをより最適化できます。

1. スロークエリを設定する

1. パラメータの説明

  • slow_query_log : スロークエリの有効化ステータス (デフォルトではオフ)
  • slow_query_log_file: スロークエリログが保存される場所 (このディレクトリには、MySQL 実行アカウントの書き込み権限が必要で、通常は MySQL データストレージディレクトリに設定されます)
  • long_query_time: クエリを記録するのに何秒かかるか(デフォルトでは 10 秒)

2. 遅いクエリ関連のパラメータを表示する

「slow_query%」のような変数を表示します。
+---------------------------+----------------------------------+
| 変数名 | 値 |
+---------------------------+----------------------------------+
| slow_query_log | オフ |
| slow_query_log_file | /mysql/data/localhost-slow.log |
+---------------------------+----------------------------------+

'long_query_time' のような変数を表示します。
+-----------------+-----------+
| 変数名 | 値 |
+-----------------+-----------+
| 長いクエリ時間 | 10.000000 |
+-----------------+-----------+

3. スロークエリを構成する

設定方法は2つあり、1つはグローバル変数設定、もう1つは設定ファイル設定です。

(1)グローバル変数の設定

-- slow_query_log グローバル変数を "ON" 状態に設定します。set global slow_query_log='ON'; 

-- スロークエリログが保存される場所を設定します。set global slow_query_log_file='/usr/local/mysql/data/slow.log';

-- クエリが 1 秒を超えた場合に記録します。set global long_query_time=1;

(2)設定ファイルmy.cnfを変更する(Linux環境の場合)

  slow_query_log = オン
  slow_query_log_file = /usr/local/mysql/data/slow.log
  長いクエリ時間 = 1

要約:
(1) グローバル変数で設定した後、有効にするにはセッションを閉じてクエリを再度開く必要があります。設定ファイルでは、Mysql サーバーを再起動して有効にする必要があります。 (2) スロークエリを有効にするとパフォーマンスに影響するため、通常はグローバル変数で設定することをお勧めします。このように、サーバーを再起動すると、デフォルトでスロークエリ状態がオフになります。

2. mysqldumpslow ツール

mysqldumpslow は MySQL に付属するツールです。これを使用すると、上記のログ ファイルで探す必要がなくなります。データが通常のものであれば、ログを確認するのも面倒な作業です。

1. メインコマンド

--s: ソート方法を示します--c: 訪問回数--l: ロック時間--r: 返されたレコード--t: クエリ時間--al: 平均ロック時間--ar: 返されたレコードの平均数--at: 平均クエリ時間--t: 先頭に返されるレコードの数--g: 大文字と小文字を区別しない通常の一致パターンが続きます

2. 例

--1. 最も多くのレコードを返す 10 個の SQL 文を取得します。
  mysqldumpslow -s -r -t 10 /logs/mysql-slow.log

 --2. 訪問回数が最も多い上位10件のSQLを取得する
  mysqldumpslow -s -c -t 10 /logs/mysql-slow.log

 --3. 時間順に並べられたリンクを含む最初の 10 個のクエリ ステートメントを取得します。mysqldumpslow -st -t 10 -g "left join" /logs/mysql-slow.log
 
 --4. また、これらのコマンドを使用するときは | と more を使用することをお勧めします。そうしないと、画面が爆発する可能性があります。mysqldumpslow -sr -t 10 /logs/mysql-slow.log | more

3. プロフィールを表示

プロファイルの表示は 5.0.37 以降に追加されました。この機能を使用するには、バージョンが 5.0.37 以降であることを確認してください。

1. プロフィールの表示を有効にする

「プロファイリング」のような変数を表示します。--デフォルトは閉じています+---------------+-------+
| 変数名 | 値 |
+---------------+-------+
| プロファイリング | オフ |
+---------------+-------+

--enable プロファイリングを 1 に設定します。

2. 指定されたSQLを実行する

ここでいくつかのSQL文を実行し、次に

show profiles;--この開始期間中に実行されたすべてのSQL文を、QUERY IDとともにリストします。
+----------+-------------+----------------------------+
| Query_ID | 期間 | クエリ |
+----------+-------------+----------------------------+
| 1 | 0.00168025 | vhr.employee から * を選択 |
| 2 | 0.06573200 | vhr.hr から * を選択 |
+----------+-------------+----------------------------+
--最新の操作を示す 2 つのステートメントが表示されます。リストのサイズは、profiling_history_size セッション変数によって制御されます。デフォルト値は 15、最大値は 100 です。

3. 特定のSQLを診断する

queryid のプロファイル cpu、ブロック io を表示します -- 2 の query_id に対応します

SHOW PROFILE CPU FOR QUERY 1;--query_id 1 の特定の情報を照会します+----------------------+-----------+-----------+------------+
| ステータス | 期間 | CPU_user | CPU_system |
+----------------------+----------+-----------+------------+
| 開始 | 0.000194 | 0.000000 | 0.000000 |
| 権限を確認しています | 0.000012 | 0.000000 | 0.000000 |
| オープニングテーブル | 0.000030 | 0.000000 | 0.000000 |
| 初期化 | 0.000053 | 0.000000 | 0.000000 |
| システムロック | 0.000011 | 0.000000 | 0.000000 |
| 最適化 | 0.000003 | 0.000000 | 0.000000 |
| 統計 | 0.000014 | 0.000000 | 0.000000 |
| 準備中 | 0.000010 | 0.000000 | 0.000000 |
| 実行中 | 0.000001 | 0.000000 | 0.000000 |
| データ送信中 | 0.001213 | 0.000000 | 0.000000 |
| 終了 | 0.000014 | 0.000000 | 0.000000 |
| クエリ終了 | 0.000012 | 0.000000 | 0.000000 |
| テーブルのクローズ | 0.000019 | 0.000000 | 0.000000 |
| アイテムを解放 | 0.000070 | 0.000000 | 0.000000 |
| クリーンアップ | 0.000025 | 0.000000 | 0.000000 |
+----------------------+----------+-----------+------------+

日々の開発で留意すべき結論:

1 HEAP を MyISAM に変換する: クエリ結果が大きすぎてメモリに収まらないため、ディスクに移動されます。
2 一時テーブルの作成: 一時テーブルを作成し、一時テーブルにデータをコピーしてから削除します。
3 ディスク上の tmp テーブルにコピーしています: メモリ内の一時テーブルをディスクにコピーします。危険です。 ! !
4 ロック済み

注: 上記の 4 つのうち 1 つ以上が表示される場合は、SQL ステートメントを最適化する必要があることを意味します。

上記はMySQLスロークエリの詳細を説明する例です。MySQLスロークエリの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL の遅いクエリの落とし穴
  • MYSQL スロークエリとログの例の説明
  • MySQL スロークエリログの役割と公開
  • MYSQL スロークエリとログ設定とテスト
  • MySQL スロークエリログの有効化と設定
  • Mysql sql スロークエリ監視スクリプトコード例
  • MySQL の遅いクエリを見つける方法
  • MySQL のスロークエリの方法と例
  • MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明
  • MySQL の遅いクエリの最適化方法と最適化の原則
  • MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法
  • MySQLのスレッド実行の急増とクエリの遅延の問題を解決する

<<:  HTML に CSS を導入するいくつかの方法の紹介

>>:  Dockerはイメージ名とTAG操作の名前を変更します

推薦する

Linuxでのaliasコマンドの使い方の詳細な説明

1. 別名の使用alias コマンドは、コマンドのエイリアスを設定するために使用されます。このコマン...

Linux コンパイル最適化で習得しなければならないいくつかの姿勢のまとめ

01. コンパイルオプションとカーネルコンパイルLinux カーネル (英語: linux kern...

jQueryでフルスクリーンスクロール効果を実現

この記事の例では、フルスクリーンスクロールを実現するためのjQueryの具体的なコードを参考までに共...

JavaScript フレームワーク デザイン パターンの詳細な説明

目次動画最優秀選手ムヴヴムVueのソーススパ mpa要素を作成するクラス要約する動画 Model(模...

CentOS8 - bash: 文字化けとその解決方法

この状況は通常、中国語言語パックがインストールされていないか、デフォルトの言語設定に問題があるために...

Linuxディレクトリ構造の詳細な紹介

Linuxを学び始めるときは、まずLinuxの標準ディレクトリ構造を理解する必要があります。 / r...

最小限のルートファイルシステムを構築するためにbusyboxを移植するための詳細な手順

Busybox: 小さなコマンドが詰まったスイスアーミーナイフ。ステップ1: ディレクトリ構造を作成...

MySQL チュートリアル データ定義言語 DDL の例 詳細な説明

目次1. SQL言語の基本機能の紹介2. データ定義言語の目的3. データベースの作成と破棄4. デ...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

DockerにRedisをインストールし、パスワードを設定して接続する方法

Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...

プロジェクトにaxiosをカプセル化する実際のプロセス

目次序文axiosカプセル化の利点パッケージのアイデア設定の優先順位axiosインスタンス構成1. ...

CSS で背景ぼかし効果を実装するサンプルコード

以下のような効果でしょうか?もしそうなら、ぜひ読み進めてください! コードデモンストレーション(上の...

MySQL 8.0.18 はクローンプラグインを使用して MGR 実装を再構築します

3 ノード MGR 内の 1 つのノードに異常があり、MGR クラスターに再度追加する必要があるとし...

アダプティブ Web デザインを実現する方法に関する関連知識ポイントの要約

「アダプティブ Web デザイン」はどのように機能しますか?実はそれほど難しいことではありません。 ...