1 简介
Innotop是一个由perl语言编写的MySQL监控工具,该工具是交互式的操作界面,以视图的形式不断获取数据库的运行状态。它大致可以监控如下几个方面的运行状态数据:
- 查看当前InnoDB的全部事务列表
- 查看当前正运行着的查询语句列表
- 查看当前锁和锁等待列表
- 查看服务器状态和变量的摘要信息,以及状态变量数值的相对变化幅度
- 查看复制状态信息,将主库和从库的状态一并显示
2 安装
- Innotop的代码已经从googlecode迁移到github上,程序下载路径:https://codeload.github.com/innotop/innotop/zip/master
- 下载并解压程序包
[root@localhost ~]# wget
https://codeload.github.com/innotop/innotop/zip/master
......
2019-12-26 07:00:33 (14.4 KB/s) - ‘master’ saved [203606/203606]
[root@localhost ~]# ll master
-rw-r--r-- 1 root root 203606 Dec 26 07:00 master
[root@localhost ~]# unzip master
......
[root@localhost ~]# cd innotop-master/
[root@localhost innotop-master]# ll
total 572
-rw-r--r-- 1 root root 19517 Dec 19 2018 Changelog
-rw-r--r-- 1 root root 18092 Dec 19 2018 COPYING
drwxr-xr-x 2 root root 107 Dec 19 2018 debian
-rwxr-xr-x 1 root root 457398 Dec 19 2018 innotop
-rw-r--r-- 1 root root 4603 Dec 19 2018 innotop.spec
-rw-r--r-- 1 root root 2379 Dec 19 2018 INSTALL
-rw-r--r-- 1 root root 16622 Dec 19 2018 LICENSE
-rw-r--r-- 1 root root 584 Dec 19 2018 Makefile.PL
-rw-r--r-- 1 root root 89 Dec 19 2018 MANIFEST
-rw-r--r-- 1 root root 713 Dec 19 2018 README.md
-rw-r--r-- 1 root root 39804 Dec 19 2018 snapshot_queries.png
drwxr-xr-x 2 root root 278 Dec 19 2018 t
- 编译安装
# 安装依赖包
[root@hell innotop-master]# yum install -y perl-DBD-MySQL perl-TermReadKey perl-DBI perl-Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
......
# 编译
[root@localhost innotop-master]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for innotop
# 显示最后命令的退出状态,0表示没有错误,其他表示有错误
[root@localhost innotop-master]# echo $?
0
[root@localhost innotop-master]# make install
cp innotop blib/script/innotop
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/innotop
Manifying blib/man1/innotop.1
Installing /usr/local/share/man/man1/innotop.1
Installing /usr/local/bin/innotop
Appending installation info to /usr/lib64/perl5/perllocal.pod
[root@localhost innotop-master]# echo $?
0
- 查看版本信息确认是否安装成功
[root@localhost innotop-master]# innotop --version
innotop Ver 1.12.0
3命令选项
- 在命令行使用innotop --help查看命令行的帮助选项,这些选项用于辅助如何进入交互式界面以及进入之后如何显示监控数据等,如下:
[root@hells ~]# innotop --help
Usage: innotop <options> <innodb-status-file>
--askpass Prompt for a password when connecting to MySQL
--[no]color -C Use terminal coloring (default)
--config -c Config file to read
--count Number of updates before exiting
--delay -d Delay between updates in seconds
--help Show this help message
--host -h Connect to host
--[no]inc -i Measure incremental differences
--mode -m Operating mode to start in
--nonint -n Non-interactive, output tab-separated fields
--password -p Password to use for connection
--port -P Port number to use for connection
--skipcentral -s Skip reading the central configuration file
--socket -S MySQL socket to use for connection
--spark Length of status sparkline (default 10)
--timestamp -t Print timestamp in -n mode (1: per iter; 2: per line)
--user -u User for login if not current user
--version Output version information and exit
--write -w Write running configuration into home directory if no config files were loaded
- 使用innotop连接数据库,进入交互式操作界面。之后使用"?" 可以查看交互式帮助选项,如下:
[root@localhost innotop-master]# innotop -uhell -pdba -h172.18.0.10 -P3306
然后敲入“?”,进入交互式帮助选项
……
Switch to a different mode:
A Dashboard I InnoDB I/O Info Q Query List
B InnoDB Buffers K InnoDB Lock Waits R InnoDB Row Ops
C Command Summary L Locks S Variables & Status
D InnoDB Deadlocks M Replication Status T InnoDB Txns
F InnoDB FK Err O Open Tables U User Statistics
Actions:
d Change refresh interval q Quit innotop
k Kill a query's connection r Reverse sort order
n Switch to the next connection s Choose sort column
p Pause innotop x Kill a query
Other:
TAB Switch to the next server group / Quickly filter what you see
! Show license and warranty = Toggle aggregation
# Select/create server groups @ Select/create server connections
$ Edit configuration settings \ Clear quick-filters
Press any key to continue
- 使用innotop连接数据库,进入交互式操作界面后,可输入不同工作模式的快捷键,进行切换工作模式。如输入大写的"Q"字母,进入交互界面的Query List工作模式。
- 在命令下直接通过-m选项指定进入的模式,如在命令行使用命令"innotop -uhell -pdba -h172.18.0.10 -P3306 -mQ"可直接进入交互界面的Query List工作模式,而不用先进入默认的交互式操作界面,再进行切换到Query List工作模式中。
4 工具演示
本节内容将连接数据库服务器,进入交互式选项的工作模式,演示和讲解重要的工作模式。首先,通过命令"innotop -uhell -pdba -h172.18.0.10 -P3306 -d 5"进入交互界面,命令中的-u为用户,-p为密码,-h为数据库服务器的IP地址,-P为数据库端口,-d 5为每隔5s进行刷新监控项,如下图所示:
图1 进入Innotop交互界面
其他准备工作,使用sysbench对172.18.0.10主机上数据库进行压测。
# 进行sysbench造数据
[root@hells ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-db=sbtest --mysql-host=172.18.0.10 --mysql-user=hell --mysql-password=dba --mysql-port=3306 --mysql_storage_engine=Innodb --tables=10 --table_size=10000 prepare
# 开启5个并发进行压测
[root@hells ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-db=sbtest --mysql-host=172.18.0.10 --mysql-user=hell --mysql-password=dba --mysql-port=3306 --mysql_storage_engine=Innodb --tables=10 --table_size=10000 --threads=5 --time=3600 --report-interval=10 --rand-type=uniform run
- Dashboard(仪表盘)
在交互式界面,默认进入仪表盘工作模式,在切换至其他工作模式后,使用大写的"A"字母进入该工作模式或者在非交互式模式下使用-m选项指定大写的"A"字母即可进入该工作模式,如下图所示:
图2 仪表盘
输出信息的含义如下:
-
- Uptime:当前MySQL Server持续运行了多长时间,上图12d表示12天
- QPS:当前数据库中的QPS
- Cxns:当前数据库中的客户端连接数
- Run:当前数据库中正在执行查询(Query状态的)的客户端连接数
- Miss:查询未命中buffer pool缓存的次数
- Lock:发生锁等待的数量
- Tbls:历史打开表数量,从状态变量Open_tables获取值
- InnoDB I/O Info(InnoDB I/O线程信息)
进入交互式界面之后,使用大写的"I"字母或者在非交互式模式下使用-m选项指定大写的"I"字母即可进入该工作模式,如下图所示:
图3 InnoDB I/O线程信息
输出信息的含义如下:
-
- I/O threads:显示当前的IO相关的线程状态信息
- Pending I/O:显示当前处于Pending状态的I/O操作信息
- File I/O Misc:文件I/O相关的操作统计信息(包含所有数据文件的文件I/O操作)
- Log Statistics:redo log的当前LSN号、已经刷新到磁盘的LSN号、最近一次checkpoint的LSN号,以及redo log的总IO数量,平均每秒IO数量
- Query List(查询语句列表信息)
进入交互式界面之后,使用大写的"Q"字母或者是非交互式模式下使用-m选项指定大写的"Q"字母即可进入该工作模式,如下图示:
图4 查询语句列表信息
输出信息的含义如下:
-
- 统计信息头部部分
- When:为now表示当前实时的统计信息,为Total表示历史总的统计信息
- Load:当前数据库实例的CPU负载
- Cxns:当前数据库实例中的客户端连接数
- QPS:当前数据库实例中的QPS
- Slow:当前数据库实例中的慢查询数量
- Se/In/Up/De%:增删改查比例
- QCacheHit:QC 命中率
- KCacheHit:索引缓存命中率
- BpsIn:读入到buffer pool中的数据量
- BpsOut:从buffer pool中读出的数据量
- 查询列表部分(通过执行show full processlist语句抓取)
- Cmd:语句的command类型
- ID:查询线程ID
- State:查询线程状态
- User:查询线程用户
- Host:查询线程主机名
- DB:查询线程默认数据库名
- Time:查询线程处于某个状态的持续时间
- Query:查询线程当前正在执行的SQL语句文本
- 统计信息头部部分
- InnoDB Buffers(InnoDB buffer pool信息)
进入交互式界面之后,使用大写的"B"字母或者是非交互式模式下使用-m选项指定大写的"B"字母即可进入该工作模式,如下图所示:
图5 InnoDB buffer pool信息
输出信息的含义如下:
-
- Buffer Pool部分
- Size:buffer pool中总的页数,可以从状态变量Innodb_buffer_pool_pages_total抓取(该值会按照1024的倍数进行除法计算,并使用K/M等单位进行计量,例如:该库总有6400个页,计算公式:6400/1024=6.35K)
- Free Bufs:空闲的buffer pool页数,可以从状态变量Innodb_buffer_pool_pages_free抓取
- Pages:buffer pool中数据占用的页数,可以从状态变量Innodb_buffer_pool_pages_data抓取
- Dirty Pges:buffer pool中的脏页数,可以从状态变量Innodb_buffer_pool_pages_dirty抓取
- Hit Rate:buffer pool命中率
- Page Statistics部分
- Reads:通过操作InnoDB表引起的从InnoDB缓冲池读取数据涵盖的页数,即,在对表执行读取操作时,直接从innodb buffer pool中读取返回数据的页数,可以从状态变量Innodb_pages_read抓取
- Writes:通过操作InnoDB表引起的数据写入涵盖的页数,即向InnoDB表中写入的页数,可以从状态变量Innodb_pages_written抓取
- Created:在InnoDB表中创建的页数量,需要物理扩展表空间文件大小,可以从状态变量Innodb_pages_created抓取
- Reads/Sec:对应Reads值的每秒读取页数
- Writes/Sec:对应Writes值的每秒写入页数
- Creates/Sec:对应Created值的每秒创建页数
- Insert Buffers部分
- 插入缓冲相关的统计信息
- Adaptive Hash Index部分
- 自适应hash索引相关的统计信息
- Buffer Pool部分
- InnoDB Row Ops(InnoDB DML行操作信息以及信号量信息)
进入交互式界面之后,使用大写的"R"字母或者是非交互式模式下使用-m选项指定大写的"R"字母即可进入该工作模式,如下图所示:
图6 InnoDB DML行操作信息以及信号量信息
输出信息的含义如下:
-
- InnoDB Row Operations部分
- InnoDB的增删改查行数统计信息
- Row Operation Misc部分
- InnoDB 查询队列、内部的查询数量,read view数量,主线程状态信息
- InnodbDB Semaphores部分
- InnoDB 的读写信号量统计信息
- InnoDB Wait Array
- InnoDB 内部的等待数组信息
- InnoDB Row Operations部分
- Command Summary(查看command状态变量信息)
进入交互式界面之后,使用大写的"C"字母或者是非交互式模式下使用-m选项指定大写的"C"字母即可进入该工作模式,如下图所示:
图7 查看command状态变量信息
输出信息的含义如下:
-
- Command Summary:MySQL 的查询command状态变量统计信息
- Name:Command 状态变量名称
- Values:对应Name的状态值
- 第一个Pct:对应的Name的command状态变量在整个command操作中的占比
- Last Incr:与上一次抓取状态变量值相比,本次抓取值增加了多少
- 第二个Pct:与上一次抓取状态变量值相比,本次抓取增加的值在所有command状态变量增加值中的占比
- Command Summary:MySQL 的查询command状态变量统计信息
- Locks(查看Server层锁信息)
进入交互式界面之后,使用大写的"L"字母或者是非交互式模式下使用-m选项指定大写的"L"字母即可进入该工作模式,如下图所示:
图8 查看Server层锁信息
输出信息的含义如下:
-
- InnoDB Locks:InnoDB 的记录锁统计信息
- ID:正在等待锁的线程ID
- Type:正在等待的锁类型
- Waiting:正在等待多少把锁
- Wait:锁等待时间(时间格式)
- Active:线程活跃时间
- Mode:锁模类型
- DB:正在等待的锁所在的数据库
- Table:正在等待的锁所在的表
- Index:正在等待的锁所在的索引
- Ins Intent:插入意向锁的个数
- Special:特殊信息,对锁进行描述,例如:rec but not gap,表示是记录锁,但不是范围锁
- InnoDB Locks:InnoDB 的记录锁统计信息
- Replication Status(查看复制状态信息)
进入交互式界面之后,使用大写的"M"字母或者是非交互式模式下使用-m选项指定大写的"M"字母即可进入该工作模式,如下图所示:
图10 查看复制状态信息
输出信息的含义如下:
-
- Slave SQL Status 部分:主要是SQL线程的信息
- Channel:复制通道名称
- Master:主库IP
- Master UUID:主库UUID
- On?:SQL线程状态是否为Yes
- TimeLag:SQL线程延迟时间
- Catchup:SQL线程预计追赶时间
- Relay Pos:Relay_Log_Pos的值
- Last Error:最近一次发生错误的错误信息文本
- Retrieved GTID Set:当前已经接收到的binlog对应的GTID SET
- Executed GTID Set:当前已经重放到的binlog对应的GTID SET
- Slave I/O Status部分
- Channel:复制通道名称
- Master:主库IP
- Master UUID:主库UUID
- On?:I/O线程状态是否为Yes
- File:I/O线程当前正在读取的主库binlog file名称
- Relay Size:当前Relay Log占用的磁盘空间大小(Relay_Log_Space的值)
- Pos:I/O线程当前读取的binlog file对应主库的position(Read_Master_Log_Pos的值)
- State:当前I/O线程的工作状态
- Master Status 部分
- Channel:复制通道名称
- File:从库当前的binlog file名称
- Position:从库当前的binlog position
- Binlog Cache:从库当前的binlog cache使用率
- Executed GTID Set:从库当前的最新事务对应的GTID SET
- Server UUID:从库的UUID
- Slave SQL Status 部分:主要是SQL线程的信息
- InnoDB Txns(查看InnoDB 事务信息)
进入交互式界面之后,使用大写的"T"字母或者是非交互式模式下使用-m选项指定大写的"T"字母即可进入该工作模式,如下图所示:
图11 查看InnoDB 事务信息
输出信息的含义如下:
-
- 头部信息:SHOW ENGINE INNODB STATUS语句输出的TRANSACTIONS中事务相关的统计信息
- 主体统计信息:
- ID:客户端线程ID
- User:客户端连接使用的用户名
- Host:客户端IP
- Txn Status:客户端正在执行的事务的状态
- Time:客户端线程处于某个状态的时长
- Undo:事务产生的undo log数量
- Query Text:客户端线程正在执行的SQL语句文本
- Open Tables(查看处于打开状态的表清单)
- 进入交互式界面之后,使用大写的"O"字母或者是非交互式模式下使用-m选项指定大写的"O"字母即可进入该工作模式,如下图所示:
图12 查看处于打开状态的表清单
输出信息的含义如下:
-
- Open Tables:查看当前处于打开状态的表
- DB:数据库名称
- Table:表名
- In Use:使用次数
- Locked:是否被显式加表级锁
- Open Tables:查看当前处于打开状态的表
工具是辅助我们工作很重要的一部分,我们也要学会借用工具的力量把我们从重复枯燥的工作中释放出来,把时间花在更重要的事情上。沃趣Qfusion数据库运维平台包含快速申请数据库资源、备份与迁移、主备切换、监控告警、智能巡检、租户隔离等功能,感兴趣的可以关注下。