1.1 概述
脚本主要用于观测系统和MySQL性能信息。参数包括主要参数和辅助参数。
主要参数如下:
l系统性能信息相关:
n-l:查看系统平均负载。
n-c:CPU不同状态的时间片分配信息。
n-d:磁盘状态信息。要求必须输入磁盘名,如sda、sdb等。
n-s: 交换空间信息。
n-n:当前网络流量信息。要求必须输入接口名,如eth0、eth1等。
lMySQL性能相关:
n-com:insert, select, update, delete请求次数信息。
n-hit:Innodb缓冲池命中率。
n-innodb_rows:insert, select, update, delete行数信息。
n-innodb_pages:Innodb缓冲池页数信息。
n-innodb_data:Innodb数据信息。
n-innodb_log:Innodb日志信息。
n-Innodb_status:Innodb状态信息。
n-main_stat:Innodb主线程状态。
n-slave:从属服务器状态信息。
n-T:线程状态信息。
n-B:MySQL接收、发送的字节数信息。
n-rt:MySQL的响应时间信息。
l辅助参数如下:
n-t:设置显示状态时间。
n-i:设置显示时间间隔internal。以秒为单位。如不设置,默认为1s。
n-C:设置显示次数。如不设置,默认无显示次数上限。
n-nocolor:设置输出信息中消除颜色。
n-L:将结果输出至日志文件。要求必须输入日志文件路径及文件名。
n-logfile_by_day:与-L搭配使用,使得生成日志文件的后缀为'yyyy-mm-dd'。
lMySQL专用辅助参数:
n-P:设置用于MySQL连接的端口号。默认为3306。
n-S:设置用于MySQL连接的Socket文件名。
l其他:
n-sys: -t, -l, -c, -s
n-innodb: -t,-innodb_pages,-innodb_data,-innodb_log,-innodb_status
n-lazy: -t,-l,-c,-s,-com,-hit,-T
n-mysql: -t,-com,-hit,-T,-B
1.2 MySQL性能相关
1.2.1 -l
l信息来源:/proc/loadavg
l计算方式:
n1m:1分钟平均负载(大于CPU个数时颜色为红)
n5m:5分钟平均负载(大于CPU个数时颜色为红)
n15m:15分钟平均负载(大于CPU个数时颜色为红)
1.2.2 -c
l信息来源:/proc/stat
l计算方式:
n数据表示:
usys_cpu2[1]:从系统启动开始累积到当前时刻,用户态的CPU时间,不包含nice值为负的进程
usys_cpu2[2]:从系统启动开始累积到当前时刻,nice值为负的进程所占用的CPU时间
usys_cpu2[3]:从系统启动开始累积到当前时刻,核心时间
usys_cpu2[4]:从系统启动开始累积到当前时刻,除硬盘IO等待时间以外其它等待时间
usys_cpu2[5]:从系统启动开始累积到当前时刻,硬盘IO等待时间
usys_cpu2[6]:从系统启动开始累积到当前时刻,硬中断时间
usys_cpu2[7]:从系统启动开始累积到当前时刻,软中断时间
usys_cpu1[1]:从系统启动开始累积到上一时刻,用户态的CPU时间,不包含nice值为负的进程
usys_cpu1[2]:从系统启动开始累积到上一时刻,nice值为负的进程所占用的CPU时间
usys_cpu1[3]:从系统启动开始累积到上一时刻,核心时间
usys_cpu1[4]:从系统启动开始累积到上一时刻,除硬盘IO等待时间以外其它等待时间
usys_cpu1[5]:从系统启动开始累积到上一时刻,硬盘IO等待时间
usys_cpu1[6]:从系统启动开始累积到上一时刻,硬中断时间
usys_cpu1[7]:从系统启动开始累积到上一时刻,软中断时间
utotal 2=sys_cpu2[1]+sys_cpu2[2]+sys_cpu2[3]+sys_cpu2[4]+sys_cpu2[5]+sys_cpu2[6]+sys_cpu2[7]
utotal 1= sys_cpu1[1]+sys_cpu1[2]+sys_cpu1[3]+sys_cpu1[4]+sys_cpu1[5]+sys_cpu1[6]+sys_cpu1[7]
u以上数值均以jiffies为单位 1s=100jiffies
nusr = (sys_cpu2[1]+sys_cpu2[2]-sys_cpu1[1]-sys_cpu1[2]) / (total2-total1)×100+0.5
nsys = (sys_cpu2[3]+sys_cpu2[6] +sys_cpu2[7]-sys_cpu1[3]-sys_cpu1[6]-sys_cpu1[7]) / (total2-total1)×100+0.5
nidl = (sys_cpu2[4]-sys_cpu1[4]) / (total2-total1)×100+0.5
niow = (sys_cpu2[5]-sys_cpu1[5]) / (total2-total1)×100+0.5
1.2.3 -d
l信息来源:/proc/diskstats, /proc/stat
l计算方式:
n数据表示:
usys_io2[4]:从系统启动开始累积到当前时刻的读磁盘次数
usys_io2[5]:从系统启动开始累积到当前时刻的合并读磁盘次数
usys_io2[6]:从系统启动开始累积到当前时刻的读扇区次数,512bytes/sector
usys_io2[7]:从系统启动开始累积到当前时刻的读花费的毫秒数
usys_io2[8]:从系统启动开始累积到当前时刻的写磁盘次数
usys_io2[9]:从系统启动开始累积到当前时刻的合并写磁盘次数
usys_io2[10]:从系统启动开始累积到当前时刻的写扇区次数
usys_io2[11]:从系统启动开始累积到当前时刻的写花费的毫秒数
usys_io2[13]:从系统启动开始累积到当前时刻的花费在I/O操作上的毫秒数
usys_io2[14]:从系统启动开始累积到当前时刻的花费在I/O操作上的加权毫秒数
usys_io1[4]:从系统启动开始累积到上一时刻的读磁盘次数
usys_io1[5]:从系统启动开始累积到上一时刻的合并读磁盘次数
usys_io1[6]:从系统启动开始累积到上一时刻的读扇区次数
usys_io1[7]:从系统启动开始累积到上一时刻的读花费的毫秒数
usys_io1[8]:从系统启动开始累积到上一时刻的写磁盘次数
usys_io1[9]:从系统启动开始累积到上一时刻的合并写磁盘次数
usys_io1[10]:从系统启动开始累积到上一时刻的写扇区次数
usys_io1[11]:从系统启动开始累积到上一时刻的写花费的毫秒数
usys_io1[13]:从系统启动开始累积到上一时刻的花费在I/O操作上的毫秒数
usys_io1[14]:从系统启动开始累积到上一时刻的花费在I/O操作上的加权毫秒数
udeltams=1000×( total2-total1) / cpu个数 / 100 :internal时间内单个CPU 的工作毫秒数,1s=100jiffies
nr/s=1000×(sys_io2[4] – sys_io1[4] )/deltams
nw/s=1000×(sys_io2[8] – sys_io1[8] )/deltams
nrkB/s=1000.0×(sys_io2[6]-sys_io1[6])/deltams/2
nwkB/s=1000.0×(sys_io2[10]-sys_io1[10])/deltams/2
nqueue(平均队列长度)= sys_io2[14]-sys_io1[14]/deltams
nawait(平均每次I/O操作的等待时间)=(sys_io2[7]+sys_io2[11]-sys_io1[7]-sys_io1[11]) / (sys_io2[4]+sys_io2[8]-sys_io1[4]-sys_io1[8])
nsvctm(平均每次I/O操作的服务时间)=(sys_io2[13] –sys_io1[13]) / (sys_io2[4]+sys_io2[8]-sys_io1[4]-sys_io1[8])
n%util(I/O队列是非空的概率)=(sys_io2[13]– sys_io1[13] )/deltams
1.2.4 -s
l信息来源:/proc/vmstat
l计算方式:
n数据表示:
upswpin2:当前时刻把数据从磁盘交换区装到内存的数据量。
upswpout2:当前时刻把数据从内存装到磁盘交换区的数据量。
upswpin1:上一时刻把数据从磁盘交换区装到内存的数据量。
upswpout1:上一时刻把数据从内存装到磁盘交换区的数据量。
nsi(平均每秒把数据从磁盘交换区装到内存的数据量)=|pswpin2-pswpin1|/internal
nso(平均每秒把数据从内存装到磁盘交换区的数据量)=|pswpout2-pswpout1|/internal
1.2.5 -n
l信息来源:/proc/net/dev
l计算方式:
n数据表示:
urecv2:从系统启动开始累积到当前时刻接口收到的正确字节数。
usend2:从系统启动开始累积到当前时刻接口发送的正确字节数。
urecv1:从系统启动开始累积到上一时刻接口收到的正确字节数。
usend2:从系统启动开始累积到上一时刻接口发送的正确字节数。
nrecv=(recv2-recv1)/internal
nsend=(send2-send1)/internal
1.3 MySQL性能相关
lport:用于MySQL连接的端口号
lread_only:是否为只读。
lversion:版本号。
lbinlog_format:二进制日志文件的格式,基于语句、基于记录等。
lmax_binlog_cache_size:为二进制日志文件分配的内存。
lmax_binlog_size:如果二进制日志写入的内容超过给定值,日志就会发生滚动。
lmax_connect_errors:如果某一客户端尝试与MySQL服务器连接的次数超过该数目,则服务器阻止该客户端后面的连接。
lmax_connections:允许的并行客户端连接数目。
lmax_user_connections:任何给定的MySQL账户允许的最大同时连接数。
lopen_files_limit:操作系统允许mysqld打开的文件的数量。
lsync_binlog:binlog在每sync_binlog次写入后与硬盘同步。
ltable_definition_cache:可缓存的表定义信息数量。
ltable_open_cache:打开表的缓存数量。
lthread_cache_size:可重新利用保存在缓存中线程的数量。
linnodb_adaptive_flushing:设置是否允许MySQL服务器根据工作负载动态调整刷写InnoDB缓冲值中的脏页的速率。
linnodb_adaptive_hash_index:设置是否启用InnoDB的自适应hash索引。
linnodb_buffer_pool_instances:设置将InnoDB的缓冲池分隔为多少个区域。
linnodb_buffer_pool_size:设置InnoDB缓存表数据和索引的内存缓冲区大小,单位是字节。
linnodb_file_per_table:设置InnoDB表是否使用每表表空间数据文件(以.ibd结尾)分别存储每个表的数据和索引。如果使用了每表表空间数据文件,其将不再使用系统表空间(即共享表空间)。
linnodb_flush_log_at_trx_commit:设置InnoDB同步日志缓冲区(log buffer)数据至日志文件中的方式,以及刷写日志文件至磁盘的方式。其可接受的值中,“0”表示将日志缓冲区每秒一次地写入日志文件,并同时将日志文件刷写至磁盘中,但事务提交时不会采取任何动作;“1”是默认值,表示在有事务提交时将日志缓冲区写入日志文件,并同时将日志文件刷写至磁盘;“2”表示每事务提交或每秒一次将日志缓冲区写入日志文件,但不会同时执行日志文件的刷写操作。
linnodb_flush_method:有三个值,分别是fdatasync,O_DSYNC和O_DIRECT,其中fdatasync是默认值。它们控制了InnoDB刷新日志和数据的模式。
linnodb_io_capacity:设置InnoDB后台任务(如从缓冲池刷写页面或合并修改缓冲中的数据等)可执行的I/O操作上限。
linnodb_lock_wait_timeout:设置InnoDB中某事务试图访问一个由其它InnoDB事务加锁的行时其最长的等待时间,单位为秒钟,
linnodb_log_buffer_size:设置 InnoDB 用来往磁盘上的日志文件写操作的缓冲区的大小。
linnodb_log_file_size:日志组里每个日志文件的大小。
linnodb_log_files_in_group:日志组里日志文件的数目。
linnodb_max_dirty_pages_pct:设置InnoDB的缓冲池中脏页比例的上限。
linnodb_open_files:设置MySQL可同时打开的.ibd表空间文件的数量上限。
linnodb_read_io_threads:设置InnoDB为读操作启动的I/O线程数量。
linnodb_stats_on_metadata:设置使用SHOW TABLESTATUS或者SHOW INDEX这两个元数据语句时,或访问INFORMATION_SCHEMA中的TABLES或STATISTICS表时,InnoDB是否更新统计数据。默认为更新。禁用此功能可以加速访问有着大量的表或索引的数据库,也可能提升InnoDB表上查询操作执行计划(execution plan)的稳定性。
linnodb_thread_concurrency:设置InnoDB可在其内部并发运行的操作系统线程数量上限。多出的线程将被放置于FIFO队列进行等待,且不被计入并发运行线程数量。
linnodb_write_io_threads:设置InnoDB用于完成写操作的I/O线程数量。
1.3.1 -com
l信息来源:show global status
l计算方式:
n数据表示:
ucom_insert2:从系统启动开始累积到当前时刻服务器接收到的insert请求次数。批量操作只记一次。
ucom_insert1:从系统启动开始累积到上一时刻服务器接收到的insert请求次数。
ucom_update2:从系统启动开始累积到当前时刻服务器接收到的update请求次数。
ucom_update1:从系统启动开始累积到上一时刻服务器接收到的update请求次数。
ucom_delete2:从系统启动开始累积到当前时刻服务器接收到的delete请求次数。
ucom_delete1:从系统启动开始累积到上一时刻服务器接收到的delete请求次数。
ucom_select2:从系统启动开始累积到当前时刻服务器接收到的select请求次数。
ucom_select1:从系统启动开始累积到上一时刻服务器接收到的select请求次数。
nins=(com_insert2-com_insert1)/interval
nupd=(com_update2-com_update1)/interval
ndel=(com_delete2-com_delete1)/interval
niud=ins+upd+del
1.3.2 -hit
l信息来源:show global status
l计算方式:
n数据表示:
uInnodb_buffer_pool_read_requests2:从系统启动开始累积到当前时刻总共从缓冲池中缓存的页面中读取出的页数
uInnodb_buffer_pool_read_requests1:从系统启动开始累积到上一时刻总共从缓冲池中缓存的页面中读取出的页数
uInnodb_buffer_pool_reads2:从系统启动开始累积到当前时刻总共从磁盘中读取出的页数
uInnodb_buffer_pool_reads1:从系统启动开始累积到上一时刻总共从磁盘中读取出的页数
nlor=(Innodb_buffer_pool_read_requests2-Innodb_buffer_pool_read_requests1)/interval
nhit=[(Innodb_buffer_pool_read_requests2-Innodb_buffer_pool_read_requests1)-( Innodb_buffer_pool_reads2-Innodb_buffer_pool_reads1)]/interval/(Innodb_buffer_pool_read_requests2-Innodb_buffer_pool_read_requests1)
1.3.3 -innodb_rows
l信息来源:show global status
l计算方式:
n数据表示:
uInnodb_rows_inserted2:从系统启动开始累积到当前时刻执行insert操作插入的行数。
uInnodb_rows_inserted1:从系统启动开始累积到上一时刻执行insert操作插入的行数。
uInnodb_rows_updated2:从系统启动开始累积到当前时刻执行update操作更新的行数。
uInnodb_rows_updated1:从系统启动开始累积到上一时刻执行update操作更新的行数。
uInnodb_rows_deleted2:从系统启动开始累积到当前时刻执行delete操作删除的行数。
uInnodb_rows_deleted1:从系统启动开始累积到上一时刻执行delete操作删除的行数。
uInnodb_rows_read2:从系统启动开始累积到当前时刻执行select操作返回的行数。
uInnodb_rows_read1:从系统启动开始累积到上一时刻执行select操作返回的行数。
nins=(Innodb_rows_inserted2- Innodb_rows_inserted1)/interval
nupd=(Innodb_rows_updated2- Innodb_rows_updated1)/interval
ndel=(Innodb_rows_deleted2- Innodb_rows_deleted1)/interval
nread=(Innodb_rows_read2- Innodb_rows_read1)/interval
1.3.4 -innodb_pages
l信息来源:show global status
l计算方式:
n数据表示:
uInnodb_buffer_pool_pages_data:包含数据的页数,脏或干净。
uInnodb_buffer_pool_pages_free:空页数。
uInnodb_buffer_pool_pages_dirty:脏页数。
uInnodb_buffer_pool_pages_flushed2:当前时刻要求清空的缓冲池页数。
uInnodb_buffer_pool_pages_flushed1:上一时刻要求清空的缓冲池页数。
uinnodb_max_dirty_pages_pct:设置脏页数占数据页数比率的最大值。
ndata= Innodb_buffer_pool_pages_data
nfree= Innodb_buffer_pool_pages_free
ndirty= Innodb_buffer_pool_pages_dirty
nflush=(Innodb_buffer_pool_pages_flushed2- Innodb_buffer_pool_pages_flushed1)/interval
ndity%= Innodb_buffer_pool_pages_dirty/ Innodb_buffer_pool_pages_data
1.3.5 -innodb_data
l信息来源:show global status
l计算方式:
n数据表示:
uInnodb_data_fsyncs2:当前时刻Innodb进行fsync()操作的次数。单位是次。
uInnodb_data_fsyncs1:上一时刻Innodb进行fsync()操作的次数。单位是次。
uInnodb_data_reads2:当前时刻Innodb数据读取总数。单位是次。
uInnodb_data_reads1:上一时刻Innodb数据读取总数。单位是次。
uInnodb_data_writes2:当前时刻Innodb数据写入总数。单位是次。
uInnodb_data_writes1:上一时刻Innodb数据写入总数。单位是次。
uInnodb_data_read2: 当前时刻Innodb读取的总数据量。单位是字节。
uInnodb_data_read1: 上一时刻Innodb读取的总数据量。单位是字节。
uInnodb_data_written2:当前时刻innodb写入的总数据量。单位是字节。
uInnodb_data_written1:上一时刻innodb写入的总数据量。单位是字节。
nfsyncs=(Innodb_data_fsyncs2- Innodb_data_fsyncs1)/interval
nreads=(Innodb_data_reads2- Innodb_data_reads1)/interval
nwrites=(Innodb_data_writes2- Innodb_data_writes1)/interval
nread=( Innodb_data_read2- Innodb_data_read1)/interval
nwritten=( Innodb_data_written2- Innodb_data_written1)/interval
1.3.6 -innodb_log
l信息来源: show global status, show engine innodb status
l计算方式:
n数据表示:
uInnodb_os_log_fsyncs2 :当前时刻Innodb日志缓存区进行fsync()的总次数。单位是次。
uInnodb_os_log_fsyncs1 :上一时刻Innodb日志缓存区进行fsync()的总次数。单位是次。
uInnodb_os_log_written2:当前时刻写入日志文件的字节数。单位是字节。
uInnodb_os_log_written1:上一时刻写入日志文件的字节数。单位是字节。
ulog_bytes_written:Innodb写入日志文件的字节数。
ulog_bytes_flushed:Innodb日志缓冲池中的数据被刷新到日志文件中的字节数。
ulast_checkpoint:Innodb缓冲池中的数据的最后检查点。
uinnodb_log_file_size:日志组里每个日志文件的大小。
uinnodb_log_files_in_group:日志组里日志文件的数目。
nfsyncs= (Innodb_os_log_fsyncs2-Innodb_os_log_fsyncs1)/interval
nwritten=Innodb_os_log_written2- Innodb_os_log_written1)/interval
nuflush=log_bytes_written- log_bytes_flushed
nuckpt= log_bytes_written- last_checkpoint
nasyncs= (innodb_log_file_size×innodb_log_files_in_group-112×16) ×0.81×7/8
nsync=(innodb_log_file_size×innodb_log_files_in_group-112×16) ×0.81×15/16
nuckpt%= (log_bytes_written- last_checkpoint)/(innodb_log_file_size×innodb_log_files_in_group)
1.3.7 - innodb_status
l信息来源:show engine innodb status
l计算方式:
n数据表示:
uhistory_list:在回滚空间中的未清除事务数。随着事务的提交,它的值会增加;随着清除线程的运行,它的值会减小。
uread_views:Innodb内部打开了多少读视图。
uqueries_inside:Innodb内部有多少线程。
uqueries_queued:Innodb内部有多少线程在排队等待。
nlist= history_list
nview= read_views
ninside= queries_inside
nque= queries_queued
1.3.8 -main_stat
l信息来源:show engine innodb status
l计算方式:
n数据表示:
umain_thread_state:Innodb主线程当前的状态。
nstat= main_thread_state
1.3.9 -slave
l信息来源:show slave status
l计算方式:
n数据表示:
uSlave_IO_Running:从属服务器I/O线程是否被启动并成功地连接到主服务器上。
uSlave_SQL_Running:从属服务器SQL线程是否被启动。
uSeconds_Behind_Master:测量从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。
nio= Slave_IO_Running
nsql= Slave_SQL_Running
nseconds= Seconds_Behind_Master
1.3.10 -T
l信息来源:show global status
l计算方式:
nrun:激活的线程数。
ncon:打开的连接的数量。
ncre:创建用来处理连接的线程数。
ncac:线程缓存内的线程的数量。
1.3.11 -B
l信息来源:show global status
l计算方式:
n数据表示:
uBytes_received2:至当前时刻从所有客户端接收到的字节数。
uBytes_received1:至上一时刻从所有客户端接收到的字节数。
uBytes_sent2:至当前时刻发送给所有客户端的字节数。
uBytes_sent1:至上一时刻发送给所有客户端的字节数。
nrecv=(Bytes_received2- Bytes_received1)/interval
nsend=(Bytes_sent2- Bytes_sent1)/interval
1.3.12 -rt
l信息来源:/tmp/orzdba_tcprstat.$$.log
l计算方式:
ncount
navg
n95-avg
n99-avg