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

推薦する

Nginx の場所に関する一般的なルールの優先順位の問題

目次1. 場所/マッチング2. 場所 = / 一致Locaitonには、完全一致(=)、プレフィック...

IE6 で幅と高さがおかしいバグ

図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...

Windows 10 に Apache 2.4.41 をインストールするチュートリアル

1. Apache 2.4.41 のインストールと設定最初のステップは、以下に示すように、https...

Win10 + Ubuntu20.04 LTS デュアルシステムブートインターフェースの美化

エフェクト表示組み込みのブートインターフェースがあまりにも醜いので、テーマをダウンロードして美しくし...

ウェブサイトをIE6、7、8、9の古いバージョンに対応させるための3つのソリューション

Microsoft は後からブラウザの研究開発に力を入れてきましたが、実際のところ、最新の IE ブ...

Vue で配列をクリアするいくつかの方法 (要約)

目次1. はじめに2. データを消去するいくつかの方法2.1 ref() の使用2.2 スライスの使...

MySQL 8.0.16 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16圧縮パッケージのインストールと設定方法を参考までに紹介します。...

MySQL フラッシュバック ツール binlog2sql の詳細なインストールと設定のチュートリアル

概要binlog2sql は、Python で開発されたオープンソースの MySQL Binlog ...

Vueプロジェクトでvuexを使用する方法

目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...

MySQL 8.0 のデフォルトのデータディレクトリを変更する (設定なしの簡単な操作)

使用シナリオ: Alibaba Cloud を使用しており、データディスクを別途購入しました (大容...

nginx proxy_cache バッチキャッシュクリアスクリプトの紹介

前書き: 以前、公式の nginx proxy_cache を CDN 静的キャッシュとして使用して...

ウェブサイトはグレー表示されています。画像を含む互換コードはすべてのブラウザをサポートしています

通常、国喪の日、大地震の日、清明節には、ウェブサイト全体を灰色にして、故人への哀悼の意を表します。そ...

HTML コードを書くための 30 のヒント

1. HTMLタグは常に閉じる前のページのソース コードでは、次のような記述がよく見られます。 &l...

uniapp エントリーレベル nvue クライミングピット記録の分析

目次序文こんにちは世界画像 境界線の半径を設定する実ピクセルを設定する外部CSSをインポートttfフ...