序章

Mytopは、MySQLのパフォーマンスを監視するために使用されるオープンソースのコマンドラインツールです。 これは、topという名前のLinuxシステム監視ツールに触発されており、ルックアンドフィールが似ています。 MytopはMySQLサーバーに接続し、定期的に show processlistshow global status コマンド。 次に、情報を有用な形式で要約します。 mytopを使用すると、MySQLスレッド、クエリ、稼働時間を(リアルタイムで)監視したり、どのユーザーがどのデータベースでクエリを実行しているか、どのデータベースで遅いクエリかなどを確認できます。 このすべての情報は、MySQLサーバーのパフォーマンスを最適化するために使用できます。

このチュートリアルでは、mytopをインストール、構成、および使用する方法について説明します。

前提条件

このチュートリアルを開始する前に、次のものが必要です。

  • CentOS 7 64ビットドロップレット(CentOS 6でも動作します)
  • sudo権限を持つroot以外のユーザー。 このタイプのユーザーをセットアップするには、 CentOS7を使用したサーバーの初期セットアップのチュートリアルに従ってください。 すべてのコマンドはこのユーザーとして実行されます。
  • ドロップレットで実行されているMySQLサーバー。 MySQLをインストールするには、CentOSの記事にLinux、Apache、MySQL、PHP(LAMP)スタックをインストールする方法のステップ2に従ってください。

ステップ1—Mytopをインストールする

mytopに必要なパッケージをインストールしましょう。

まず、サーバーにEPEL(Enterprise Linux用の追加パッケージ)yumリポジトリをインストールする必要があります。 EPELは、Enterprise Linux用の高品質のオープンソースアドオンソフトウェアパッケージのセットを作成、維持、および管理するFedora SpecialInterestGroupです。 次のコマンドを実行して、サーバーにEPELリポジトリをインストールして有効にします。

CentOS 7の場合:

  1. sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

CentOS 6の場合:

  1. sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

続行する前に、以下を使用してEPELリポジトリが有効になっていることを確認してください。

  1. sudo yum repolist

有効にすると、出力に次のリポジトリが表示されます。

epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

次に、yumプラグイン securebase を使用して、EPELからベースパッケージを保護しましょう。

  1. sudo yum install yum-plugin-protectbase.noarch -y

securebase プラグインの目的は、特定のyumリポジトリーを他のリポジトリーからの更新から保護することです。 保護されていないリポジトリに新しいバージョンがある場合でも、保護されているリポジトリ内のパッケージは、保護されていないリポジトリ内のパッケージによって更新または上書きされません。

これで、mytopパッケージをインストールする準備が整いました。 次のコマンドを実行してインストールします。

  1. sudo yum install mytop -y

これにより、mytopパッケージとそのすべての依存関係(主にperlモジュール)がインストールされます。

ステップ2—Mytopの構成

mytopを使用する前に、mytop用にカスタマイズされた構成ファイルを作成します。 .mytop. 次のコマンドを実行します。

  1. sudo nano /root/.mytop

次のコンテンツをファイルに追加し、保存して終了します。

/root/.mytop
host=localhost
db=mysql
delay=5
port=3306
socket=
batchmode=0
color=1
idle=1

この構成ファイルは、mytopをrootとして直接実行する場合、およびmytopを使用して実行する場合に使用されます。 sudo 非rootsudoユーザーとしてその前にあるコマンド。

必要に応じて、この構成ファイルに変更を加えることができます。 たとえば、 delay オプションは、表示が更新されるまでの時間を秒単位で指定します。 mytopの表示を3秒ごとに更新したい場合は、ファイルを編集できます /root/.mytop を使用して

  1. sudo nano /root/.mytop

そして、以下を変更します。

/root/.mytop
delay=3

The idle パラメータは、アイドル(スリープ)スレッドをmytop表示画面のリストに表示できるようにするかどうかを指定します。 デフォルトでは、アイドル状態のスレッドが表示されます。 アイドル状態のスレッドを省略すると、デフォルトの並べ替え順序が逆になり、最も長く実行されているクエリがリストの一番上に表示されます。 これを行う場合は、 /root/.mytop ファイルを作成し、以下を変更します。

/root/.mytop
idle=0

構成ファイル内のすべてのパラメーターについては、mytopのマニュアルページを参照してください。各パラメーターの説明が含まれています。 マニュアルページにアクセスするには、次のコマンドを使用します。

  1. man mytop

入力できます q マニュアルを終了します。

ステップ3—Mytopに接続する

このセクションでは、mytopに接続し、それを使用してMySQLクエリを表示する方法について説明します。

Mytopには、データベースにアクセスするための資格情報が必要です。資格情報は、プロンプトを介して、コマンドラインで提供するか、構成ファイルに保存できます。 セキュリティを強化するために、 --prompt 毎回パスワードを要求するmytopのオプション。 以下を使用してmytopに接続しましょう:

  1. sudo mytop --prompt

プロンプトでMySQLルートパスワードを入力します。 でいくつかのコマンドライン引数を使用することもできます mytop 指図。 完全なリストについては、マニュアルページを参照してください。 たとえば、 sammy などの別のmysqlユーザーを使用してmytopに接続する場合は、次のコマンドを実行します。

  1. sudo mytop -u sammy --prompt

特定のデータベースのみに接続して監視するには、次のコマンドを使用できます。

  1. sudo mytop -d databasename --prompt

mytopを終了してシェルプロンプトに戻るには、次のように入力します q.

ステップ4—Mytopディスプレイの表示と解釈

このセクションでは、mytopディスプレイとツールが提供するさまざまな機能を解釈する方法を説明します。

を使用してmytopに接続したら mytop --prompt スレッドビューに移動します。 次のようなものが表示されます。

Output of mytop
MySQL 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行は、ヘッダーで構成されており、SHIFT-Hを押すことでオンとオフを切り替えることができます。 ヘッダーには、MySQLサーバーに関する要約情報が含まれています。

  • 最初の行は、サーバーのホスト名とサーバーが実行しているMySQLのバージョンを識別します。 右側には、MySQLサーバープロセスの稼働時間が日+時間:分:秒の形式で表示され、現在の時刻も表示されます。

  • 2行目には、サーバーが処理したクエリの総数(この場合は148)、1秒あたりの平均クエリ数、遅いクエリの数、および選択、挿入、更新、削除のクエリの割合が表示されます。

  • 3行目は、最後のmytop更新以降のリアルタイム値を示しています。 mytopの通常の更新(遅延)時間は5秒であるため、更新後の最後の5秒間に100個のクエリが実行された場合、 qps now 数は20になります。 最初のフィールドは、1秒あたりのクエリ数です(qps now: 2). 2番目の値は、1秒あたりの低速クエリの数です。 The Threads: 6 ( 5/ 0) セグメントは、合計6つの接続されたスレッドがあり、5つがアクティブ(1つはスリープ中)であり、スレッドキャッシュに0のスレッドがあることを示します。 3行目の最後のフィールドには、前の行と同様にクエリのパーセンテージが表示されますが、最後のmytopの更新以降です。

  • 4行目は、キーバッファの効率(キーがディスクではなくバッファから読み取られる頻度)と、MySQLが全体および最後のmytopサイクルで送受信したバイト数を示しています。 Key Efficiency: 2.0% は、2% ofキーがディスクからではなくバッファから読み取られることを示しています。 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 or 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スレッドビュー(デフォルトビュー)では、クエリは切り捨てられます。 クエリ全体を表示するには、 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%

The Command 列には、実行されているコマンドまたはクエリのタイプが表示されます。 The Total 列は、サーバーの起動以降に実行されたそのタイプのコマンドの総数を表し、 Pct 列は同じパーセンテージで表示されます。 垂直線の反対側には、 Last mytopの最後の更新以降に実行されたそのタイプのコマンドの数を示す列。 この情報は、MySQLサーバーが短期的および長期的に何をしているかについての洞察を与えてくれます。

このチュートリアルでは、mytopの重要で便利な機能のいくつかについて説明しました。 他にもたくさんあります。 オプションの完全なリストを表示するには、mytopの実行中にキーを押します。

結論

これで、mytopを使用してMySQLサーバーを監視する方法を十分に理解できたはずです。 また、問題のあるSQLクエリを見つけて最適化するための開始点でもあるため、サーバーの全体的なパフォーマンスが向上します。 サーバー上のMySQLクエリとテーブルを最適化する方法の詳細については、このチュートリアルを参照してください。