mysql> show global status like 'threads_%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 30 |
| Threads_connected | 65 |
| Threads_created | 3779 |
| Threads_running | 2 |
+-------------------+-------+
Threads_cached:当前此时此刻线程缓存中有多少空闲线程
Threads_connected:代表当前已建立连接的数量,因为一个连接需要一个线程,也可以看成当前被使用的线程数
Threads_created:代表从最近一次服务启动,已经创建线程的数量
Threads_running:代表当前激活(非睡眠)的线程数
mysql> show global status like '%connections';
+-----------------------------------+--------+
| Variable_name | Value |
+-----------------------------------+--------+
| Connection_errors_max_connections | 0 |
| Connections | 146049 |
| Max_used_connections | 197 |
+-----------------------------------+--------+
Connections:试图连接到MySQL服务器的连接数
Max_used_connections:服务器启动后已经同时使用的连接的最大数量(这个是连接的最大峰值,主要和参数max_connections(目前使用1000)对比来决定是否调整参数)
线程缓存命中率=1-Threads_created/Connections
mysql> show global status like '%abort%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Aborted_clients | 4863 |
| Aborted_connects | 62915 |
+------------------+-------+
Aborted_clients:当ablort clients增大的时候意味着有客户端成功建立连接,但是很快就断开连接或者被终止了,这种情况一般发生在网络不稳定的环境中
a)客户端没有主动关闭mysql连接mysql_close()
b)wait_timeout设置很短被mysql干掉了
c)客户端由于某些原因被干掉了,异常终止
Aborted_connects:当有大量的链接连接不上mysql的时候,这个数值就会激增
a)没有授权或者密码不对。一般错误日志中会有如下报错(Access denied for ‘user’@‘host’)
b)连接数满了。一般报错包含(too many connections)
c)超过链接时间限制,主要有这个参数控制connect_timeout(mysql默认是10s,基本除非网络环境极端不好,一般不会超时。)
Com_xxx表示每个具体类型语句执行的次数
Com_select:select执行次数
Com_insert:insert执行次数
Com_update:update执行次数
Com_delete:delete执行次数
。。。。。。
取的一段时间的增量,然后除以这段时间
QPS=(Com_select+Com_insert+Com_update+Com_delete)/时间
Com_commit:提交的执行次数
Com_rollback:回滚的执行次数
取的一段时间的增量,然后除以这段时间
TPS=(Com_commit+Com_rollback)/时间
表级别的锁情况--宏观大体
mysql> show global status like '%table_lock%';
+-----------------------+----------+
| Variable_name | Value |
+-----------------------+----------+
| Table_locks_immediate | 33106539 |
| Table_locks_waited | 28 |
+-----------------------+----------+
Table_locks_immediate:指的是能够立即获得表级锁的次数
Table_locks_waited:指的是不能立即获取表级锁而需要等待的次数,如果这个值比较高或者正在增加,那么表明存在严重的并发瓶颈,需要降低表级锁的调用频率
行级别的锁情况--宏观大体
mysql> show global status like '%innodb_row_lock%';\
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 0 |
| Innodb_row_lock_time | 19524 |
| Innodb_row_lock_time_avg | 16 |
| Innodb_row_lock_time_max | 3288 |
| Innodb_row_lock_waits | 1151 |
+-------------------------------+-------+
Innodb_row_lock_time:行锁定花费的总时间,单位毫秒
Innodb_row_lock_time_avg:行锁定的平均时间,单位毫秒
Innodb_row_lock_time_max:行锁定的最长时间,单位毫秒
Innodb_row_lock_waits:总共等待的次数
mysql> show global status like '%slow_queries%';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Slow_queries | 1616911 |
+---------------+---------+
mysql自启动以来,超过long_query_time(慢查询阈值时间)的次数,然后主要是后续观察分析慢查询日志得出系统的哪些sql语句存在优化空间(数据库系统优化的主要参考)
二进制日志binlog
mysql> show global status like '%binlog%';
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| Binlog_cache_disk_use | 405495 |
| Binlog_cache_use | 2309357 |
Binlog_cache_disk_use:表示binlog_cache_size的不足导致的缓存二进制日志使用到了临时文件的次数
Binlog_cache_use:使用binlog_cache_size缓存的次数
Binlog_cache_disk_use/Binlog_cache_use值比较大时,可以尝试增加binlog_cache_size的值大小
事务日志redolog
mysql> show global status like '%Innodb_log_waits%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Innodb_log_waits | 0 |
+------------------+-------+
Innodb_log_waits :因log_buffer不足导致等待的次数,此值较大时,考虑尝试增加innodb_log_buffer_size值大小
mysql> show global status like '%innodb_buffer_pool_wait%';
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| Innodb_buffer_pool_wait_free | 0 |
+------------------------------+-------+
Innodb_buffer_pool_wait_free :一般情况,通过后台向InnoDB缓冲池写。但是,如果需要读或创建页,并且没有干净的页可用,则它还需要先等待页面清空。该计数器对等待实例进行记数。如果已经适当设置缓冲池大小,该值应小;当这个值比较大时,说明需要增加buffer池的大小了
mysql> show global status like '%innodb_buffer_pool%';
+---------------------------------------+-------------+
| Variable_name | Value |
+---------------------------------------+-------------+
| Innodb_buffer_pool_pages_total | 393212 |
| Innodb_buffer_pool_pages_free | 8193 |
| Innodb_buffer_pool_reads | 6637922 |
| Innodb_buffer_pool_read_requests | 46462121208 |
Innodb_buffer_pool_pages_total:缓冲池总的页数
Innodb_buffer_pool_pages_free:缓冲池空闲的页数
缓冲池的利用率=1 - Innodb_buffer_pool_pages_free/Innodb_buffer_pool_pages_total
Innodb_buffer_pool_reads:从物理磁盘读取的次数,物理读
Innodb_buffer_pool_read_requests:从缓存池读取的次数,逻辑读
缓冲池的读命中率=1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests
mysql> show global status like '%Created_tmp%';
+-------------------------+--------+
| Variable_name | Value |
+-------------------------+--------+
| Created_tmp_disk_tables | 14714 |
| Created_tmp_files | 1685 |
| Created_tmp_tables | 871878 |
+-------------------------+--------+
Created_tmp_disk_tables :服务器执行语句时自动在磁盘上创建的临时表的数量
Created_tmp_tables:服务器执行语句时自动在内存中创建的临时表的数量
Created_tmp_disk_tables /Created_tmp_tables值比较大时,可以尝试增加tmp_table_size的值大小
Created_tmp_files:创建临时文件的数目
mysql> show global status like 'open_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| Open_files | 564 |
| Open_streams | 0 |
| Open_table_definitions | 300 |
| Open_tables | 3935 |
Open_files:当前处于打开的文件数目(可以和参数open_files_limit参数量对比来调整参数)
Open_table_definitions:打开的.frm文件数目(可以和table_definition_cache参数量对比来调整参数)
Open_tables:当前处于打开的表数目(可以和table_open_cache参数量对比来调整参数)
如果是innodb表,可以和innodb_open_files(限制可以打开的.ibd文件数目)参数量对比来调整参数
mysql> show global status like '%sort%';
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| Sort_merge_passes | 2591 |
| Sort_range | 762320 |
| Sort_rows | 62306390 |
| Sort_scan | 1614674 |
+-------------------+----------+
Sort_merge_passes :排序算法已经执行的合并的数量。如果这个变量值较大,应考虑增加sort_buffer_size系统变量的值
mysql> show global status like 'select%';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| Select_full_join | 866 |
| Select_full_range_join | 14 |
| Select_range | 2740080 |
| Select_range_check | 0 |
| Select_scan | 2146004 |
+------------------------+---------+
Select_full_join:没有使用索引的联接的数量
Select_full_range_join :在引用的表中使用范围搜索的联接的数量
Select_range:利用第一个数据表上的某个区间而完成的多数据表联接操作的次数
Select_range_check:该变量记录了在联接时,对每一行数据重新检查索引的查询计划的数量,它的开销很大,如果该值较高或正在增加,说明一些查询没有找到好索引
Select_scan:通过对第一个数据表进行全表扫描而完成的多数据表联接操作的次数
排序sort_buffer,连接join_buffer
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
其中Seconds_Behind_Master大体认为是主从数据库的延时
select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctused from
(select 'SGA' name,(select sum(value/1024/1024) from v$sga) total,
(select sum(bytes/1024/1024) from v$sgastat where name='free memory')free from dual)
union
select name,total,round(used,2)used,round(total-used,2)free,round(used/total*100,2)pctused from (
select 'PGA' name,(select value/1024/1024 total from v$pgastat where name='aggregate PGA target parameter')total,
(select value/1024/1024 used from v$pgastat where name='total PGA allocated')used from dual);
NAME TOTAL USED FREE PCTUSED
------ ---------- ---------- ---------- ----------
PGA 600 326.46 273.54 54.41
SGA 1656.5625 1419.69 236.87 85.7
物理IO是ORACLE 内核从磁盘取得数据,服务器进程将行所在的数据块从数据文件中读入buffer cache,这个过程叫做物理读
逻辑IO是ORACLE 内核从内存取得数据,从buffer cache的块中读取行的过程,就是逻辑读
字典缓冲区命中率
库缓冲区命中率
重做日志缓冲区命中率
sql软硬解析占比比例
内存和磁盘排序占比比例
回滚段竞争占比比例
如对本文有疑问, 点击进行留言回复!!
一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起
网友评论