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;

查询结果解释

  1. Name 表名称
  2. Engine 表的存储引擎
  3. Version 版本
  4. Row_format 行格式。对于MyISAM引擎,这可能是Dynamic,Fixed或Compressed。动态行的行长度可变,例如Varchar或Blob类型字段。固定行是指行长度不变,例如Char和Integer类型字段。
  5. Rows 表中的行数。对于非事务性表,这个值是精确的,对于事务性引擎,这个值通常是估算的。
  6. Avg_row_length 平均每行包括的字节数
  7. Data_length 整个表的数据量(单位:字节)
  8. Max_data_length 表可以容纳的最大数据量
  9. Index_length 索引占用磁盘的空间大小
  10. Data_free 对于MyISAM引擎,标识已分配,但现在未使用的空间,并且包含了已被删除行的空间。
  11. Auto_increment 下一个Auto_increment的值
  12. Create_time 表的创建时间
  13. Update_time 表的最近更新时间
  14. Check_time 使用 check table 或myisamchk工具检查表的最近时间
  15. Collation 表的默认字符集和字符排序规则
  16. Checksum 如果启用,则对整个表的内容计算时的校验和
  17. Create_options 指表创建时的其他所有选项
  18. 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中的,在上次的分享中也有提到过。

posted @ 2022-12-01 17:43  starmoon1900  阅读(138)  评论(0编辑  收藏  举报