ステップ1. MySQLスロークエリを有効にする 方法1: 設定ファイルを変更する Windows: Windows 構成ファイルは my.ini で、通常は MySQL インストール ディレクトリまたは c:\Windows にあります。 Linux: Linuxの設定ファイルはmy.cnfで、通常は/etcにあります。 my.ini に数行追加します: [mysqlld] 長いクエリ時間=2 #5.0、5.1、およびその他のバージョンには、次の構成オプションがあります。log-slow-queries="mysql_slow_query.log" #5.5以降のバージョンでは、次のオプションslow-query-log=Onを設定します slow_query_log_file="mysql_slow_query.log" インデックスを使用しないログクエリ 最初の文は、クエリが遅いと判断されるまでの秒数を定義するために使用されます。ここでは 2 秒と定義します。 2 番目の文は、スロー クエリ ログのパスを定義するために使用されます (Windows なので、権限の問題はありません) 3番目の文は、インデックスを使用しないクエリを記録することです ステップ2: 遅いクエリのステータスを確認する 方法2: MySQLデータベースを介して低速クエリを有効にする 上記の設定を有効にするには、mysql サーバー プロセス mysqld を再起動する必要があります。しかし、多くの場合、特に製品の運用環境では、変更を加えるたびに MySQL サーバーを再起動することは望ましくなく、特定の時間にそれを記録することも望まれます。 MySQL 5.1 では、より柔軟なランタイム制御が提供されるため、MySQL サーバーを再起動する必要がなく、特定の低速クエリを選択的に記録したり、記録しなかったりすることができます。 MySQL 5.1 では、スロークエリの有効化/無効化を柔軟に制御するためのグローバル変数 #// スロークエリのログ記録を有効にする#注: slow_query_log グローバル変数が設定されている場合、log_slow_queries も暗黙的に変更されますmysql>set global slow_query_log=ON 残念ながら、MySQL 5.0 では柔軟な制御のための同様のグローバル変数は提供されていませんが、long_query_time を十分に大きな値に設定することで、特定のクエリ ステートメントの記録を回避できます。例えば mysql> グローバル long_query_time を 3600 に設定します。 mysql> グローバル log_querise_not_using_indexes を ON に設定します。 MySQL 5.0 では、サービスがシャットダウンされていないときにログを記録したくない場合は、ログ ファイルを /dev/null へのシンボリック リンクにすることができます。注意: 変更後にFLUSH LOGSを実行するだけで、MySQLが現在のログファイル記述子を解放し、/dev/nullに再ログ記録するようになります。 MySQL 5.0 とは異なり、MySQL 5.1 では実行時にジャーナリング動作を変更し、データベース テーブルにログを記録できます。 mysql グローバル変数 log_output を TABLE に設定するだけです。 MySQL は、mysql.gengera_log と mysql.slow_log の 2 つのテーブルにログを記録します。ただし、ジャーナル ファイルに記録することをお勧めします。 mysql> 'log_output' のような変数を表示する\G 変数名: log_output 値: ファイル mysql> グローバル log_output='table' を設定します。 欠陥と監査 遅いクエリを記録すると、製品の最適化に役立ちます。ただし、MySQL の現在のバージョンにはまだいくつかの欠点があります。
microslow-patch パッチを使用すると、より細かい時間の粒度を使用して、実行されたすべての SQL ステートメントを記録できます。ただし、このパッチを使用するには、MySQL を自分でコンパイルする必要があります。安定性の理由から、このパッチを開発およびテスト環境に適用して、その利便性を享受することをお勧めします。運用環境ではこれを行わないようにしてください... ステップ2. スロークエリが有効になっていることを確認する MySQLのスロークエリのステータスを表示するには、次のSQL文を実行します。 実行結果には、スロー クエリが有効かどうか、スロー クエリの秒数、スロー クエリ ログなどの情報が画面に表示されます。 /* 遅いクエリ時間をチェック */ 「long_query_time」のような変数を表示します。デフォルトは 10 秒です。 /* スロークエリの設定を確認する */ 「%slow_queries%」のようなステータスを表示します。 /*スロークエリログパスを表示*/ 「%slow%」のような変数を表示します。 ステップ3: 低速クエリ操作を実行する 実際、意味のある低速クエリを実行するのは困難です。自分でテストしたところ、200,000 件のデータ レコードを含む大規模なテーブルをクエリした場合でも、数秒しかかかりませんでした。これを次の文に置き換えることができます。 スリープ(10)を選択します。 ステップ4: 遅いクエリの数を確認する 実行された低速クエリの数を表示するには、次の SQL ステートメントを使用します。 '%slow%' のようなグローバル ステータスを表示します。 mysql ログの設定: 注: これらの日次ファイルは、mysql が再起動されたときにのみ生成されます # すべての SQL ステートメントを記録します log=E:/mysqllog/mysql.log #データベースの起動とシャットダウンの情報、および操作中に生成されたエラー情報を記録します。log-error=E:/mysqllog/myerror.log # SELECT文を除くすべてのSQL文をログに記録します。このログはデータファイルの復元に使用できます。log-bin=E:/mysqllog/bin #遅いクエリのSQL文を記録する log-slow-queries=E:/mysqllog/slow.log #クエリ時間が遅い long_query_time=2 ステップ4: スロークエリログを分析する 方法1: ツールを使って分析する MySQL には、遅いクエリ ログを分析するための mysqldumpslow ツールが付属しています。さらに、便利なオープン ソース ツールもいくつかあります。たとえば、MyProfi(ダウンロードアドレス:http://sourceforge.net/projects/myprofi/)、mysql-log-filter、そしてもちろんmysqlsla 以下は、mysqldumpslow の共通パラメータの説明です。詳細な情報については、mysqldumpslow -help を使用して照会できます。
次のステップは、mysql に付属する低速クエリ ツールである mysqldumpslow を使用して分析することです (mysql の bin ディレクトリ内)。ログ ファイルの名前は host-slow.log です。 最も多くのレコードを持つ上位10のSQL文を一覧表示します mysqldumpslow -sc -t 10 ホストの遅い.log 最も多くのレコードを返す上位10個のSQL文をリストします mysqldumpslow -sr -t 10 ホスト-slow.log 時間別に左結合を含む最初の10個のSQL文を返す mysqldumpslow -st -t 10 -g "左結合" ホストスロー.log mysqldumpslow コマンドを使用すると、必要なさまざまなクエリ ステートメントを明確に取得できます。これは、MySQL クエリ ステートメントの監視、分析、最適化に非常に役立ちます。 方法2: MySQLのスロークエリログを直接分析する ログの一部は次のとおりです。 # 時間: 121017 17:38:54 # ユーザー@ホスト: root[root] @ localhost [127.0.0.1] # クエリ時間: 3.794217 ロック時間: 0.000000 送信行数: 1 検査行数: 4194304 タイムスタンプを1350466734に設定します。 text='orange' の wei から * を選択します。 # 時間: 121017 17:46:22 # ユーザー@ホスト: root[root] @ localhost [127.0.0.1] # クエリ時間: 3.819219 ロック時間: 0.000000 送信行数: 0 検査行数: 4194304 タイムスタンプを1350467182に設定します。 wei から * を選択し、text='xishizhaohua' を指定します。 実際、遅いクエリ ステートメントを見つけるだけで十分です。次に示すように、explain または desc コマンドを実行して遅いクエリ ステートメントを表示します。 問題は明らかであり、解決策も明らかです。インデックスを作成します。 mysql> wei(text) にインデックス text_index を作成します。 クエリは正常、4194304 行が影響を受けました (1 分 58.07 秒) レコード: 4194304 重複: 0 警告: 0 すると、クエリ操作を実行するときにかかる時間が大幅に短縮されます。 mysql> select * from wei where text='orange'; +---------+--------+ | ID | テキスト | +---------+--------+ | 4103519 | オレンジ | +---------+--------+ セット内1列(0.33秒) スロー クエリ ログは、実行された SQL ステートメントを記録するのに役立ちます。しかし、それは万能薬ではなく、あなたが思っているほど意味がないかもしれません。どのステートメントが遅いかはわかるだけですが、なぜ遅いのでしょうか? 具体的な理由を自分で分析し、継続的にデバッグする必要があります。より効率的な SQL ステートメントを変更するだけで済む場合もあれば、単にインデックスを追加するだけで済む場合もありますが、アプリケーションの設計を調整する必要が生じる可能性もあります。たとえば、上記のステートメントは非常に明白で、600 万行を超えるデータをチェックします。残念ながら、すべての記述がそれほど明白なわけではありません。他にも次のような理由が考えられます:
したがって、ログ ファイル内の特定のレコードについて過度に神経質になるのではなく、合理的に検討して実際の理由を見つけてください。遅いクエリが頻繁に発生する場合は、特別な注意を払う必要があります。個別に発生した場合は、定期的なチェックを行ってください。盲目的に試すよりも有用な、比較と排除のための統計とベンチマーク レポートをまとめることをお勧めします。この部分にあまり時間とエネルギーを無駄にしないでいただければ幸いです。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Vue.jsフレームワークはショッピングカート機能を実装します
>>: Oracle VM VirtualBox の CentOS7 オペレーティング システムのインストール チュートリアル図
この記事では、一般的な基本的な Linux コマンドとその使用方法を例を使って説明します。ご参考まで...
環境準備:複数のコンテナに基づいてホストに lnmp をデプロイします。 nginx サービス: 1...
目次新しい HTML ファイルを作成します。初期テンプレートを作成するHTML の追加CSS パディ...
1. 設置前によく掃除する rpm -pa | grep mysql または rpm -qa | g...
基本的な紹介特徴Flexbox は、よりシンプルで効率的なレイアウト方法を提供する CSS 表示タイ...
序文コストを考慮して、ほとんどのウェブマスターは、多数の小規模なウェブサイト用にサーバーを個別に購入...
問題の説明Windows Server 2012 R2 または Windows Server 201...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
目次ポッドを作成するには? kubectl ツールポッドを作成するには?前回の記事では、コンテナとポ...
Dockerのインストール公式インストールスクリプトを使用して最新バージョンのDockerをインスト...
序文:前回の記事では、さまざまな MySQL ステートメント構文の使用法とユーザー権限に関する知識を...
目次序文1. これを使用してデータ内のデータを読み取るプロセス2. Dep.target はいつ存在...
おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...
この記事では、Nodejs 開発プロセスで遭遇する配列の特性によって発生する問題と解決策、および配列...
この記事では、画像拡大鏡効果を実現するためのJSの具体的なコードを参考までに紹介します。具体的な内容...