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操作の名前を変更します

推薦する

シンプルな画像ドラッグ効果を実現する js

この記事では、簡単な画像ドラッグ効果を実現するためのjsの具体的なコードを参考までに紹介します。具体...

MYSQL の 10 の典型的な最適化ケースとシナリオ

目次1. SQL最適化の一般的な手順1. SQL実行計画の分析を説明する2. プロフィール分析を表示...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...

CentOS7 64でのMySQL5.6.40の詳細なインストール手順

CentOS7 64でのMySQL5.6.40のインストール手順1) 以前にインストールしたMySQ...

MySQLトリガーの使用

トリガーにより、ステートメントの実行前または実行後に他の SQL コードを実行できます。トリガーは、...

初心者向けウェブサイト構築チュートリアル: 10 日間でウェブサイトの構築方法を学ぶ

10 日間のチュートリアルでは、最も理解しやすい言語を使用し、最も基本的なことから始めて、誰もが W...

CSS はモバイル デバイスで水平スクロール ナビゲーション バーを実装します (PC デバイスにも適用可能)

関数の起源最近、水平スクロール バーを必要とする H5 に取り組んでいました。いくつかのドキュメント...

CentOS 7 で MySQL 接続数が 214 に制限される問題の解決方法

問題を見つける最近、プロジェクトで問題が発生しました。接続が多すぎるため、「接続が多すぎます」という...

MySQL無料インストール版を解凍した後にパスワードが見つからない問題を解決する方法

1. mysql-8.0.21-winx64を解凍する2. 環境変数を設定し、アドレスをbinフォル...

Reactのヒントはフックの依存関係の問題を解消する方法を教えます

reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...

Linuxはiftopを使用してネットワークカードのトラフィックをリアルタイムで監視します

Linux は iftop を使用してネットワーク カードのトラフィックをリアルタイムで監視します。...

複数のフィールドを変更するためのMysql更新の構文の詳細な分析

MySQL でレコードを更新すると、構文は正しいのですが、レコードが更新されません...質問文実行前...

JavaScript スロットリングとアンチシェイクに関する簡単な説明

目次スロットルと手ぶれ防止コンセプト:違いスロットリングの実装スロットル機能手ぶれ補正の実装手ぶれ防...

プロジェクトの再構築からプロジェクトにおける CSS3 カスタム変数の使用について話す

CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...