美文网首页
Mysql性能分析一

Mysql性能分析一

作者: 求索 | 来源:发表于2020-03-29 19:12 被阅读0次

    辅助命令

    • SHOW VARIABLES
    • show table
    • show profiles

    进行分析需要先了解mysql运行情况,一般使用show status 分析sql运行状态。

    table_locks 分析

    innodb 和MyISAM都实现了表锁,表锁包括表共享读锁(Table Read Lock)和表独占写锁。MyISAM在执行查询语句前,会自动给相关的表加读锁,在执行更新操作的前,会自动给相关的表加写锁;自动加锁时,MyISAM总是一次获得sql语句相关表的全部锁,这也是MyISAM表不会出现死锁的原因。

    查看表锁状态

    如果table_locks_waited值较高,且存在性能问题,则说明存在着较严重的表级锁争用情况。
    

    输出结果如下

    参数 统计结果 描述
    Table_locks_immediate 4058 表示立即释放表锁数
    Table_locks_waited 0 表示需要等待的表锁数

    如果table_locks_waited值较高,且存在性能问题,则说明存在着较严重的表级锁争用情况。

    • infodb 、myisam 都支持表锁

    Innodb_row_lock 分析

    innodb实现了行数,InnoDB行锁实现是通过索引上的索引项加锁实现的,意味着:只有通过索引条件检索数据,InnoDB才会使用行锁,否则使用表锁。

    SHOW STATUS WHERE variable_name LIKE '%row_lock%';
    
    Variable_name Value 描述
    Innodb_row_lock_current_waits 0 当前锁等待的数量
    Innodb_row_lock_time 1411838 自系统启动到现在,锁定的总时间,单位:毫秒 ms。
    Innodb_row_lock_time_avg 1173 平均锁定的时间,单位:毫秒 ms
    Innodb_row_lock_time_max 51614 最大锁定时间,单位:毫秒
    Innodb_row_lock_waits 1203 自系统启动到现在,锁等待次数,即锁定的总次数。

    输出结果中 Innodb_row_lock_waits 有1203次,表示发生了1203锁等待事件。平均锁定时间 1173 ms。合计锁定时间有 1411秒。

    table cache

    Mysql在使用独立表空间时,可以通过 table cache机制来优化表加载机制。可以使用如下命令查询当前是否使用独立表空间:

    show variables like '%per_table%';  
    

    table cache 使用实际情况查询方式:

    SHOW GLOBAL STATUS WHERE variable_name LIKE '%table_open%' OR variable_name LIKE 'open%tables';
    

    输出:

    Variable_name Value 描述
    Variable_name Value
    Open_tables 2000 打开后在缓存中的表数量 < table_open_cache
    Opened_tables 38867830 打开的所有表数量
    Table_open_cache_hits 244113301
    Table_open_cache_misses 38867347
    Table_open_cache_overflows 38850842
    • 查看 时间打开的表空间
    SHOW OPEN TABLES
    
    • 缓存表配置查询
       SHOW GLOBAL VARIABLES LIKE 'table_open_cache';
    

    数据缓存

    • innodb_buffer_pool_size

    相关文章

      网友评论

          本文标题:Mysql性能分析一

          本文链接:https://www.haomeiwen.com/subject/lziuuhtx.html