mysqlreport安装&使用
2020-12-17
mysql命令行中经常使用下面的指令来获取当前数据库的实时状态:
mysql>show status;
mysql>show innodb status;
但是他们的显示结果不太友好,我们需要更好的更加人性化的分析结果,而不是堆出来一堆数字。mysqlreport是一个第三方的Mysql状态报告工具,它把mysql的show status 和 show innodb status的结果进行一系列的后期处理,让可读性更强,更友好。 下面是mysqlreport的安装过程:
MySQLReport 是用perl语言编写,所以想要运行它首先需要安装perl环境;它还要与MySQL数据库连接,所以还需要安装数据库接口 DBI 和 数据库驱动 DBD-MySQL 。
安装DBI
yum -y install perl-DBI
安装DBD-mysql
yum -y install perl-DBD-MySQL
安装&运行mysqlreport
#下载mysqlreport tgz
wget http://pkgs.fedoraproject.org/repo/pkgs/mysqlreport/mysqlreport-3.5.tgz/33a345f5e2c89b083a9ff0423f7fd7b4/mysqlreport-3.5.tgz#解压到目录mysqlreport
tar -zxvf download/mysqlreport-3.5.tgz -C mysqlreport/
#使用mysqlreport收集信息
./mysqlreport --user=root --password=123456 --port 3306 --host=101.133.239.204 --outfile=/usr/local/mysqlreport/report/mysqlreport20201217.txt
mysqlreport20201217.txt内容
MySQL 8.0.21 uptime 8 22:24:56 Thu Dec 17 14:36:11 2020__Key_________________________________________________________________
Buffer used0 of 8.00M %Used: 0.00
Current 1.46M %Usage: 18.24Write hit0.00%
Read hit 0.00%__ Questions ___________________________________________________________
Total46.30k 0.1/s
Com_25.05k 0.0/s %Total: 54.09DMS16.45k 0.0/s 35.54COM_QUIT6.60k 0.0/s 14.25
-Unknown 1.80k 0.0/s 3.88Slow10 s 0 0/s 0.00 %DMS: 0.00 Log:
DMS16.45k 0.0/s 35.54
SELECT 16.43k 0.0/s 35.50 99.88
UPDATE 17 0.0/s 0.04 0.10
INSERT 2 0.0/s 0.00 0.01
REPLACE 0 0/s 0.00 0.00
DELETE 0 0/s 0.00 0.00Com_25.05k 0.0/s 54.09set_option24.05k 0.0/s 51.95show_status689 0.0/s 1.49show_variab43 0.0/s 0.09__SELECT andSort _____________________________________________________
Scan6.34k 0.0/s %SELECT: 38.59Range0 0/s 0.00
Full join 9 0.0/s 0.05Rangecheck 0 0/s 0.00
Full rng join 0 0/s 0.00Sort scan123 0.0/s
Sort range0 0/s
Sort mrg pass0 0/s
__TableLocks _________________________________________________________
Waited0 0/s %Total: 0.00Immediate710 0.0/s
__ Tables ______________________________________________________________Open 360 of 4000 %Cache: 9.00Opened488 0.0/s
__ Connections _________________________________________________________Max used 86 of 100 %Max: 86.00Total8.16k 0.0/s
__ CreatedTemp________________________________________________________Disk table 0 0/sTable 1.44k 0.0/s Size: 16.0MFile 9 0.0/s
__ Threads _____________________________________________________________
Running2 of 31Cached55 of 100 %Hit: 98.95Created86 0.0/s
Slow0 0/s
__ Aborted _____________________________________________________________
Clients3.13k 0.0/s
Connects171 0.0/s
__ Bytes _______________________________________________________________
Sent21.99M 28.5/s
Received10.60M 13.7/s
__ InnoDB Buffer Pool __________________________________________________
Usage74.61M of 128.00M %Used: 58.29
Read hit 99.99%Pages
Free3.42k %Total: 41.71Data4.77k 58.18 %Drty: 0.00Misc9 0.11Latched0.00Reads50.57M 65.5/sFrom file 2.81k 0.0/s 0.01Ahead Rnd0 0/s
Ahead Sql0/s
Writes1.47M 1.9/s
Flushes4.66k 0.0/s
Wait Free0 0/s
__ InnoDB Lock _________________________________________________________
Waits4 0.0/sCurrent 0Time acquiring
Total204033ms
Average51008msMax 51012ms
__ InnoDB Data, Pages, Rows ____________________________________________
Data
Reads3.23k 0.0/s
Writes23.27k 0.0/s
fsync5.74k 0.0/s
Pending
Reads0Writes0fsync0Pages
Created2.44k 0.0/sRead 3.14k 0.0/s
Written5.49k 0.0/s
Rows
Deleted0 0/s
Inserted393.22k 0.5/sRead 3.84G 5.0k/s
Updated131.08k 0.2/s
InnoDB Lock 可通过以下方式产生
打开一个navicat窗口(窗口1),输入以下命令使得该窗口提交命令后不自动提交
set @@autocommit = 0; #0为不自动提交 1位自动提交select @@autocommit;
窗口1 执行以下语句
update student set age=14 where id = 00000000000000000001;
在新窗口(窗口3)执行以下语句查看事务表信息表信息
select * from information_schema.INNODB_TRX;
新建窗口(窗口2),输入更改语句,引起所冲突
update student set age=14 where id = 00000000000000000001;
窗口3执行以下语句查看事务表信息表信息,可以看到trx_state为LOCK WAIT。
LOCK WAIT有时间超时设置,超过会回滚
当窗口1 执行命令 commit后事务结束,5545这条记录也会清空,若5447没有超时,也会执行成功,故这条记录也会清空。
参考
InnoDB Lock