如果英文不好的话,可以参考 searchdoc 翻译的中文版本
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
先大体说下几个点哈
接下来,展开探讨一下
MySQL本地的SQL文件能连接,并不意味着可以通过网络连接,中间有好多东西隔着呢
通常有几种方式,选一种
需要时刻关注DB连接数
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show global status like 'Threads_connected' ;
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 4 |
+-------------------+-------+
1 row in set (0.00 sec)
mysql>
mysql> show global status like 'Threads_running'; # 当前连接数
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| Threads_running | 2 |
+-----------------+-------+
1 row in set (0.04 sec)
mysql>
记录性能监控中所采集到的数据库的状态
下面我们列举下最常见的监控指标
QPS 并不是仅仅只select 的,而是数据库处理所有SQL请求的。
公式 (采集两次,通过差值获取)
QPS=(Queries2 - Queries1) / (Uptime_since_flush_status2-Uptime_since_flush_status1)
这些参数都可以通过show status 来获取 如下
mysql> show global status like 'queries'; # 这个值时累加的;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Queries | 4820 |
+---------------+-------+
1 row in set (0.05 sec)
mysql> show global status like 'uptime_since_flush_status';
+---------------------------+--------+
| Variable_name | Value |
+---------------------------+--------+
| Uptime_since_flush_status | 536208 |
+---------------------------+--------+
1 row in set (0.03 sec)
mysql>
公式
TPS = ((com_insert2+com_update2+com_delete2)-(com_insert1+com_update1+com_delete1)
/(uptime_since_flush_status2-uptime_since_flush_status1);
同样的 这些参数都可以通过show status 来获取 如下
mysql> show global status like 'com_insert'; # 写入事务的数量,这个值是累加的
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_insert | 1038 |
+---------------+-------+
1 row in set (0.04 sec)
mysql> show global status like 'com_update'; # 更新事务的数量,这个值是累加的
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_update | 4 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global status like 'com_delete'; # 删除事务的数量,这个值是累加的
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_delete | 1 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global status like 'uptime_since_flush_status';
+---------------------------+--------+
| Variable_name | Value |
+---------------------------+--------+
| Uptime_since_flush_status | 536404 |
+---------------------------+--------+
1 row in set (0.04 sec)
mysql>
数据库系统的性能会随着并发处理请求数量的增加而下降;
并发的数量通常会远小于同一时间连接到数据库的线程数量。
获取并发量
mysql> show global status like 'Threads_running';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| Threads_running | 2 |
+-----------------+-------+
1 row in set (0.04 sec)
mysql>
阻塞时间> 60秒的 SQL
SELECT
b.trx_mysql_thread_id AS '被阻塞线程',
b.trx_query AS '被阻塞Sql',
c.trx_mysql_thread_id AS '阻塞线程',
c.trx_query AS '阻塞Sql',
(
UNIX_TIMESTAMP() - UNIX_TIMESTAMP(c.trx_started)
) AS '阻塞时间'
FROM
information_schema.INNODB_LOCK_WAITS AS a
JOIN information_schema.INNODB_TRX AS b ON a.requesting_trx_id = b.trx_id
JOIN information_schema.INNODB_TRX AS c ON a.blocking_trx_id = c.trx_id
WHERE
(
UNIX_TIMESTAMP() - UNIX_TIMESTAMP(c.trx_started)
) > 60;