mysql数据库巡检⼯作内容_数据库巡检
数据库巡检的内容通常涵盖主机硬件、操作系统和MySQL巡检项。其中,主机/os巡检主要包括:主机的硬件配置、CPU/内存/磁盘使⽤率以及磁盘的I/O使⽤情况;MySQL巡检项包括:数据库配置、⽤户权限、⼤表数据量、业务表主键和⾃增长情况、数据库的并发性、当前和历史连接情况统计、备份执⾏情况以及⽇志记录和慢SQL的分析优化等。
1、查看MySQL服务器配置信息及运⾏状况
通过show variables来查看mysql服务器配置信息,例如show variables like '%slow%';⽤于查看慢查询,show variables like
'max_connections';;⽤于查看最⼤连接数。
通过ps -ef | grep mysql查看mysql进程运⾏状况。
2、通过show status统计各种SQL的执⾏频率
通过show status可以查看服务器状态信息。show status可以根据需要显⽰session 级别的统计结果和global级别的统计结果。
1)以下⼏个参数对Myisam和Innodb存储引擎都计数:
Com_select 执⾏select 操作的次数,⼀次查询只累加1;
Com_insert 执⾏insert 操作的次数,对于批量插⼊的insert 操作,只累加⼀次;
Com_update 执⾏update 操作的次数;
Com_delete 执⾏delete 操作的次数。
2)以下⼏个参数是针对Innodb存储引擎计数的,累加的算法也略有不同:
Innodb_rows_read 执⾏select 查询返回的⾏数;
Innodb_rows_inserted 执⾏insert 操作插⼊的⾏数;
Innodb_rows_updated 执⾏update 操作更新的⾏数;
Innodb_rows_deleted 执⾏delete 操作删除的⾏数。
通过以上⼏个参数,可以很容易的了解当前数据库的应⽤是以插⼊更新为主还是以查询操作为主,以
及各种类型的SQL⼤致的执⾏⽐例是多少。对于更新操作的计数,是对执⾏次数的计数,不论提交还是回滚都会累加。
对于事务型的应⽤,通过Com_commit和Com_rollback可以了解事务提交和回滚的情况,对于回滚操作⾮常频繁的数据库,可能意味着应⽤编写存在问题。
3)以下⼏个参数便于我们了解数据库的基本情况:
Connections 试图连接Mysql 服务器的次数;
Uptime 服务器⼯作时间;
Slow_queries 慢查询的次数。
3、通过show status判断系统瓶颈
1)QPS(每秒Query量)
QPS = Questions(or Queries) / seconds
mysql > show global status like 'Question%';
2)TPS(每秒事务量)
TPS = (Com_commit + Com_rollback) / seconds
mysql > show global status like 'Com_commit';
mysql > show global status like 'Com_rollback';
3)key Buffer 命中率
mysql>show global status like 'key%';
key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%
key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%
4)InnoDB Buffer命中率
mysql> show status like 'innodb_buffer_pool_read%';
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads /
innodb_buffer_pool_read_requests) * 100%
5)Query Cache命中率
mysql> show status like 'Qcache%';
Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;
6)Table Cache状态量
mysql> show global status like 'open%';
⽐较open_tables与opend_tables值。
7)Thread Cache 命中率
mysql> show global status like 'Thread%';
mysql> show global status like 'Connections';
Thread_cache_hits = (1 - Threads_created / connections ) * 100%
创建⽤来处理连接的线程数。如果 Threads_created 较⼤,你可能要增加 thread_cache_size 值。缓存访问率的计算⽅法
Threads_created/Connections。
8)锁定状态
mysql> show global status like '%lock%';
Table_locks_waited/Table_locks_immediate 如果这个⽐值⽐较⼤的话,说明表锁造成的阻塞⽐较严重。
Innodb_row_lock_waits:innodb⾏锁,太⼤可能是间隙锁造成的。
Table_locks_waited:不能⽴即获得的表的锁的次数。如果该值较⾼并且有性能问题,应⾸先优化查询,然后拆分表或使⽤复制。
9)Tmp Table 状况(临时表状况)
mysql >show status like 'Created_tmp%';
Created_tmp_disk_tables/Created_tmp_tables⽐值最好不要超过10%,如果Created_tmp_tables值⽐较⼤,可能是排序⼦句过多或者是连接⼦句不够优化。
10)Binlog Cache 使⽤状况
mysql > show status like 'Binlog_cache%';
如果Binlog_cache_disk_use值不为0 ,可能需要调⼤ binlog_cache_size⼤⼩。
11)Innodb_log_waits
mysql > show status like 'innodb_log_waits';
Innodb_log_waits值不等于0的话,表明 innodb log buffer 因为空间不⾜⽽等待。
12)连接数⼤⼩——max_connections
mysql> show variables like 'max_connections';
+-----------------------+-------+
| Variable_name | Value |
+----------------------+--------+
| max_connections | 500 |
+---------------------+--------+
mysql> show global status like 'max_used_connections';
+------------------------------+--------+
| Variable_name | Value |
+------------------------------+--------+
| Max_used_connections | 498 |
+-----------------------------+--------+
设置的最⼤连接数是500,⽽响应的连接数是498 。
max_used_connections / max_connections * 100% = 99.6% (理想值 ≈ 85%)
13)Handler_read_rnd
mysql> show status like 'Handler_read_rnd';
如果 Handler_read_rnd 太⼤ ,则你写的 SQL 语句⾥很多查询都是要扫描整个表,⽽没有发挥键的作⽤。
14)Key_reads
mysql> show status like 'key_read%';
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| Key_read_requests | 1190 |
| Key_reads | 2 |
+--------------------------+---------+
如果 Key_reads 太⼤,则应该把 myf 中 key_buffer_size 变⼤,可以⽤ Key_reads/Key_read_requests计算出 cache 失败率。
15)Handler_read_rnd
mysql> show status like 'Handler_read_rnd';
根据固定位置读⼀⾏的请求数。如果正执⾏⼤量查询并需要对结果进⾏排序该值较⾼。可能使⽤了⼤量需要MySQL 扫描整个表的查询或连接没有正确使⽤键。
16)Handler_read_rnd_next
mysql>show status like 'Handler_read_rnd_next';
在数据⽂件中读下⼀⾏的请求数。如果你正进⾏⼤量的表扫描,该值较⾼。通常说明你的表索引不正确或写⼊的查询没有利⽤索引。
17)Select_full_join
mysql>show status like 'Select_full_join';
没有使⽤索引的联接的数量。如果该值不为 0, 你应仔细检查表的索引。
18)Select_range_check
mysql>show status like 'Select_range_check';
在每⼀⾏数据后对键值进⾏检查的不带键值的联接的数量。如果不为 0 ,你应仔细检查表的索引。
19)Sort_merge_passes
mysql>show status like 'Sort_merge_passes';
排序算法已经执⾏的合并的数量。如果这个变量值较⼤,应考虑增加 sort_buffer_size 系统变量的值。
20)Handler_read_first
mysql>show status like 'Handler_read_first';
索引中第⼀条被读的次数。如果较⾼,它表明服务器正执⾏⼤量全索引扫描。例如, SELECT col1 FROM foo ,假定col1 有索引。
21)Handler_read_key
mysql>show status like 'Handler_read_key';
根据键读⼀⾏的请求数。如果较⾼,说明查询和表的索引正确。
22)Handler_read_next
数据库优化sql语句mysql>show status like 'Handler_read_next';
按照键顺序读下⼀⾏的请求数。如果你⽤范围约束或如果执⾏索引扫描来查询索引列,该值增加。
23) Handler_read_prev
mysql>show status like 'Handler_read_prev';
按照键顺序读前⼀⾏的请求数。该读⽅法主要⽤于优化 ORDER BY ... DESC 。
24)Handler_read_rnd
mysql>show status like 'Handler_read_rnd';
根据固定位置读⼀⾏的请求数。如果你正执⾏⼤量查询并需要对结果进⾏排序该值较⾼。你可能使⽤了⼤量需要MySQL 扫描整个表的查询或你的连接没有正确使⽤键。
4、打开相应的监控信息
1)error log
在配置⽂件myf中进⾏配置,在运⾏过程中不能改变。
2)打开慢查询
set global slow_query_log='ON';
3)设置慢查询的时间阈值
set global long_query_time = 0.1;
4)未使⽤索引的sql语句打开
set global log_queries_not_using_indexes='ON
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论