データベースのワークロードに過度のストレスがかかっている場合は、最初に、クエリのパターンを確認するために、実行中のクエリを確認する必要があります。重い書き込みですか?重い読みますか?ボトルネックはどこにありますか?
これを理解するには、一般ログまたは低速ログを有効にして、実行中およびファイルへの書き込み中のクエリをキャプチャしようとします。また、バイナリログから読み取り(バイナリログがデータベース内のすべての変更をキャプチャするため)、データベースで実行中のプロセスリストから直接読み取りを確認することもできます。 tcpdumpを調べることで、ネットワークの観点からクエリをキャプチャすることもできます。
次に何をしますか?一般ログファイル、低速ログファイル、バイナリログに書き込まれるクエリを分析して、何か面白いことが起こっているかどうかを確認できます(クエリのボトルネックなど)。
Perconaには、pt-query-digestという名前のこれらのタイプクエリを分析するためのツールがあります。これは、DBAがデータベースを管理するのに役立つユーティリティツールのコレクションであるPerconaToolkitをインストールするときに含まれます。このブログでは、このツールと、ClusterControlのクエリ管理機能との比較について説明します。
Perconaリポジトリは、セットアップ用に2つのパッケージLinuxディストリビューションをサポートしています。これは、DebianベースとRPMベースのパッケージディストリビューションです。インストールは以下のように簡単です:
Debianベースのパッケージ(Ubuntu、Debian)
パッケージをダウンロードしてPerconaパッケージリポジトリを構成する
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
次に、ダウンロードしたパッケージをdpkgを使用してインストールします
sudo dpkg -i percona-release_latest.generic_all.deb
その後、パッケージマネージャーからインストールを実行するだけです
sudo apt-get install percona-toolkit
RPMベースのパッケージ(RHEL、CentOS、Oracle Enterprise Linux、Amazon AMI)
rpmパッケージを直接インストールして、Perconaパッケージリポジトリを構成します。
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
その後、パッケージマネージャーからインストールを実行するだけです
sudo apt-get install percona-toolkit
Perconaユーティリティがマシンにインストールされ、それを使用するだけで済みます。
pt-query-digestを使用してクエリワークロードから統計を生成する方法はいくつかあります。以下は、低速のクエリファイル、一般ファイル、データベース内のshow processlist、およびを使用して統計を生成する方法です。バイナリログを読み通します。
showprocesslistデータベースから生成
pt-query-digest --processlist h =localhost、D =sbt、u =sbtest、p =12qwaszx --output slowlog> /tmp/slow_query.log
遅いクエリファイル/一般的なクエリファイルから生成
pt-query-digest mysql-slow.log> /tmp/slow_query.log
バイナリログから生成します。 pt-query-digestを実行する前に、mysqlbinlogを使用してバイナリログを読み取り可能な形式に抽出する必要があります。ソースとして--typeオプションとtypebinlogを追加することを忘れないでください。
pt-query-digest --type binlog mysql-bin.000001.txt> slow_query.log
ファイルの生成が完了すると、次のようなレポートが表示されます:
#12sユーザー時間、170msシステム時間、27.44M rss、221.79M vsz#現在の日付:Sun May 10 21:40:47 2020#ホスト名:n2#ファイル:mysql-1#全体:94.92k合計、47固有、2.79k QPS、27.90x同時実行________#時間範囲:2020-05-10 21:39:37〜21:40:11#属性合計最小最大平均95%stddev中央値#=============================================================#実行時間949s 6us 1s 10ms 42ms 42ms 2ms#ロック時間31s 0 1s 327us 80us 11ms 22us#送信された行69.36k 0 490 0.75 0.99 11.30 0#行の調査196.34k 0 490 2.12 0.99 21.03 0.99#影響を受ける行55.28k 0 15 0.60 0.99 1.26 0#送信バイト数13.12M 11 6.08k 144.93 299.03 219.02 51.63#クエリサイズ15.11M 5 922 166.86 258.32 83.13 174.84#プロファイル#ランククエリID応答時間コールR/コールV / M Ite#==================================================================#1 0xCE367F5CFFCAF46E816F682E ... 162.6485 17.1%199 0.8173 0.03 SELECT order_line?在庫?#2 0x360F872745C81781F8F75EDE ... 107.4898 11.3%14837 0.0072 0.02 SELECT在庫? ... 93.8240 9.9%14865 0.0063 0.02更新在庫?#6 0x5812BF2C6ED2B9DAACA5D21B ... 53.9681 5.7%1289 0.0419 0.05更新顧客?#7 0x51C0DD7AF0A6D908579C28C0 ... 44.3869 4.7%864 0.0514 0.03 SELECT顧客?#8 0xFF %3250 0.0127 0.01 COMMIT#9 0xFDDEE3813C59881488D9C47F ... 36.0707 3.8%1180 0.0306 0.02 UPDATE顧客?#10 0x8FBBE0AFA061755CCC1C27AB ... 31.6417 3.3%1305 0.0242 0.03 UPDATE注文?#11 0x8AA6EB56551923DB9A49E40A ...倉庫? ... 16.4394 1.7%1516 0.0108 0.03 INSERT注文?#16 0x1B1EA568857A6AAC6544B44A ... 13.9560 1.5%1309 0.0107 0.05 SELECT new_orders?#17 0xCE3EDD98779478DE17154DCE ... 12.1470 1.3%1322 0.0092 0.05 INSERT履歴?#18 0x9DFD75E88091AA333 %1311 0.0089 0.05 SELECTorders?#MISC 0xMISC 39.6393 4.2%16334 0.0024 0.0 <29 ITEMS>#クエリ1:6.03 QPS、4.93x同時実行、ID 0xCE367F5CFFCAF46E816F682E53C0CF03バイト30449473#このアイテムは--limitに一致するため、レポートに含まれます。#スコア:V / M =0.03#時間範囲:2020-05-10 21:39:37〜21:40:10#属性pct合計最小最大平均95%stddev中央値# ================================================================#カウント0 199#実行時間17 163s 302ms 1s 817ms 992ms 164ms 816ms#ロック時間0 9ms 30us 114us 44us 84us 18us 36us#送信された行0 199 1 1 1 1 0 1#行の調査39 76.91k 306 468 395.75 441.81 27.41 381.65#行の影響0 0 0 0 0 0 0 0#送信されたバイト数0 15.54k 79 80 79.96 76.28 0 76.28#クエリサイズ0 74.30k 382 384 382.35 381.65 0 381.65#文字列:#データベースsbt#ホストlocalhost#最後のerrno 0#ユーザーsbtest#Query_time配布#1us#10us#100us#1ms#10ms#100ms ##################### ############################################ 1s ##### 10s +#Tables#SHOW TABLE STATUS FROM `sbt` LIKE'order_line6' \ G#SHOW CREATE TABLE` sbt`.`order_line6` \ G#SHOW TABLE STATUS FROM `sbt` LI KE'stock6' \ G#SHOW CREATE TABLE `sbt`.`stock6` \ G#EXPLAIN / *!50100 PARTITIONS * / SELECT COUNT(DISTINCT(s_i_id))FROM order_line6、stock6 WHERE ol_w_id =1 AND ol_d_id =1 AND ol_o_id <3050 AND ol_o_id> =3030 AND s_w_id =1 AND s_i_id =ol_i_id AND s_quantity <18 \ G#クエリ2:436.38 QPS、3.16x同時実行、ID 0x360F872745C81781F8F75EDE9DD44246バイト30021546#この項目は--limitに一致するため、レポートに含まれます。スコア:V / M =0.02#時間範囲:2020-05-10 21:39:37〜21:40:11#属性pct合計最小最大平均95%stddev中央値#================================================================#カウント15 14837#実行時間11107s 44us 233ms 7ms 33ms 13ms 3ms#ロック時間1 522ms 15us 496us 35us 84us 28us 23us#送信された行20 14.49k 1 1 1 1 0 1#行の調査7 14.49k 1 1 1 1 0 1#影響を受ける行0 0 0 0 0 0 0 0#送信されたバイト数28 3.74M 252 282 264.46 271.23 8.65 258.32#クエリサイズ193.01M209215 213.05 212.52 2.85 212.52#文字列:#データベースsbt#ホストlocalhost#最後のerrno 0#ユーザーsbtest#Query_time分布#1us#10us ## 100us ### 1ms ########## #################################################### ##### 10ms ############## 100ms ## 1s#10s +#Tables#SHOW TABLE STATUS FROM `sbt` LIKE'stock9' \ G#SHOW CREATE TABLE`sbt`.` stock9` \ G#EXPLAIN / *!50100 PARTITIONS * / SELECT s_quantity、s_data、s_dist_01 s_dist FROM stock9 WHERE s_i_id =60407 AND s_w_id =2 FOR UPDATE \ G
上記のpt-query-digestレポートの結果からわかるように、3つの部分に分けることができます。
ホスト名サーバー、コマンドの実行日、ログに記録されたクエリに関連する情報、QPS、時間枠の取得など、概要レポートには多くの情報が含まれています。そのほかに、各属性のタイミングの統計も表示できます。
#12sユーザー時間、170msシステム時間、27.44M rss、221.79M vsz#現在の日付:Sun May 10 21:40:47 2020#ホスト名:n2#ファイル:mysql-1#全体:94.92k合計、47固有、2.79k QPS、27.90x同時実行________#時間範囲:2020-05-10 21:39:37〜21:40:11#属性合計最小最大平均95%stddev中央値#=============================================================#実行時間949s 6us 1s 10ms 42ms 42ms 2ms#ロック時間31s 0 1s 327us 80us 11ms 22us#送信された行69.36k 0 490 0.75 0.99 11.30 0#行の調査196.34k 0 490 2.12 0.99 21.03 0.99#影響を受ける行55.28k 0 15 0.60 0.99 1.26 0#送信バイト数13.12M 11 6.08k 144.93 299.03 219.02 51.63#クエリサイズ15.11M 5 922 166.86 258.32 83.13 174.84
ランクに基づくクエリプロファイリング
プロファイリングクエリで役立つ情報を確認できます。
#Profile#ランククエリID応答時間Calls R / Call V / M Ite#==================================================================#1 0xCE367F5CFFCAF46E816F682E ... 162.6485 17.1%199 0.8173 0.03 SELECT order_line?株式?#2 0x360F872745C81781F8F75EDE ... 107.4898 11.3%14837 0.0072 0.02株式を選択しますか?
実行中のクエリ、クエリの応答時間(パーセンテージの計算を含む)、クエリが行っている呼び出しの数、呼び出しごとの読み取りなど、多くの情報があります。
クエリ分散統計は、クエリプロファイリングランクに基づいて詳細情報を記述します。QPS同時実行性、クエリ属性に関連する統計情報を確認できます。
#クエリ1:6.03 QPS、4.93x同時実行、ID 0xCE367F5CFFCAF46E816F682E53C0CF03バイト30449473#このアイテムは--limitと一致するため、レポートに含まれます。#スコア:V / M =0.03#時間範囲:2020 -05-10 21:39:37〜21:40:10#属性pct合計最小最大平均95%stddev中央値#================================================================#カウント0 199#実行時間17 163s 302ms 1s 817ms 992ms 164ms 816ms#ロック時間0 9ms 30us 114us 44us 84us 18us 36us#送信された行0199 1 1 1 1 0 1#送信された行39 76.91k 306468395.75 441.81 27.41 381.65#影響を受ける行0 0 0 0 0 0 0 0#送信バイト数0 15.54k 79 80 79.96 76.28 0 76.28#クエリサイズ0 74.30k 382 384 382.35 381.65 0 381.65#文字列:#データベースsbt#ホストlocalhost#最後のエラー番号0#ユーザーs sbtest#Query_time distribution#1us#10us#100us#1ms#10ms#100ms ################################# ################################ 1s ##### 10s +#Tables#SHOW TABLE STATUS FROM `sbt` LIKE 'order_line6' \ G#SHOW CREATE TABLE `sbt`.`order_line6` \ G#SHOW TABLE STATUS FROM` sbt` LIKE'stock6' \ G#SHOW CREATE TABLE `sbt`.`stock6` \ G#EXPLAIN / *!50100 PARTITIONS * / SELECT COUNT(DISTINCT(s_i_id))FROM order_line6、stock6 WHERE ol_w_id =1 AND ol_d_id =1 AND ol_o_id <3050 AND ol_o_id> =3030 AND s_w_id =1 AND s_i_id =ol_i_id AND s_quantity <18 \ G
クエリ時間の分散、ホスト、ユーザー、データベースに関する情報もあります。
ClusterControlを使用したクエリ監視
ClusterControlには、以下に示すように、[クエリモニター]タブにあるクエリ監視機能があります。
データベースで実行されるクエリに関連する情報を確認できます。統計情報と実行時間を含みます。同じページにあるクエリモニター設定を構成することもできます。 [設定]をクリックして、低速クエリとインデックスを使用しないクエリを有効にするオプションがあります
必要なのは、のしきい値である長いクエリ時間を設定することだけです。実行時間に基づいて長い間分類するクエリ。インデックスを使用していないクエリを有効にするオプションもあります。
結論 クエリワークロードの監視と分析は、データベースワークロードを把握して理解するのに役立ちます。pt-query-digestとClusterControlクエリモニターの両方が、データベースで実行されているクエリに関連する情報を提供し、その理解に役立ちます。