本文共 7784 字,大约阅读时间需要 25 分钟。
目录
MySQL- InnoDB监控
MySQL 在整体架构上分为 Server 层和存储引擎层。
其中 Server 层,包括连接器、查询缓存、分析器、优化器、执行器等,存储过程、触发器、视图和内置函数都在这层实现。数据引擎层负责数据的存储和提取,如 InnoDB、MyISAM、Memory 等引擎。在客户端连接到 Server 层后,Server 会调用数据引擎提供的接口,进行数据的变更。
单点(Single),适合小规模应用,复制(Replication),适合中小规模应用,集群(Cluster),适合大规模应用。
数据字典,数据库的元数据。
Mysql 5.7之前< 系统表空间+frm文件
Mysql8.0以后> 系统表空间
select c.column_name as '字段名',c.column_type as '数据类型',c.is_nullable as '允许为空',c.column_key as 'PK',c.column_comment as '字段说明'
from columns c inner join tables t on c.table_schema=t.table_schema and c.table_name=t.table_name where t.table_schema='itpuxdb' and t.table_name='itpux_m5';
-- standard monitor
show variables like '%innodb_status%';
set global innodb_status_output=on;
show engine innodb status\G
--lock monitor
show variables like '%innodb_status%' ;
set global innodb_status_output=on;
set global innodb_status_output_locks=on;
show engine innodb status\G
--tablespace monitor
select * from information_schema.TABLESPACES;
select * from information_schema.innodb_sys_tablespaces;
--table monitor
select * from information_schema.tables;
select * from information_schema.innodb_sys_tables;
select * from information_schema.innodb_sys_tablestats;
select TABLE_SCHEMA dbname,round(sum(DATA_LENGTH + INDEX_LENGTH)/1024/1024) "DBSIZE-BM" from information_schema.TABLES group by TABLE_SCHEMA;
行数和表大小 MB
select TABLE_SCHEMA,table_name,ROUND(TABLE_ROWS/10000) 万行,round(data_length/1024/1024) MB from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='itpuxdb' ;
表索引大小
select TABLE_SCHEMA,table_name,round(index_length/1024/1024) INDEXMB from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='itpuxdb';
行数和表大小和索引大小,总体大小
select TABLE_SCHEMA,table_name,ROUND(TABLE_ROWS/10000) 万行,round(data_length/1024/1024) DBMB, round(index_length/1024/1024) INDEXMB, round((index_length+data_length)/1024/1024) TOTALMB from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='itpuxdb' order by TOTALMB desc;
mysql日常操作中,妙用pager设置显示方式,可以大大提高工作效率。比如select出来的结果集超过几个屏幕,那么前面的结果一晃而过无法看到,这时候使用pager可以设置调用os的more或者less等显示查询结果。
pager less;
PAGER set to 'less'
2020-11-22 18:05:39 0x7fdb7838e700 INNODB MONITOR OUTPUT ##输出的时间。
=====================================
Per second averages calculated from the last 50 seconds //最近50秒内每2秒的平均值
BACKGROUND THREAD ##后台线程,可反映数据库的压力情况,测试环境毫无压力。
-----------------
srv_master_thread loops: 1 srv_active, 0 srv_shutdown, 1692 srv_idle
srv_master_thread log flush and writes: 1693
Innodb存储引擎室多线程的模型,因此其后台有多个不同的后台线程负责处理不同的任务。Master thread是一个非常核心的后台线程,主要负责缓冲池中的数据异步刷新到磁盘,保证数据的一致性。
Srv_master_thread loops是Master线程的循环次数,每次循环每次循环时会选择一种状态(active、shutdown,idle)执行, 其中Active,数量增加与数据变化有关,与查询无关,可以通过srv_active 和srv_idle 的差异看出;通过对比active 和idle的值,来获得系统整体负载情况,如果Active 的值越大,证明服务越繁忙。
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 9 //os wait 的信息 ,reservation count 表示InnoDB产生了多少次OS WAIT
OS WAIT ARRAY INFO: signal count 8 // 进行OS WAIT线程,接收到多少次信号(single)被唤醒,如果这个single数值越大,几十万或者几百万,可能是很多I/0等待或者是InnoDB争用问题(关于争用问题可能与OS调度有关,可以尝试减少innodb_thread_concurrency参数)
RW-shared spins 0, rounds 12, OS waits 6 // Mutex spin线程无法获取锁而进入Spin wait ,rounds是spin wait 进行轮询检查mutextes的次数,os wait 线程放弃spin-wait 进入挂起状态
RW-excl spins 0, rounds 0, OS waits 0 // RW-excl 排他锁
RW-sx spins 0, rounds 0, OS waits 0 /
Spin rounds per wait: 12.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx
lock table itpux_m1 write;
Query OK, 0 rows affected (0.00 sec)
表锁以后,下面监控马上就有显示了
------------
TRANSACTIONS
------------
Trx id counter 27160 ##事务标识 27160
Purge done for trx's n:o < 27159 undo n:o < 0 state: running but idle
Purge done for trx's n:o < 27159 ##已经完成的被清理的事务标识
History list length 1 ##没有被清理的事务数长度
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 421806966745824, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 27159, ACTIVE 5 sec
mysql tables in use 1, locked 1
1 lock struct(s), heap size 1136, 0 row lock(s)
MySQL thread id 9, OS thread handle 140329701377792, query id 130 localhost root
都是十个线程IO 一个更改线程,一个日志线程,4个读线程,4个写线程。
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
I/O thread 2 state: waiting for completed aio requests (read thread)
I/O thread 3 state: waiting for completed aio requests (read thread)
I/O thread 4 state: waiting for completed aio requests (read thread)
I/O thread 5 state: waiting for completed aio requests (read thread)
I/O thread 6 state: waiting for completed aio requests (write thread)
I/O thread 7 state: waiting for completed aio requests (write thread)
I/O thread 8 state: waiting for completed aio requests (write thread)
I/O thread 9 state: waiting for completed aio requests (write thread)
Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,
ibuf aio reads:, log i/o's:, sync i/o's:
Pending flushes (fsync) log: 0; buffer pool: 0
1125 OS file reads, 4076 OS file writes, 148 OS fsyncs
变更缓冲区
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
insert 0, delete mark 0, delete 0
discarded operations:
insert 0, delete mark 0, delete 0
Hash table size 553193, node heap has 0 buffer(s)
Hash table size 553193, node heap has 0 buffer(s)
Hash table size 553193, node heap has 0 buffer(s)
Hash table size 553193, node heap has 0 buffer(s)
Hash table size 553193, node heap has 75 buffer(s)
Hash table size 553193, node heap has 0 buffer(s)
Hash table size 553193, node heap has 0 buffer(s)
Hash table size 553193, node heap has 0 buffer(s)
LOG
Log sequence number 185680680 --表示当前的LSN
Log flushed up to 185680680 --表示刷新到重做日志文件的LSN
Pages flushed up to 185680680 --下一次即将做checkpoint lsn 的位置;在没有新数据的写入的情况下。
Last checkpoint at 185680671 --写入到磁盘后的LSN号(一个检查点表示一个数据和日志文件都处于一致状态的时刻,并且能用于恢复数据)
0 pending log flushes, 0 pending chkp writes
31 log i/o's done, 0.00 log i/o's/second
Log sequence number,Log flushed up to,Pages flushed up to一致即可。0 pending log flushes, 0 pending chkp writes是不是0。
Total large memory allocated 2198863872 # 为innodb 分配的总内存数(byte)
Dictionary memory allocated 229704
Buffer pool size 131056 ##131056*16K/1024=2G
Free buffers 129088
Database pages 1895
Old database pages 0
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1083, created 812, written 3776
0.00 reads/s, 0.00 creates/s, 0.05 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s ## #这行显示了innodb被读取,创建,写入了多少页,读/写页的值是指的从磁盘读到缓冲池的数据,或者从缓冲池写到磁盘中的数据,创建页指的是innodb在缓冲池中分配但没有从数据文件中读取内容的页,
LRU len: 1895, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
Buffer pool hit rate 1000 / 1000 ##缓冲池命中率,它度量自上次Innodb状态输出后到本次输出这段时间内的命中率。
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
0 read views open inside InnoDB
Process ID=5534, Main thread ID=140328258492160, state: sleeping
Number of rows inserted 358, updated 300000, deleted 0, read 600465 ##多少行被插入,更新,删除,读取。
0.18 inserts/s, 0.00 updates/s, 0.00 deletes/s, 833.50 reads/s ##这行显示了对应上面一行的每秒平均值,如果想查看innodb有多少工作量在进行,那么这两行是很好的参考值
----------------------------
END OF INNODB MONITOR OUTPUT
END OF INNODB MONITOR OUTPUT #要注意了,如果看不到这行输出,可能是有大量事务或者是有一个大的死锁截断了输出信息
转载地址:http://zabai.baihongyu.com/