Tuesday, May 7, 2013

MySQLのスロークエリと関連の懸念を識別する方法

Original post: http://anothermysqldba.blogspot.com/2013/05/how-to-identify-mysql-slow-queries-and.html

このブログの記事、ブログのシリーズの一部です 

スロークエリログには何と言っていますか? それはあなたのアプリケーションのキー問合せが含まれていますか?

MySQLサーバはこの状態でクエリをどのくらい実行された?
それは常に遅れてまたはこれらのクエリは、数週間前までは細かい走っていますか?
どちらかといえば何が変わった?

またによっていくつかのガイドラインに従うことによって開始Shlomi Noachを 。
彼は、このブログの記事に記載されているいくつかの有用なクエリを持っています。
    • "以下のクエリは、データベースごとにエンジンごとの合計サイズを返します"。 Shlomi Noach。
    • いくつかのインデックスが別の接頭語であるかどうかを確認してください(それが冗長である場合)" - Shlomi Noach。
    •  任意の2つのインデックスが同一であるかどうかを確認してください" - Shlomi Noach。
私はまた、ロナルドの記事に示さ概念とツールを理解するお勧めします

だからスロークエリの問題にもう少し掘ることができます。

あなたの結果は異なりますので、これは単純な例です。

最初のいくつかの数字を収集します。

%スロークエリ
     ただ、デモはデータので、あなたの結果は異なります。 
show status like 'Slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 7 |
+---------------+-------+

show status like 'Questions';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Questions | 84 |
+---------------+-------+
1 row in set (0.01 sec)

SELECT (7 / 84) * 100 as "% Slow Queries";
+----------------+
| % Slow Queries |
+----------------+
| 8.3333 |
+----------------+ 

slow_query_log
場所、フルタイムのDBAが既に知っているはずですが、念のために収集します。
show variables like '%slow_query%';
+---------------------+-------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/mysql-slow.log |
+---------------------+-------------------------------+
2 rows in set (0.00 sec) 

これらのクエリを見ていると、実行を開始すると、問題があるかもしれないものを見るために説明しています。
必要であれば、あなたは助けるためにいくつかのツールを確認することができます。
様々な道路は時として同じ城につながる 。"
ジョージ·RRマーティン 、 魂のゲーム

"唯一の新聞を読み、せいぜい現代の作家の本は眼鏡をscorns極端に近視の人のように私には見えます誰か。 彼は何かを見たり聞いたりするために取得することはありませんので、彼は、彼の時代の偏見や流行に完全に依存しています。 " 
アルバート·アインシュタイン

最良の結果を得るために、これらのツールの1以上を使用し、全体像を取得し、あなたに提示されているかを理解することを確認してください。
    一度あなたが後にあるクエリを見つけるには、EXPLAINを使用して、それらを評価する必要があります。 その後、必要に応じて、照会および関連する索引の最適化を支援するために必要な情報を持つことになります。
    を説明の詳細については、下記の通りです:

    クエリパフォーマンスを支援するいくつかの追加の懸念。

    クエリキャッシュの効率
    ただ、デモはデータので、あなたの結果は異なります。 

    > SELECT @@have_query_cache;
    +--------------------+
    | @@have_query_cache |
    +--------------------+
    | YES |
    +--------------------+


    >show status like '%Qcache_hits%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Qcache_hits | 32 |
    +---------------+-------+
    1 row in set (0.00 sec)

    > show status like '%Com_select%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Com_select | 16 |
    +---------------+-------+
    1 row in set (0.00 sec)

    > SELECT ( 32 / (16 + 32) ) * 100 AS "Query Cache Efficiency";
    +------------------------+
    | Query Cache Efficiency |
    +------------------------+
    | 66.6667 |
    +------------------------+
    1 row in set (0.00 sec) 

    私はピーターがまだ参照してください書かれたもの書き換えしたくない彼のブログの記事を
    クエリキャッシュがどのように効率的で評価します。 あなたのクエリがどのように決定論的なのですか?

    INDEXを必要としている結合
    ただ、デモはデータので、あなたの結果は異なります。   
    > show status like '%Select_range_check%';
    +--------------------+-------+
    | Variable_name | Value |
    +--------------------+-------+
    | Select_range_check | 0 |
    +--------------------+-------+

    > show status like '%Select_full_join%';
    +------------------+-------+
    | Variable_name | Value |
    +------------------+-------+
    | Select_full_join | 1 |
    +------------------+-------+

    > SELECT (0 + 1) AS "# of Joins that need an index";

    #
    This is used below as the numerator in
    "# of Joins that need an index today"
    +-------------------------------+
    | # of Joins that need an index |
    +-------------------------------+
    | 1 |
    +-------------------------------+

    > show status like 'Uptime';
    +---------------+--------+
    | Variable_name | Value |
    +---------------+--------+
    | Uptime | 335243 |
    +---------------+--------+

    > SELECT (1/ (335243/86400 )) as " # of Joins that need an index today" ;
    +-------------------------------------+
    | # of Joins that need an index today |
    +-------------------------------------+
    | 0.2577 |
    +-------------------------------------+ 

    だけでなく、すべてのインデックスが必要その結合見つけるほどあなたのクエリキャッシュの効率を見直すだけでなく、うまくいけば、ログで発見遅いクエリを評価できる" セレクト@ slow_query_log_fileを";

    うまくいけば、これは、MySQL内で非常に古いの懸念を解決する上で開始たどっている。