MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します。 show status like "com_insert%"; -- MySQL 挿入の数を取得します。 show status like "com_delete%"; -- mysql 内の削除数を取得します。 show status like "com_select%"; -- mysql クエリの数を取得します。 show status like "uptime"; -- MySQL サーバーの稼働時間を取得します show status like 'connections'; -- MySQL 接続数を取得します mysql 操作情報をクエリすると、[session|global] ステータスが次のように表示されます。[session|global] を記述しない場合は、デフォルトは session となり、現在のウィンドウの実行のみが取得されます。すべて (mysql の起動から現在まで) を確認したい場合は、global を使用する必要があります。
クエリが遅い MySQL のパフォーマンスが低下した場合は、スロークエリを有効にして、どの SQL ステートメントが応答の遅延を引き起こしているかを調べて分析します。もちろん、スロークエリをオンにすると CPU の損失とログレコード IO のオーバーヘッドが発生するため、MySQL の実行ステータスを確認するには、スロークエリログを断続的にオンにする必要があります。 スロー クエリでは、long_query_time を超えて実行されるすべての SQL ステートメントを記録できます。これを使用して、スロー SQL ステートメントを見つけて最適化します。 「%slow%」のような変数を表示します。-- スロークエリを有効にするかどうか。 show status like "%slow%"; -- 遅いクエリの SQL ステータスを照会します。 「long_query_time」のような変数を表示します。 -- クエリ時間が遅い 低速クエリの有効化設定 mysql> show variables like 'long_query_time'; -- デフォルトでは、MySQL は 10 秒を遅いクエリと見なします+-----------------+-----------+ | 変数名 | 値 | +-----------------+-----------+ | 長いクエリ時間 | 10.000000 | +-----------------+-----------+ mysql> set long_query_time=1; -- 低速クエリ時間を変更します。現在のセッションに対してのみ有効です。 mysql> set global slow_query_log='ON';-- スロークエリを有効にし、グローバルを追加します。そうしないと、エラーが報告されます。 MySQL設定ファイルmy.ini [windows] / my.cnf [Linux]を変更して設定ファイルに追加することもできます。[mysqld]の後に追加する必要があることに注意してください。 slow_query_log = on -- ログ記録を有効にします。 slow_query_log_file = /data/f/mysql_slow_cw.log -- ログを記録するためのログ ファイル。注: ウィンドウには、D:/wamp/bin/mysql/mysql5.5.16/data/show-slow.log などの絶対パスを記述する必要があります。 long_query_time = 2 -- 最長クエリ時間(秒単位)。 log-queries-not-using-indexes -- インデックスを使用しないクエリがログに記録されることを示します。 低速クエリの使用 例1: mysql> sleep(3) を選択します。 mysql> '%slow%' のようなステータスを表示します。 +---------------------+-------+ | 変数名 | 値 | +---------------------+-------+ | 遅い起動スレッド | 0 | | 遅いクエリ | 1 | +---------------------+-------+ -- Slow_queries 合計1つの遅いクエリがあります 例2: ストアド プロシージャを使用して、テスト用の大規模なデータベースを構築します。 データ準備 テーブル部門を作成します( deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 コメント 'Number', dname VARCHAR(20) NOT NULL DEFAULT "" コメント 'name', loc VARCHAR(13) NOT NULL DEFAULT "" コメント '場所' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 コメント 'Department table'; テーブルempを作成する (empno MEDIUMINT UNSIGNED NOT NULL デフォルト 0, ename VARCHAR(20) NOT NULL DEFAULT "" コメント 'name', ジョブ VARCHAR(9) NOT NULL DEFAULT "" コメント 'Work', mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 コメント '上位数', hiredate DATE NOT NULL コメント '入社日'、 sal DECIMAL(7,2) NOT NULL コメント '給与', comm DECIMAL(7,2) NOT NULL コメント '配当', deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 コメント '部門番号' )ENGINE=MyISAM DEFAULT CHARSET=utf8 コメント '従業員テーブル'; テーブル salgradeを作成します( グレード MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 コメント 'グレード', losal DECIMAL(17,2) NOT NULL コメント '最低賃金', hisal DECIMAL(17,2) NOT NULL コメント '最高給与' )ENGINE=MyISAM DEFAULT CHARSET=utf8 コメント '給与レベル テーブル'; salgrade に VALUES (1,700,1200) を挿入します。 salgrade に値 (2,1201,1400) を挿入します。 salgrade VALUES (3,1401,2000) に挿入します。 salgrade に VALUES (4,2001,3000) を挿入します。 salgrade に VALUES (5,3001,9999) を挿入します。 区切り文字 $ 関数 rand_num() を作成する tinyint(6) を返す SQLデータを読み取る 始める return_num tinyint(6) を宣言します。デフォルトは 0 です。 return_num = floor(1+rand()*30) を設定します。 return_num を返します。 終了$ 区切り文字 $ 関数 rand_string(n INT) を作成する varchar(255) を返すSQLデータ読み取り 始める chars_str varchar(100)をデフォルトとして宣言する 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; return_str varchar(255) をデフォルト '' として宣言します。 i int をデフォルトで 0 と宣言します。 i < n ながら return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1)); を設定します。 i = i + 1 と設定します。 終了しながら; return_str を返します。 終了$ 区切り文字 $ プロシージャ insert_emp(in start int(10),in max_num int(10)) を作成します。 始める i int をデフォルトで 0 と宣言します。 #set autocommit =0 自動コミットを 0 に設定し、自動送信をオフにします。 自動コミットを 0 に設定します。 繰り返す i = i + 1 と設定します。 emp値に挿入します((start + i)、rand_string(6)、'SALESMAN'、0001、curdate()、2000、400、rand_num()); i = max_num になるまで 繰り返し終了; 専念; 終了$ insert_emp(1,4000000)を呼び出します。 SELECT * FROM `emp` where ename like '%mQspyv%'; -- 1.163 秒 # 時間: 150530 15:30:58 -- クエリは 2015-5-30 15:30:58 に発生しました # User@Host: root[root] @ localhost [127.0.0.1] -- クエリ実行者は誰で、どのホストにいますか? # Query_time: 1.134065 Lock_time: 0.000000 Rows_sent: 8 Rows_examined: 4000000 -- Query_time: クエリにかかる合計時間、Lock_time: クエリ中にテーブルがロックされている時間、Rows_sent: 返された行数、Rows_examined: 400 万行のデータをスキャンした後に得られた結果。 SET timestamp=1432971058; -- スロークエリが発生したときのタイムスタンプ。 SELECT * FROM `emp` where ename like '%mQspyv%'; スロー クエリを有効にすると、毎日数 GB のスロー クエリ ログが発生する可能性があります。この時点では、手動で分析することは明らかに非現実的です。 遅いクエリ分析ツール: mysqldumpslow このツールは、スロークエリに付属するスロークエリ分析ツールです。通常、MySQL がインストールされていれば、このツールは使用できます。 使用方法: mysqldumpslow [ OPTS... ] [ LOGS... ] -- その後にパラメータとログ ファイルの絶対アドレスが続きます。 -s 何を基準に並べ替えるか (al、at、ar、c、l、r、t)、デフォルトは 'at' al: 平均ロック時間 ar: 送信された行の平均数 at: 平均クエリ時間 c: カウント l: ロック時間 r: 送信された行数 t: クエリ時間 -r ソート順を逆にする(最初ではなく最後が最大) -t NUM 上位n個のクエリのみを表示 -a すべての数値をNに、文字列を'S'に抽象化しない -n NUM 名前に少なくとも n 桁の数字が含まれる抽象番号 -g PATTERN grep: この文字列を含む文のみ考慮する -h HOSTNAME *-slow.log ファイル名の db サーバーのホスト名 (ワイルドカードも使用可能)、 デフォルトは「*」で、すべてに一致します -i NAME サーバーインスタンス名(mysql.server 起動スクリプトを使用している場合) -l 合計時間からロック時間を減算しない 一般的な使用法 mysqldumpslow -sc -t 10 /var/run/mysqld/mysqld-slow.log # 最も遅いクエリ上位 10 件を取得します。 mysqldumpslow -st -t 3 /var/run/mysqld/mysqld-slow.log # 最も遅いクエリ上位 3 件を取得します。 mysqldumpslow -st -t 10 -g "left join" /database/mysql/slow-log # 時間順に並べられた左結合のクエリ上位 10 件を取得します。 mysqldumpslow -sr -t 10 -g 'left join' /var/run/mysqld/mysqld-slow.log # 時間順に並べられた左結合のクエリ上位 10 件を取得します。 mysqldumpslow -sr -t 10 -g 'left join' /var/run/mysqld/mysqld-slow.log #
場合: SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000; カウント: 1 時間=1.91秒 (1秒) ロック=0.00秒 (0秒) 行=1000.0 (1000)、vgos_dba[vgos_dba]@[10.130.229.196] SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N; pt-クエリダイジェスト 例示する pt-query-digest は、MySQL のスロー クエリを分析するためのツールです。SHOWPROCESSLIST または tcpdump によってキャプチャされた binlog、一般ログ、スローログ、または MySQL プロトコル データを分析できます。分析結果はファイルに出力できます。分析プロセスは、まずクエリステートメントの条件をパラメータ化し、次にパラメータ化されたクエリをグループ化してカウントし、各クエリの実行時間、回数、割合などを計算します。分析結果を使用して、問題を特定し、最適化することができます。 インストール http://www.percona.com/get/pt-query-digest から取得 chmod +x ptクエリダイジェスト # これは Linux スクリプトなので、使用するには絶対パスまたは相対パスを指定する必要があります。または、ツール セット全体をダウンロードしてください wget percona.com/get/percona-toolkit.rpm rpm -ivh percona-toolkit-2.2.13-1.noarch.rpm percona.com/get/percona-toolkit.tar.gz を取得します。 tar -zxvf percona-toolkit-2.2.13.tar.gz cd percona-toolkit-2.2.13 perl メイクファイル.PL 作成 && インストール 構文と重要なオプション pt-query-digest [オプション] [ファイル] [DSN] --create-review-table --review パラメータを使用して分析結果をテーブルに出力する場合、テーブルが存在しない場合は自動的に作成されます。 --create-history-table --history パラメータを使用して分析結果をテーブルに出力する場合、テーブルが存在しない場合は自動的に作成されます。 --filter は、入力されたスロークエリを、指定された文字列に従って照合およびフィルタリングしてから分析します。 --limit は、出力結果の割合または数を制限します。デフォルト値は 20 で、最も遅い 20 個のステートメントが出力されることを意味します。50% の場合、合計応答時間の割合に応じて大きいものから小さいものの順にソートされ、合計が 50% に達すると出力が終了します。 --host mysql サーバアドレス --user mysql ユーザー名 --password mysql ユーザパスワード --history 分析結果をテーブルに保存します。分析結果は比較的詳細です。次回 --history を使用するときに、同じステートメントが存在し、クエリの時間間隔が履歴テーブルと異なる場合は、データテーブルに記録されます。同じ CHECKSUM をクエリすることで、特定の種類のクエリの履歴変更を比較できます。 --review は分析結果をテーブルに保存します。この分析はクエリ条件をパラメータ化しているだけなので、1 つのクエリ タイプにつき 1 つのレコードとなり、比較的単純です。次回 --review を使用するときに、同じステートメント分析が存在する場合、それはデータ テーブルに記録されません。 --output 分析結果の出力タイプ。値は、report(標準分析レポート)、slowlog(MySQL スローログ)、json、json-anon のいずれかです。読みやすさの点から、通常は report が使用されます。 --since 分析を開始する時間。値は文字列です。「yyyy-mm-dd [hh:mm:ss]」の形式で指定された時間ポイント、または単純な時間値(s(秒)、h(時間)、m(分)、d(日))になります。たとえば、12h は、統計が 12 時間前から開始されることを意味します。 --until 期限を --since と組み合わせると、一定期間にわたって遅いクエリを分析できます。 パートI: 全体的な統計結果: 標準分析レポートの説明 全体: クエリは合計でいくつありますか? 上記の例では、クエリは合計で 266 個あります。 パート2: クエリグループ統計結果: この部分では、クエリをパラメータ化してグループ化し、各タイプのクエリの実行を分析します。結果は、合計実行時間によって最大から最小の順に並べ替えられます。 パート3: 各クエリの詳細な統計: 上の図、クエリ 1 の詳細な統計結果からわかるように、上部の表には実行回数、最大、最小、平均、95% などの各項目の統計が一覧表示されます。 使用例 (1)スロークエリファイルを直接分析する: pt-query-digest slow.log > slow_report.log (2)過去12時間のクエリを分析します。 pt-query-digest --since=12h slow.log > slow_report2.log (3)指定された時間範囲内のクエリを分析する: pt-query-digest slow.log --since '2014-05-17 09:30:00' --until '2014-06-17 10:00:00' >> slow_report3.log (4)選択文のみを含む遅いクエリを分析する pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' slow.log> slow_report4.log (5)特定のユーザーに対するクエリが遅い pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log> slow_report5.log (6)全テーブルスキャンや全結合を伴うすべての低速クエリをクエリする pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' slow.log> slow_report6.log (7)クエリをテストデータベースのquery_reviewテーブルに保存します。存在しない場合は自動的に作成されます。 pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_review --create-review-table slow.log (8)クエリをquery_historyテーブルに保存する pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_history --create-review-table slow.log_20140401 (9)MySQLのTCPプロトコルデータをtcpdumpでキャプチャし、分析する tcpdump -s 65535 -x -nn -q -tttt -i 任意 -c 1000 ポート 3306 > mysql.tcp.txt pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log (10)バイナリログを分析する mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql pt-クエリダイジェスト --type=binlog mysql-bin000093.sql > slow_report10.log (11)一般ログの分析 pt-query-digest --type=genlog localhost.log > slow_report11.log 以上がMySQLスロークエリの詳細な説明です。MySQLスロークエリの詳細については、123WORDPRESS.COMの他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
>>: Linux システムで Vim を使用してリモート ファイルを読み書きするコマンドの詳細な説明
最初のステップは、MySQL 8.0.23の無料インストールバージョンをダウンロードすることです。 ...
最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...
パッシブチェックパッシブ ヘルス チェックでは、NGINX と NGINX Plus はイベントの発...
mysqlbinlogのバージョンを表示mysqlbinlog -V [--version] bin...
タブバー: 異なるタブをクリックすると異なるコンテンツが表示され、クリックしたタブのスタイルが変更さ...
この記事では、ブルーグリーン デプロイメントと、nginx を使用してブルーグリーン デプロイメント...
目次テーブルを作成するときにNOT NULL制約を設定するテーブルを変更するときに非NULL制約を追...
導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...
トランザクション分離レベルを確認するMySQL では、'%tx_isolation%'...
この記事では、vue-table の追加と削除の具体的なコードを参考までに紹介します。具体的な内容は...
シナリオ 1: HTML: <div class="outer"> ...
文章1) Ubuntuイメージをダウンロードする docker プル Ubuntu 2) 画像を見る...
この記事では、カラフルな太陽のハロー効果を実現するためのJavaScriptキャンバスの具体的なコー...
目次前面に書かれたルータ.jsonルート生成メニュー生成効果要約する前面に書かれたルートを繰り返し記...
序文:前回の記事では、注意深い学生であれば発見できたかもしれない DDL ステートメントの使用法を中...