美文网首页
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