前書き
Mytopは、MySQLのパフォーマンスを監視するために使用されるオープンソースのコマンドラインツールです。 topという名前のLinuxシステム監視ツールに触発され、ルックアンドフィールが似ています。 MytopはMySQLサーバーに接続し、定期的に `+ show processlist `および ` show global status +`コマンドを実行します。 次に、情報を便利な形式で要約します。 mytopを使用すると、(リアルタイムで)MySQLスレッド、クエリ、および稼働時間を監視できるだけでなく、どのユーザーがどのデータベースでクエリを実行しているか、遅いクエリなどを確認できます。 この情報はすべて、MySQLサーバーのパフォーマンスを最適化するために使用できます。
このチュートリアルでは、mytopのインストール、構成、および使用方法について説明します。
前提条件
このチュートリアルを始める前に、次のものが必要です。
-
CentOS 7 64ビットドロップレット(CentOS 6でも動作します)
-
sudo特権を持つ非rootユーザー。 このタイプのユーザーをセットアップするには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [CentOS 7での初期サーバーセットアップ]チュートリアルに従ってください。 すべてのコマンドはこのユーザーとして実行されます。
-
ドロップレットで実行されているMySQLサーバー。 MySQLをインストールするには、https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-7 [How Linux、Apache、MySQL、PHP(LAMP)スタックをCentOSにインストールするには]の記事。
ステップ1-Mytopのインストール
mytopに必要なパッケージをインストールしましょう。
まず、サーバーにEPEL(Enterprise Linux用の追加パッケージ)yumリポジトリをインストールする必要があります。 EPELは、Enterprise Linux用の高品質のオープンソースアドオンソフトウェアパッケージのセットを作成、維持、管理するFedoraの特別な関心グループです。 次のコマンドを実行して、サーバーにEPELリポジトリをインストールして有効にします。
CentOS 7の場合:
sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
CentOS 6の場合:
sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
先に進む前に、次を使用してEPELリポジトリが有効になっていることを確認します。
sudo yum repolist
有効にすると、出力に次のリポジトリがリストされます。
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64
次に、yumプラグイン* protectbase *を使用して、EPELからベースパッケージを保護します。
sudo yum install yum-plugin-protectbase.noarch -y
-
protectbase *プラグインの目的は、特定のyumリポジトリを他のリポジトリからの更新から保護することです。 保護されていないリポジトリに新しいバージョンがある場合でも、保護されたリポジトリのパッケージは、保護されていないリポジトリのパッケージによって更新または上書きされません。
これで、mytopパッケージをインストールする準備ができました。 次のコマンドを実行してインストールします。
sudo yum install mytop -y
これにより、mytopパッケージとそのすべての依存関係(主にperlモジュール)がインストールされます。
ステップ2-Mytopの構成
mytopを使用する前に、 `+ .mytop +`という名前のmytop用のカスタマイズされた構成ファイルを作成します。 コマンドを実行します。
sudo nano /root/.mytop
ファイルに次のコンテンツを追加し、保存して終了します。
/root/.mytop
host=localhost
db=mysql
delay=5
port=3306
socket=
batchmode=0
color=1
idle=1
この設定ファイルは、mytopを直接rootとして実行し、その前に `+ sudo +`コマンドで非root sudoユーザーとして実行するときに使用されます。
必要に応じて、この構成ファイルを変更できます。 たとえば、 `+ delay `オプションは、表示が更新される間隔を秒単位で指定します。 mytopの表示を3秒ごとに更新したい場合は、ファイル ` / root / .mytop +`を使用して編集できます
sudo nano /root/.mytop
以下を変更します。
/root/.mytop
delay=
`+ idle `パラメータは、mytop表示画面のリストにアイドル(スリープ)スレッドを表示するかどうかを指定します。 デフォルトでは、アイドルスレッドが表示されます。 アイドルスレッドを省略すると、デフォルトのソート順が逆になり、実行時間の最も長いクエリがリストの一番上に表示されます。 これを行うには、 ` / root / .mytop +`ファイルを編集し、以下を変更します:
/root/.mytop
idle=
構成ファイル内のすべてのパラメーターに関する情報については、mytopのマニュアルページを参照できます。各ファイルの説明が含まれています。 マニュアルページにアクセスするには、次のコマンドを使用します。
man mytop
「+ q +」と入力してマニュアルを終了できます。
ステップ3-Mytopへの接続
このセクションでは、mytopに接続し、それを使用してMySQLクエリを表示する方法について説明します。
Mytopは、データベースにアクセスするための資格情報を必要とします。資格情報は、プロンプト、コマンドライン、または構成ファイルに保存されます。 セキュリティを向上させるために、mytopに対して `+-prompt +`オプションを使用します。このオプションは毎回パスワードを要求します。 +以下を使用してmytopに接続します。
sudo mytop --prompt
プロンプトでMySQLルートパスワードを入力します。 `+ mytop +`コマンドでいくつかのコマンドライン引数を使用することもできます。 完全なリストについては、マニュアルページを参照してください。 たとえば、* sammy *などの別のmysqlユーザーを使用してmytopに接続するには、次のコマンドを実行します。
sudo mytop -u sammy --prompt
特定のデータベースのみを接続および監視するには、次のコマンドを使用できます。
sudo mytop -d --prompt
mytopを終了してシェルプロンプトに戻るには、「+ q +」と入力します。
ステップ4-Mytopディスプレイの表示と解釈
このセクションでは、mytopディスプレイとツールが提供するさまざまな機能の解釈方法について説明します。
`+ mytop --prompt +`を使用してmytopに接続すると、*スレッドビュー*に移動します。 次のようなものが表示されます。
Output of mytopMySQL on localhost (5.5.41-MariaDB) up 0+00:05:52 [01:33:15]
Queries: 148 qps: 0 Slow: 0.0 Se/In/Up/De(%): 09/00/00/00
qps now: 2 Slow qps: 0.0 Threads: 6 ( 5/ 0) 67/00/00/00
Key Efficiency: 2.0% Bps in/out: 14.7/320.7k Now in/out: 192.5/731.8k
Id User Host/IP DB Time Cmd Query or State
-- ---- ------- -- ---- --- ----------
2 root localhost mysql 0 Query show full processlist
16 root localhost 0 Sleep
17 root localhost testdb 0 Query SELECT * FROM dept_emp
18 root localhost testdb 0 Query SELECT * FROM dept_emp
19 root localhost testdb 0 Query SELECT * FROM dept_emp
20 root localhost testdb 0 Query SELECT * FROM dept_emp
別のビューにいる場合は、「+ t +」と入力してこのビューに戻ることができます。
上記の表示画面は2つの部分に分かれています。 上部の4行は* header で構成され、 SHIFT-H *を押すことでオンまたはオフに切り替えることができます。 ヘッダーには、MySQLサーバーに関する概要情報が含まれています。
-
最初の行は、サーバーのホスト名と実行中のMySQLのバージョンを識別します。 右側には、現在の時刻だけでなく、MySQLサーバープロセスの稼働時間(日+時間:分:秒の形式)が表示されます。
-
2行目には、サーバーが処理したクエリの総数(この場合は148)、1秒あたりの平均クエリ数、低速クエリの数、選択クエリ、挿入クエリ、更新クエリ、削除クエリの割合が表示されます。
-
3行目は、前回のmytopの更新以降のリアルタイム値を示しています。 mytopの通常の更新(遅延)時間は5秒です。したがって、更新から最後の5秒間に100件のクエリが実行された場合、「+ qps now 」の数は20になります。 最初のフィールドは、1秒あたりのクエリ数です( ` qps now:2 `)。 2番目の値は、1秒あたりの低速クエリの数です。 ` Threads:6(5/0)+`セグメントは、合計6つの接続されたスレッドがあり、5つがアクティブ(1つがスリープ状態)であり、スレッドキャッシュに0のスレッドがあることを示します。 3行目の最後のフィールドには、前の行と同様にクエリの割合が表示されますが、前回のmytopの更新以降です。
-
4行目は、キーバッファー効率(ディスクではなくバッファーからキーが読み取られる頻度)と、MySQLが全体および最後のmytopサイクルで送受信したバイト数を表示します。 `+ Key Efficiency:2.0%`は、キーの2%がディスクではなくバッファから読み取られることを示します。 ` Bps in / out:14.7 / 320.7k `は、起動以来、MySQLが平均14.7kbpsのインバウンドトラフィックと320.7kbpsのアウトバウンドトラフィックを示していることを示しています。 ` Now in / out +`は再びトラフィックを表示しますが、最後のmytopが更新されます。
表示の2番目の部分には、現在のMySQLスレッドが、アイドル時間に基づいてソートされて一覧表示されます(最もアイドル状態が低い)。 必要に応じて* O を押すと、ソート順を逆にすることができます。 スレッドID、ユーザー名、ユーザーの接続元ホスト、ユーザーの接続先データベース、アイドル時間の秒数、スレッドが実行しているコマンド(またはスレッドの状態)、およびクエリの最初の部分情報はすべてここに表示されます。 スレッドが Query 状態にある場合(つまり、 `+ Cmd `は* Query *)を表示し、次の列 ` Query or State `には実行中のクエリの最初の部分が表示されます。 コマンドの状態が* Sleep *または* Idle *の場合、通常、「 QueryまたはState 」列は空白になります。 上記の出力例では、ID * 2 *のスレッドは、実際にはmytopが ` show processlist +`クエリを実行して情報を収集しています。 ID * 16 *のスレッドはスリープしています(クエリを処理していませんが、まだ接続されています)。 ID * 17 *のスレッドは、 testdb *データベースでSELECTクエリを実行しています。
mytopの基本表示が理解できたので、mytopを使用してMySQLのスレッドとクエリに関する詳細情報を収集する方法を確認します。 次のmytopディスプレイを見てみましょう。
[secondary_output Output of mytop]
MySQL on localhost (5.5.41-MariaDB) up 0+00:13:10 [23:54:45]
Queries: 2.8k qps: 4 Slow: 51.0 Se/In/Up/De(%): 45/00/00/00
qps now: 17 Slow qps: 0.0 Threads: 52 ( 51/ 0) 96/00/00/00
Key Efficiency: 100.0% Bps in/out: 215.4/ 7.6M Now in/out: 2.0k/16.2M
Id User Host/IP DB Time Cmd Query or State
-- ---- ------- -- ---- --- ----------
34 root localhost testdb 0 Query show full processlist
1241 root localhost 1 Sleep
1242 root localhost testdb 1 Query SELECT * FROM dept_emp
1243 root localhost testdb 1 Query SELECT * FROM dept_emp
1244 root localhost testdb 1 Query SELECT * FROM dept_emp
1245 root localhost testdb 1 Query SELECT * FROM dept_emp
1246 root localhost testdb 1 Query SELECT * FROM dept_emp
1247 root localhost testdb 1 Query SELECT * FROM dept_emp
上記のmytop * thread view (デフォルトビュー)では、クエリは切り捨てられます。 クエリ全体を表示するには、 F *を押すと、次の質問が表示されます。
Full query for which thread id:
表示するクエリのスレッドIDを入力します。 たとえば、「+ 1244+」と入力します。 次に、以下が表示されます。
Thread 1244 was executing following query:
SELECT * FROM dept_emp WHERE ...
-- paused. press any key to resume or (e) to explain --
「+ e +」と入力してクエリを説明できます。 これにより、実行中のクエリが説明されるため、クエリが最適化されているかどうかを判断できます。 EXPLAINは、面倒なMySQLクエリを理解および最適化するための最も強力なツールの1つです。 例えば:
EXPLAIN SELECT * FROM dept_emp:
*** row 1 ***
table: dept_emp
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 332289
Extra: NULL
-- paused. press any key to resume --
任意のキーを押してこのモードを終了するか、「+ t +」と入力してデフォルトのスレッドビューに戻ります。
mytopで利用できるもう1つの便利なビューは、コマンドビューです。 コマンドビューにアクセスするには、「+ c +」と入力します。 これは次のようになります。
Command Total Pct | Last Pct
------- ----- --- | ---- ---
select 1782 55% | 100 8%
show status 723 22% | 533 45%
show processlist 708 22% | 532 45%
change db 2 0% | 0 0%
show variables 1 0% | 0 0%
Compression 0 0% | 0 0%
`+ Command `カラムは実行されているコマンドまたはクエリのタイプを示します。 ` Total `カラムは、サーバーが起動してから実行されたそのタイプのコマンドの総数を表し、 ` Pct `カラムは同じ割合を示します。 垂直線の反対側には、mytopの最後の更新以降に実行されたそのタイプのコマンドの数を示す「 Last +」列があります。 この情報により、MySQLサーバーが短期および長期で何をしているかについての洞察が得られます。
このチュートリアルでは、mytopの重要で便利な機能のいくつかについて説明しました。 他にも多くの製品があります。 オプションの完全なリストを表示するには、mytopの実行中に*?*キーを押します。
結論
これで、mytopを使用してMySQLサーバーを監視する方法を十分に理解できました。 また、問題のあるSQLクエリを見つけて最適化するための出発点でもあるため、サーバーの全体的なパフォーマンスが向上します。 サーバーでMySQLクエリとテーブルを最適化する方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-optimize-queries-and-tables-in-mysql-and-mariadbで取得できます。 -on-a-vps [このチュートリアル]。