ホームページ  >  記事  >  データベース  >  MySQLデータベースの監視方法は何ですか?

MySQLデータベースの監視方法は何ですか?

WBOY
WBOY転載
2023-06-03 13:22:131278ブラウズ

現在のデータベースを監視する方法は数多くあり、組み込みデータベース、商用データベース、オープン ソースの 3 つのカテゴリに分類されます。それぞれに独自の特徴があります。

mysql データベースについては、コミュニティの活動やモニタリング手法は多岐にわたりますが、どのモニタリング手法であっても核となるのはモニタリングデータであり、網羅的なモニタリングデータを取得した上で柔軟に表示できる部分となります。

1. 接続数 (Connects)

1.1. 使用される接続の最大数

show status like 'Max_used_connections';

1.2. 現在開いている接続の数

show status like 'Threads_connected';

2.キャッシュ (bufferCache)

2.1. バッファ プールから読み取られなかった回数

show status like 'Innodb_buffer_pool_reads';

2.2. バッファ プールから読み取られた回数

show status like 'Innodb_buffer_pool_read_requests';

2.3. の合計数バッファ プール内のページ

show status like 'Innodb_buffer_pool_pages_total';

2.4、バッファ プール内の空きページ数

show status like 'Innodb_buffer_pool_pages_free';

2.5、キャッシュ ヒット率の計算

(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%

2.6、キャッシュ プール使用率

((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%

3, Lock(lock)

注: ロック待機統計数は累積データであり、取得するたびに以前のデータから減算して現在の統計データを取得できます

3.1. ロック待機番号

show status like 'Innodb_row_lock_waits';

3.2. 各ロックの平均待機時間

show status like 'Innodb_row_lock_time_avg';

3.3. テーブルロックの有無を確認します。データがある場合は、テーブルロックがあることを意味します。はロック テーブルです。空の場合は、テーブル ロックがないことを意味します

show open TABLES where in_use>0

4. 遅い SQL

注: mysqldumpslow コマンドの実行に失敗すると、遅いログが同期されますフォーマットのためにローカルにコピーします。

4.1. mysql low sql スイッチがオンになっているかどうかを確認します

show variables like 'slow_query_log'; --ON 为开启状态,OFF 为关闭状态
 
set global slow_query_log=1 -- 可进行开启

4.2. mysql low sql のしきい値を確認します

show variables like 'long_query_time';
 
set global long_query_time=0.1 -- 根据页面传递阈值参数,修改阈值

4.3. mysql low sql ディレクトリを確認します

show variables like 'slow_query_log_file';

4.4. スロー SQL ログのフォーマット

注: このステートメントは jdbc を通じて実行できず、コマンドライン実行に属します。
は、最長 10 件の SQL ステートメントの実行情報を表示します。10 は TOP 番号に変更できます。表示される情報は、実行数、平均実行時間、SQL ステートメント

mysqldumpslow -s at -t 10 /export/data/mysql/log/slow.log

5、ステートメント

5.1、挿入番号

show status like 'Com_insert';

5.2、削除番号

show status like 'Com_delete';
です。

5.3、数量を更新

show status like 'Com_update';

5.4、数量を選択

show status like 'Com_select';

6、スループット (データベース スループット)

6.1、送信スループット

show status like 'Bytes_sent';

6.2 、受信スループット

show status like 'Bytes_received';

6.3、合計スループット

Bytes_sent+Bytes_received

7、データベースパラメータ(serverconfig)

7.1、変数の表示

MySQLデータベースの監視方法は何ですか?

#8. 遅い SQL のトラブルシューティング手順

遅い SQL は MySQL の遅いクエリを指し、具体的には実行時間が long_query_time 値を超える SQL を指します。

MySQL にはバイナリ ログ binlog、リレー ログ Relaylog、REDO ロールバック ログ Redolog、undolog などがあるという話をよく聞きます。スロー クエリの場合は、スロー クエリ ログ、slowlog もあります。これは、応答時間が MySQL のしきい値を超えたステートメントを記録するために使用されます。 SQL が遅いと、実際の運用ビジネスに致命的な影響を与えるため、テスト担当者にとって、パフォーマンス テスト プロセス中にデータベース SQL ステートメントの実行を監視し、開発に正確なパフォーマンス最適化の提案を提供することが特に重要です。次に、Mysql データベースが提供するスロー クエリ ログを使用して SQL ステートメントの実行を監視し、消費量の多い SQL ステートメントを見つける方法について説明します。以下は、スロー クエリ ログを使用する手順の詳細な説明です:

8.1. 低速 SQL スイッチ throw_query_log がオンになっていることを確認します。

MySQLデータベースの監視方法は何ですか?

8.2. 低速 SQL ドメイン値を設定します。何秒遅いかが「遅いクエリ」と見なされます。単位は秒であることに注意してください。SQL コマンド set long_query_time=1 を実行して、long_query_time の値を 1 に設定します。つまり、実行に 1 秒以上かかるクエリです。

8.3. 遅い SQL ログ パスを確認しますMySQLデータベースの監視方法は何ですか?

##8.4. 形式と低速 SQL 分析ツールを使用して低速 SQL ログを分析する mysqldumpslow

MySQLデータベースの監視方法は何ですか?mysqldumpslow 低速クエリ分析ツールは mysql インストール後に付属します。使用パラメータの説明は、./mysqldumpslow —help

# を通じて表示できます。

##8.4.1. 最も使用されている 10 個の低速クエリを削除する一般的な使用法

./mysqldumpslow -s c -t 10 /export/data/mysql/log/slow.log

クエリ時間が最も遅い 3 つの低速クエリを取得しますMySQLデータベースの監視方法は何ですか?

./mysqldumpslow -s t -t 3 /export/data/mysql/log/slow.log

注: mysqldumpslow を使用した分析結果には、特定の完全な SQL ステートメントは表示されず、SQL の構造のみが表示されます;

If: SELECT FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;

mysqldumpslow コマンドは実行および表示:

Count: 2 Time=1.5s (3s) Lock=0.00s (0s) Rows=1000.0 (2000) 、 vgos_dba[vgos_dba]@[10.130.229.196]SELECT FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N

8.4.2. mysqldumpslow の解析結果の詳細説明


Count: この種のステートメントの実行回数を示します。上の図は、select ステートメントが 2 回実行されたことを示しています。

  • Time: このタイプのステートメントの平均実行時間 (合計時間) を示します。

  • Lock: ロック時間 0 秒。

  • Rows:单次返回的结果数是 1000 条记录,2 次总共返回 2000 条记录。

通过这个工具就可以查询出来哪些 sql 语句是慢 SQL,从而反馈研发进行优化,比如加索引,该应用的实现方式等。

8.5、常见慢 SQL 排查

8.5.1、不使用子查询

SELECT FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang');

子查询在 MySQL5.5 版本里,内部执行计划器是这样执行的:先查外表再匹配内表,而不是先查内表 t2,当外表的数据很大时,查询速度会非常慢。
在 MariaDB10/MySQL5.6 版本里,采用 join 关联方式对其进行了优化,这条 SQL 会自动转换为

SELECT t1. FROM t1 JOIN t2 ON t1.id = t2.id;

但请注意的是:优化只针对 SELECT 有效,对 UPDATE/DELETE 子 查询无效, 生产环境尽量应避免使用子查询。

8.5.2、避免函数索引

SELECT FROM t WHERE YEAR(d) >= 2016;

由于 MySQL 不像 Oracle 那样⽀持函数索引,即使 d 字段有索引,也会直接全表扫描。
应改为 :

SELECT FROM t WHERE d >= ‘2016-01-01';

8.5.3、用 IN 来替换 OR 低效查询

SELECT FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;

高效查询 

SELECT FROM t WHERE LOC_IN IN (10,20,30);

8.5.4、LIKE 双百分号无法使用到索引

SELECT FROM t WHERE name LIKE '%de%';

应改为 :

SELECT FROM t WHERE name LIKE 'de%';

8.5.5、分组统计可以禁止排序

SELECT goods_id,count() FROM t GROUP BY goods_id;

默认情况下,MySQL 对所有 GROUP BY col1,col2… 的字段进⾏排序。如果查询包括 GROUP BY,想要避免排序结果的消耗,则可以指定 ORDER BY NULL 禁止排序。
应改为 :

SELECT goods_id,count () FROM t GROUP BY goods_id ORDER BY NULL;

8.5.6、禁止不必要的 ORDER BY 排序

SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;

应改为 :

SELECT count (1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;

以上がMySQLデータベースの監視方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。