zoukankan      html  css  js  c++  java
  • 第13章 MySQL服务器的状态--高性能MySQL学习笔记

    13.1 系统变量 -- 服务器配置变量

    MySQL通过SHOW VARIABLES  SQL命令显示许多系统变量。

    13.2 状态变量--SHOW STATUS

      SHOW STATUS 命令会在一个由两列(名称/值)组成的表格里显示服务器状态变量。这些变量都是只读的。

      SHOW STATUS默认显示会话变量,SHOW GLOBAL STATUS显示全局变量。

      也可以从INFORMATION_SCHEMA.GLOBAL_STATUS和INFORMATION_SCHEMA.SESSION_STATUS表里取出。

      32位系统很多计数器会归零。64位很少出现。

      查看这些变量的最好办法是:在时长为几分钟的时间段里看它们改变了多少。

      下面简要介绍,所有变量还得看MySQL手册。

    13.2.1 线程和链接统计信息

      Connections, Aborted_connects......

    eg: 每秒创建线程数(Threads_created/Uptime)。如果这个值跟0没差太多,说明线程缓冲区太小。

    13.2.2 二进制日志的状态

    Binlog_cache_use 和Binlog_cache_disk_use状态变量可以显示二进制日志保存了多少个事务。

    13.2.3 命令计数器

    Com_*变量记录了已发出的每一种SQL或者C API命令的数目。

    eg:Com_select记录SELECT语句的数目,

    Com_change_db记录使用USE或者通过C API改变一条默认连接数据库的次数。

    Com_admin_commands状态变量可能很大,它不仅记录管理命令的数目,也记录发给MySQL实例的ping请求数量。

    Questions记录了服务器受到的查询和命令的总数。因为缓存等因素,Com_*变量的总数并不完全相等。

    13.2.4临时文件和表

    查看记录MySQL创建临时表和文件次数的变量:

    mysql> SHOW GLOBAL STATUS LIKE 'Created_tmp%';

    13.2.5 Handler操作

    Handler API是MySQL与存储引擎之间的接口。Handler_*变量记录了Handler的操作次数。

    研读Handler_*变量可以让你看清楚服务器做得最多的是哪几种工作。

    13.2.6 MyISAM索引键缓冲区

    Key_*变量包含了MyISAM索引键缓冲区的度量值和计数器。

    13.2.7文件描述符

    Open_*变量。

    如果主要使用MyISAM引擎,那查看文件描述符的统计信息就很重要。

    13.2.8 查询缓存

    通过Qcache_*状态变量来检查查询缓存。

    13.2.9 各种类型的SELECT

    Select_*变量记录了各种类型SELECT查询的次数。

    Select_range:一种联接的数目,该联接在第一个表的索引的指定范围内做扫描。

    Select_scan:对第一个表做全表扫描的联接数目。

    Select_full_range_join:....

    Select_range_check:.这种查询计划代价很高。

    Select_full_join:很糟糕。

    13.2.10 排序

    Sort_*变量

    13.2.11表锁定

    Table_locks_immediate,Table_locks_waited......

    13.2.12 Secure Socket Layer (SSL)

    Ssl_*变量显示服务器是如何配置SSL的。

    13.2.13 InnoDB特有变量

    InnoDB_*变量显示的是包含在SHOW INNODB STATUS的一些数据。

    在低版本(5.0)有副作用:创建全局锁,遍历InnoDB缓存池,阻塞其他线程,知道锁释放。

    13.2.14 Plug-in特有得变量

    插件式存储引擎-相关变量

    13.2.15 其他

    Delayed_*, Not_flushed_delayed_rows

      这些变量INSERT SELAYED查询的计数器和度量值

    Last_query_cost

      查询优化器的查询计划在最近一次执行查询时的开销。

    Ndb_* 

      NDB Cluster的配置信息(如果是正确配置的话)

    Slave_*

        复制从服务器时启用

    Tc_log_*

        记录服务器被用作XA事务协调器的次数

    Uptime

        服务器正常运行的时间,以秒为单位

    想了解系统总体工作负荷最好途径就是比较一组相关的状态变量。

    13.3  SHOW INNODB STATUS

    在 SHOW ENGINE INNODB STATUS(或:SHOW INNODB STATUS)的输出里,InnoDB存储引擎显示出了大量的内部信息。

    它输出的就是单独的字符串。它分为很多节,每一节对应了InnoDB存储引擎不同部分的信息。

    ps:innodb把64位数字分两部分打印:高32位和低32位,例如事务ID,TRANSACTION 0 3793469

    13.3.1 头部信息

    eg:  Per second averages calculated from the last 45 seconds

        每秒平均从最后45秒计算

    ......

    13.3.2 SEMAPHORE --信号量

    如果有高并发工作负荷,就需要关注这一段信号量。

    它包含了两种数据: 1 时间计数器   2 当前等待线程的列表

    OS WAIT ARRAY INFO: reservation count 4, signal count 4:  

      操作系统等待阵列信息,是一个“插槽”式的阵列,InnnDB保留了阵列里的一些插槽给信号量使用,操作系统用这些信号量给线程发送信号,使线程可以继续运行。reservation count 显示InnoDB分配插槽的额度,signal count 衡量的是线程通过阵列得到信号的频度。

    Mutex spin waits 0, rounds 1750203, OS waits 40912:

      跟互斥量相关的几个计数器

    RW-shared spins 197079, OS waits 91344; RW-excl spins 38238, OS waits 258:

      显示读/写共享和排斥锁的计数器

    ......

    13.3.3 LATEST FOREIGN KEY ERROR --外键错误

    ......

    13.3.4 LATEST DETECTED DEADLOCK -- 服务器内死锁

    ......

    13.3.5  TRANSACTION

     InnoDB事务的一些摘要信息,它们跟随在当前活动事务目录之后。

    Trx id counter 0 10209388:

      当前事务的ID,它是一个系统变量,每创建一个新事务就会累加。

    Purge done for trx's n:o < 0 10208813 undo n:o < 0 0:

      这是InnoDB清除旧版本MVCC行时所用的事务ID。通过这个值和当前事务ID的比较,你会看到有多少老版本的数据已经被清除掉了。.......

      InnoDB清除进程正在使用的撤销日志编号: 如果是" 0 0 "说明清除进程处于空闲状态。

    History list length 594

      历史记录长度,它就是位于InnoDB数据文件的撤销空间里的未清除事务的数目。当一个事务执行了更新并提交后,这个数字就会累加。当清除进程移除一个旧版本数据时,它就会递减。

    Total number of lock structs in row lock hash table 0:

      锁结构的数目。每个锁结构经常持有多个行锁。

    头部信息之后就是一个事务列表。

    ---TRANSACTION 0 0, not started, process no 2119, OS thread id 1186466112:

      以事务ID和状态开始,......

    MySQL thread id 14236333, query id 82167872 127.0.0.1 root:

      mysql进程ID,内部查询码等其他信息......

    ......

    13.3.6 FILE I/O -- I/O helper 线程的状态,用性能计数器的方式来表达:

    1   --------
    2   FILE I/O
    3   --------

    //第4到7行显示的就是 I/O helper 线程当前状态
    4   I/O thread 0 state: waiting for i/o request (insert buffer thread) //插入缓冲区线程--负责插入缓冲区的合并
    5   I/O thread 1 state: waiting for i/o request (log thread)       //日志线程--负责异步的日志刷新
    6   I/O thread 2 state: waiting for i/o request (read thread)      //读线程,负责读前置(Read-ahead)的操作,预测InnoDB将要使用的数据,并将他们预读进来
    7   I/O thread 3 state: waiting for i/o request (write thread)     //写线程--刷新 脏 缓冲区

    //第8到10行显示的是每个helper线程还没完成的操作数目
    8   Pending normal aio reads: 0, aio writes: 0,  
    9   ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
    10 Pending flushes (fsync) log: 0; buffer pool: 0
    11 3021 OS file reads, 1175492 OS file writes, 575175 OS fsyncs //读,写及fsync()调用的执行次数

    //第12行显示的是在头部信息指明的那段时间,平均每秒执行各种操作的次数
    12 0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s

    13.3.7 INSERT BUFFER AND ADAPTIVE HASH INDEX:

    -------------------------------------
    INSERT BUFFER AND ADAPTIVE HASH INDEX
    -------------------------------------
    Ibuf: size 1, free list len 0, seg size 2,     //插入缓冲区的大小
    15 inserts, 15 merged recs, 15 merges     //显示了InnoDB已经做了多少次缓冲区操作
    Hash table size 2212699, used cells 57809, node heap has 88 buffer(s)    //自适应哈希索引的状态
    64.93 hash searches/s, 30.33 non-hash searches/s  //根据头部信息期限内,散列索引查找次数和非散列索引查找次数

    13.3.8 LOG

    ---
    LOG
    ---
    Log sequence number 0 1259958998  //当前日志的顺序号
    Log flushed up to 0 1259958998    //日志已经刷新到的点
    Last checkpoint at 0 1259958998    //最近的一个检查点

    //下面两行显示了还未完成的日志操作和统计信息
    0 pending log writes, 0 pending chkp writes
    553796 log i/o's done, 0.00 log i/o's/second

    13.3.9 BUFFER POOL AND MEMORY

    1  ----------------------
    2  BUFFER POOL AND MEMORY
    3  ----------------------

    //InnoDB申请内存总数,以及其中有多少是在附加内存池申请到的
    4  Total memory allocated 1239085970; in additional pool allocated 16324352 

    //第5到8行显示了缓冲池的度量值,以页为单位。
    5  Buffer pool size 65536  
    6  Free buffers 55165  
    7  Database pages 10283
    8  Modified db pages 0  //显示缓冲池容纳脏页的数目

    //第9到10行显示了未完成的读和写的数目, LRU(最少最近使用)
    9   Pending reads 0
    10 Pending writes: LRU 0, flush list 0, single page 0 
    11 Pages read 3406, created 49455, written 676980  //显示了InnoDB已经读,创建,写了多少页
    12 0.00 reads/s, 0.00 creates/s, 0.00 writes/s
    13 Buffer pool hit rate 1000 / 1000     //缓冲池命中率

    13.3.10 ROW OPERATIONS  显示 row operations 及其它各色各样的InnoDB统计信息

    1  --------------
    2  ROW OPERATIONS
    3  --------------
    4  0 queries inside InnoDB, 0 queries in queue    //显示InnoDB有多少条线程
    5  1 read views open inside InnoDB  //InnoDB已经打开了多少个读视图
    6  Main thread process no. 2119, id 1168361792, state: waiting for server activity  //内核主线程状态

    // 7,8行显示了行插入,更新,删除和读取次数的统计信息,以及这些数值每秒平均值 
    7  Number of rows inserted 228379, updated 101797, deleted 2734, read 1311217263  
    8  0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 94.26 reads/s

    13.4 SHOW PROCESSLIST -当前正连接到MySQL的线程列表

    Command 和 State列救市线程真正显示‘状态’的地方。

    SHOW FULLPROCESSLIST 显示每一条查询的全部文本。

    13.5 SHOW MUTEX STATUS

      InnoDB互斥量的细节信息,通常用于深入观察系统的伸缩性和并发性的问题。

      在代码里,每一个互斥量保护着一块临界区。

      ......

    13.6 复制的状态

    MySQL有几个命令是用于监控复制的。......

    13.7 INFORMATION_SCHEMA

    INFORMATION_SCHEMA数据库里是一套按照SQL标准定义的系统视图。

    许多视图对应于MySQL的SHOW命令。

  • 相关阅读:
    Shell流程控制语句if
    Linux命令之read
    Docker容器(六)——创建docker私有化仓库
    Docker容器(五)——Docker静态化IP
    Docker容器(四)——常用命令
    python笔记
    iOS应用性能调优建议
    QQ音乐项目(OC版)
    iOS : 静态库制作
    iOS : 静态库(.framework)合并
  • 原文地址:https://www.cnblogs.com/thrillerz/p/3928972.html
Copyright © 2011-2022 走看看