Innodb由于支持事务操作,是mysql中使用最多的存储引擎,所以如何监控Innodb存储引擎以进行性能优化是在使用mysql过程中遇到最多的,那么如何进行监控呢?
-- 显示innodb存储引擎状态的统计和配置信息 show engine innodb status; 展示的主要内容有 ----------------- BACKGROUND THREAD --后台线程 ----------------- srv_master_thread loops: 19610306 srv_active, 0 srv_shutdown, 9705136 srv_idle --统计Innodb启动后的活动 srv_master_thread log flush and writes: 29312902 --写入和刷新日志的次数 ---------- SEMAPHORES --信号量包含了线程等待互斥锁或读写锁的信息 ---------- OS WAIT ARRAY INFO: reservation count 52795642 --os等待数组信息,分配插槽的次数 OS WAIT ARRAY INFO: signal count 57522728 --os等待数组信息,线程通过数组得到信号的次数 RW-shared spins 0, rounds 77349143, OS waits 9180114 --共享锁期间,读写锁存器上自旋等待个数,自旋循环迭代次数以及操作系统调用的等待个数 RW-excl spins 0, rounds 179767865, OS waits 2534243 --排他锁期间,读写锁存器上自旋等待个数,自旋循环迭代次数以及操作系统调用的等待个数 RW-sx spins 2068750, rounds 40171680, OS waits 844522 --共享排他锁期间,读写锁存器上自选等待个数,自旋循环迭代次数以及操作系统调用的等待个数 Spin rounds per wait: 77349143.00 RW-shared, 179767865.00 RW-excl, 19.42 RW-sx --对于每一个互斥锁,操作系统调用等待的每一个自旋循环迭代个数 ------------ TRANSACTIONS --包含所有当前正在执行的事务的信息 ------------ Trx id counter 1888483436 --当前事务id Purge done for trx s n:o < 1888483436 undo n:o < 0 state: running but idle --所有编号小于1888483436的事务都已经从历史记录列表中清除了,清除旧的MVCC行时所用的事务id,这个值与当前事务ID进行比较,就可以知道有多少老版本的数据未被清除 History list length 17 --历史列表的长度,位于Innodb数据文件的撤销空间里的页面的数目,如果事务执行了更新并提交,该数目就会增加,当清理进程移除旧版本数据时,该数目会减少 LIST OF TRANSACTIONS FOR EACH SESSION: 当前事务列表 ---TRANSACTION 422068961001072, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068960999248, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961005632, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961013840, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961012016, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961010192, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961001984, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961000160, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961017488, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961011104, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961012928, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961004720, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961002896, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961003808, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 422068961007456, not started 0 lock struct(s), heap size 1136, 0 row lock(s) -------- FILE I/O --各种IO操作的Innodb内部线程以及执行了多少次IO操作 -------- -- 有四个线程 -- insert buffer thread 负责插入缓冲合并 -- log thread 负责异步刷日志 -- read thread 执行预读操作以尝试预先读取Innodb预感需要的数据 -- write thread 刷脏缓冲 I/O thread 0 state: waiting for completed aio requests (insert buffer thread) --IO线程的状态 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 -- 挂起操作的信息,aio是指异步io 83934578288 OS file reads, 282688772 OS file writes, 190348192 OS fsyncs --innodb启动后的总统计信息 984.40 reads/s, 16384 avg bytes/read, 10.15 writes/s, 9.12 fsyncs/s --最后一次显示后的总统计信息 ------------------------------------- INSERT BUFFER AND ADAPTIVE HASH INDEX --插入缓冲区与自适应散列统计信息 ------------------------------------- Ibuf: size 1, free list len 3078, seg size 3080, 8815726 merges --在页中插入缓冲索引树的当前大小,空闲列表的长度,在包含插入缓冲树与头信息的文件段中已分配页的个数,被合并页的个数 merged operations: insert 6898371, delete mark 38430046, delete 1226485 --通过类型区分,索引页被执行合并操作的次数 discarded operations: insert 1019, delete mark 0, delete 0 --无须合并丢弃操作的数量 Hash table size 34673, node heap has 1 buffer(s) Hash table size 34673, node heap has 74 buffer(s) Hash table size 34673, node heap has 1 buffer(s) Hash table size 34673, node heap has 1 buffer(s) Hash table size 34673, node heap has 1 buffer(s) Hash table size 34673, node heap has 2 buffer(s) Hash table size 34673, node heap has 28 buffer(s) Hash table size 34673, node heap has 7 buffer(s) 5203.54 hash searches/s, 128.14 non-hash searches/s --成功使用自适应散列索引查找的数量,当不能使用自适应索引时向下搜索B树的次数 --- LOG --Innodb日志中活动信息 --- Log sequence number 319041331834 --当前日志序号 Log flushed up to 319041331699 -- 日志已经刷到的位置 Pages flushed up to 319033170877 Last checkpoint at 319033170877 -- 上一个检查点,当前日志序列号LSN 0 pending log flushes, 0 pending chkp writes 169033177 log i/o's done, 8.92 log i/o's/second --挂起的日志写入次数,挂起的检查点写入个数,innodb启动后的IO操作个数,从最近一次显示之后的每秒IO操作个数 ---------------------- BUFFER POOL AND MEMORY --Innodb缓冲池与内存使用情况 ---------------------- Total large memory allocated 137428992 --分配的内存 Dictionary memory allocated 1204989 --被数据字典表与索引对象所占空间的字节数 Buffer pool size 8191 --缓冲池个数 Free buffers 1024 --空闲缓冲区个数 Database pages 7052 --当前缓冲区LRU队列的长度(分配用来存储数据库页的页数) Old database pages 2583 --旧的LRU队列的长度 Modified db pages 530 --需要刷新的页面的数量(脏数据库页数) Pending reads 0 --挂起读操作的个数 Pending writes: LRU 0, flush list 0, single page 0 --通过LRU算法,等待刷新的页数 Pages made young 983912385, not young 304833753259 --因为最近第一次被访问时,变成新页面的数目和没有变成新页面的数目 1.54 youngs/s, 16246.04 non-youngs/s -- 上述两个值每秒的速率 Pages read 83934649301, created 4135172, written 103030852 --读操作的页面数目,在缓冲区中创建但是没有读取的页面数目,写操作的页面数目 984.40 reads/s, 0.17 creates/s, 1.15 writes/s -- 上述值美妙的速率 Buffer pool hit rate 972 / 1000, young-making rate 0 / 1000 not 478 / 1000 --读取到的页面数与获得的缓冲池页面的比例,变为新页面的页面数与获得缓冲池页面的比例,没有变为新页面的页面数与获得缓冲池页面的比例 Pages read ahead 913.79/s, evicted without access 5.60/s, Random read ahead 0.00/s --预读的速率与不通过访问剔除的预读页面的个数 LRU len: 7052, unzip_LRU len: 0 --LRU列表的长度,unzip_LRU列表的长度 I/O sum[4121]:cur[0], unzip sum[0]:cur[0] --IO操作的次数:当前间隔的IO -------------- ROW OPERATIONS --行操作 -------------- 0 queries inside InnoDB, 0 queries in queue --当前有多少个正在执行的查询,在innodb_thread_concurrency队列中的查询个数 0 read views open inside InnoDB --只读视图的数量 Process ID=1543, Main thread ID=140593683990272, state: sleeping --线程id以及状态 Number of rows inserted 56092883, updated 133093048, deleted 40729879, read 477150639699 --从innodb启动后,插入、更新、删除、读取的行数 0.19 inserts/s, 7.73 updates/s, 0.00 deletes/s, 138100.85 reads/s -- 速率
<!-- more -->
-- 展示Innodb的互斥体信息 show engine innodb mutex; Type Name Status InnoDB rwlock: dict0dict.cc:2782 waits=4 InnoDB rwlock: dict0dict.cc:1228 waits=80 InnoDB rwlock: log0log.cc:846 waits=75 InnoDB sum rwlock: buf0buf.cc:1460 waits=11 -- name列显示了创建互斥体的源文件和行号 -- status列显示了互斥体在操作系统上的等待次数
show status like 'innodb%log%' Variable_name Value Innodb_log_waits 0 日志文件太小时,操作必须等待日志刷新的等待时间计数器,该值如果长期大于0,可以适当增加日志文件大小 Innodb_log_write_requests 4539 日志写入请求的数量 Innodb_log_writes 22 数据被写入日志的次数 Innodb_os_log_fsyncs 1020 操作系统文件同步的数量(fsync()方法调用) Innodb_os_log_pending_fsyncs 0 阻塞的文件同步请求的数量,如果该值开始增长并长期大于0,需要检查磁盘访问问题 Innodb_os_log_pending_writes 0 阻塞的日志写请求的次数,如果该值开始增长并长期大于0,需要检查磁盘访问问题 Innodb_os_log_written 2855424 写入日志中的字节总量 Innodb_available_undo_logs 128
缓冲池是Innodb缓存频繁访问数据的地方,对缓冲池内数据的任何更新也会被缓存
-- 可以查看存储引擎的统计信息,其中包含有缓冲池的信息 show engine innodb status; 截取出缓冲池的信息来进行分析 ---------------------- BUFFER POOL AND MEMORY ---------------------- Total large memory allocated 137428992 Dictionary memory allocated 223164 Buffer pool size 8191 Free buffers 7374 空的且可用于缓冲数据的缓冲段个数 Database pages 809 Old database pages 299 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 503, created 306, written 2534 0.00 reads/s, 0.00 creates/s, 0.00 writes/s No buffer pool page gets since the last printout Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 809, unzip_LRU len: 0 I/O sum[0]:cur[0], unzip sum[0]:cur[0]
在查看一下缓冲区相关的变量
show status like 'innodb%buf%' Variable_name Value Innodb_buffer_pool_pages_data 809 含有数据的页数,包括不变和改变的页 Innodb_buffer_pool_bytes_data 13254656 含有数据的字节数 Innodb_buffer_pool_pages_dirty 0 改变的字节数 Innodb_buffer_pool_bytes_dirty 0 改变的页的数目 Innodb_buffer_pool_pages_flushed 2525 缓冲池页面被刷新的次数 Innodb_buffer_pool_pages_free 7374 空页面的数目 Innodb_buffer_pool_pages_misc 8 用于管理工作的页数,公式为'Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free-Innodb_buffer_pool_pages_data' Innodb_buffer_pool_pages_total 8191 缓冲池中的总页数 Innodb_buffer_pool_read_ahead_rnd 0 扫描大块数据时发生随机读头的数量 Innodb_buffer_pool_read_ahead 0 Innodb_buffer_pool_read_ahead_evicted 0 Innodb_buffer_pool_read_requests 107632 逻辑读请求的次数 Innodb_buffer_pool_reads 504 直接从磁盘中逻辑读取的次数(没有从缓冲池中读) Innodb_buffer_pool_wait_free 0 如果缓冲池繁忙且没有空页,innodb需要等待页面刷新,该值表示等待次数,若始终大于0,可适当增加缓冲池大小 Innodb_buffer_pool_write_requests 47403 写入innodb缓冲池的次数
使用show status like '变量'
来查询,这些变量用来跟踪尝试的连接、退出的连接、网络流量和线程统计
Com_*变量统计了每种类型的SQL发起的次数
通过Create_tmp%来查看隐式临时文件和临时表的统计
select_*变量统计select查询的计数器
information_schema数据库中有几个对于innodb的特殊表,可以用于监控压缩、事务和锁
以上就是MySQL监控Innodb信息工作流程的详细内容,更多关于MySQL监控Innodb信息的资料请关注插件窝其它相关文章!