MySQL优化常用命令
show variables like 'transaction_isolation'; 查看事务隔离级别
/* 查询长事务(超过60秒) */
select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60
使用show table status 查看表信息 (含行数、表数据大小、索引大小等)
show table status from db_name like 'esf_seller_history'\G;
查询结果解释
- Name 表名称
- Engine 表的存储引擎
- Version 版本
- Row_format 行格式。对于MyISAM引擎,这可能是Dynamic,Fixed或Compressed。动态行的行长度可变,例如Varchar或Blob类型字段。固定行是指行长度不变,例如Char和Integer类型字段。
- Rows 表中的行数。对于非事务性表,这个值是精确的,对于事务性引擎,这个值通常是估算的。
- Avg_row_length 平均每行包括的字节数
- Data_length 整个表的数据量(单位:字节)
- Max_data_length 表可以容纳的最大数据量
- Index_length 索引占用磁盘的空间大小
- Data_free 对于MyISAM引擎,标识已分配,但现在未使用的空间,并且包含了已被删除行的空间。
- Auto_increment 下一个Auto_increment的值
- Create_time 表的创建时间
- Update_time 表的最近更新时间
- Check_time 使用 check table 或myisamchk工具检查表的最近时间
- Collation 表的默认字符集和字符排序规则
- Checksum 如果启用,则对整个表的内容计算时的校验和
- Create_options 指表创建时的其他所有选项
- Comment 包含了其他额外信息,对于MyISAM引擎,包含了注释徐标新,如果表使用的是innodb引擎 ,将现实表的剩余空间。如果是一个视图,注释里面包含了VIEW字样。
查看索引
show index from tm_test_key_len ;
重新组织索引
analyze table tm_test_key_len;
重建索引
查看SQL执行计划
explain select xxx;
进阶-查看优化器决策过程 Optimizer Trace
/* 打开optimizer_trace,只对本线程有效 /
SET optimizer_trace='enabled=on';
/ 执行语句 /
select * from tt order by xx limit 10;
/ 查看 OPTIMIZER_TRACE 输出 /
SELECT * FROM information_schema
.OPTIMIZER_TRACE
;
/ 关闭optimizer_trace,只对本线程有效 */
SET optimizer_trace='enabled=off';
查看innodb配置
mysql>show variables like '%innodb_stats%';
+--------------------------------------+-------------+
| Variable_name | Value |
+--------------------------------------+-------------+
| innodb_stats_auto_recalc | ON |
| innodb_stats_method | nulls_equal |
| innodb_stats_on_metadata | OFF |
| innodb_stats_persistent | ON |
| innodb_stats_persistent_sample_pages | 20 |
| innodb_stats_sample_pages | 8 |
| innodb_stats_transient_sample_pages | 8 |
+--------------------------------------+-------------+
1、对于所有innodb表,可以设置全局参数
全局参数:
innodb_stats_persistent 是否开启统计
innodb_stats_auto_recalc 自动重新统计
innodb_stats_persistent_sample_pages 随机取样页数
innodb_stats_on_metadata 该参数主要为元数据索引统计分析,
MySQL的优化器是通过innodb收集到的数据来选择最优的执行计划,但因为这些数据会随着某些操作而重新计算,造成执行计划会多次变化,出现不精确和不稳定的问题。
这些导致重新计算的操作有:
1.重启
2.访问表
3.表中数据改变(1/16 以上的DML)
4.show table status 及 show index for table
5.analyze table
6.其他
为了解决这个问题,在mysql 5.6 时,加入了持续优化统计,不再自动重新统计,持续统计数据是作为系统表存储在innodb_table_stats和innodb_index_stats中的,在上次的分享中也有提到过。