前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL optimizer_trace的用法

MySQL optimizer_trace的用法

作者头像
保持热爱奔赴山海
发布2022-01-11 13:21:52
2740
发布2022-01-11 13:21:52
举报
文章被收录于专栏:饮水机管理员饮水机管理员

​ https://dev.mysql.com/doc/internals/en/system-variables-controlling-trace.html ​

https://dev.mysql.com/doc/internals/en/tracing-example.html ​

代码语言:javascript
复制
  > show global variables like 'optim%trace%'  -- 默认配置
  +------------------------------+----------------------------------------------------------------------------+
  | Variable_name                | Value                                                                      |
  +------------------------------+----------------------------------------------------------------------------+
  | optimizer_trace              | enabled=off,one_line=off                                                   |
  | optimizer_trace_features     | greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=on |
  | optimizer_trace_limit        | 1                                                                          |
  | optimizer_trace_max_mem_size | 1048576                                                                    |
  | optimizer_trace_offset       | -1                                                                         |
  +------------------------------+----------------------------------------------------------------------------+
  
  > SET OPTIMIZER_TRACE="enabled=on";
  > SET END_MARKERS_IN_JSON=on;
  > set optimizer_trace_max_mem_size=1000000;
  > SET optimizer_trace_offset=-5, optimizer_trace_limit=5;  -- 显示最后五个trace
  > show variables like '%optimize%trace%';
  +------------------------------+----------------------------------------------------------------------------+
  | Variable_name                | Value                                                                      |
  +------------------------------+----------------------------------------------------------------------------+
  | optimizer_trace              | enabled=on,one_line=off                                                    |
  | optimizer_trace_features     | greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=on |
  | optimizer_trace_limit        | 5                                                                          |
  | optimizer_trace_max_mem_size | 1000000                                                                    |
  | optimizer_trace_offset       | -5                                                                         |
  +------------------------------+----------------------------------------------------------------------------+

然后再模拟些业务数据(这段来自官方文档https://dev.mysql.com/doc/internals/en/tracing-example.html)

代码语言:javascript
复制
  CREATE TABLE t1 (
  pk INT,
  col_int_key INT,
  col_varchar_key VARCHAR (1),
  col_varchar_nokey VARCHAR (1)
  );

  INSERT INTO t1 VALUES
  (10,7,'v','v'),(11,0,'s','s'),(12,9,'l','l'),(13,3,'y','y'),(14,4,'c','c'),
  (15,2,'i','i'),(16,5,'h','h'),(17,3,'q','q'),(18,1,'a','a'),(19,3,'v','v'),
  (20,6,'u','u'),(21,7,'s','s'),(22,5,'y','y'),(23,1,'z','z'),(24,204,'h','h'),
  (25,224,'p','p'),(26,9,'e','e'),(27,5,'i','i'),(28,0,'y','y'),(29,3,'w','w');
  
  CREATE TABLE t2 (
  pk INT, col_int_key INT,
  col_varchar_key VARCHAR(1), col_varchar_nokey VARCHAR(1),
  PRIMARY KEY (pk)
  );

  INSERT INTO t2 VALUES
  (1,4,'b','b'),(2,8,'y','y'),(3,0,'p','p'),(4,0,'f','f'),(5,0,'p','p'),
  (6,7,'d','d'),(7,7,'f','f'),(8,5,'j','j'),(9,3,'e','e'),(10,188,'u','u'),
  (11,4,'v','v'),(12,9,'u','u'),(13,6,'i','i'),(14,1,'x','x'),(15,5,'l','l'),
  (16,6,'q','q'),(17,2,'n','n'),(18,4,'r','r'),(19,231,'c','c'),(20,4,'h','h'),
  (21,3,'k','k'),(22,3,'t','t'),(23,7,'t','t'),(24,6,'k','k'),(25,7,'g','g'),
  (26,9,'z','z'),(27,4,'n','n'),(28,4,'j','j'),(29,2,'l','l'),(30,1,'d','d'),
  (31,2,'t','t'),(32,194,'y','y'),(33,2,'i','i'),(34,3,'j','j'),(35,8,'r','r'),
  (36,4,'b','b'),(37,9,'o','o'),(38,4,'k','k'),(39,5,'a','a'),(40,5,'f','f'),
  (41,9,'t','t'),(42,3,'c','c'),(43,8,'c','c'),(44,0,'r','r'),(45,98,'k','k'),
  (46,3,'l','l'),(47,1,'o','o'),(48,0,'t','t'),(49,189,'v','v'),(50,8,'x','x'),
  (51,3,'j','j'),(52,3,'x','x'),(53,9,'k','k'),(54,6,'o','o'),(55,8,'z','z'),
  (56,3,'n','n'),(57,9,'c','c'),(58,5,'d','d'),(59,9,'s','s'),(60,2,'j','j'),
  (61,2,'w','w'),(62,5,'f','f'),(63,8,'p','p'),(64,6,'o','o'),(65,9,'f','f'),
  (66,0,'x','x'),(67,3,'q','q'),(68,6,'g','g'),(69,5,'x','x'),(70,8,'p','p'),
  (71,2,'q','q'),(72,120,'q','q'),(73,25,'v','v'),(74,1,'g','g'),(75,3,'l','l'),
  (76,1,'w','w'),(77,3,'h','h'),(78,153,'c','c'),(79,5,'o','o'),(80,9,'o','o'),
  (81,1,'v','v'),(82,8,'y','y'),(83,7,'d','d'),(84,6,'p','p'),(85,2,'z','z'),
  (86,4,'t','t'),(87,7,'b','b'),(88,3,'y','y'),(89,8,'k','k'),(90,4,'c','c'),
  (91,6,'z','z'),(92,1,'t','t'),(93,7,'o','o'),(94,1,'u','u'),(95,0,'t','t'),
  (96,2,'k','k'),(97,7,'u','u'),(98,2,'b','b'),(99,1,'m','m'),(100,5,'o','o');

模拟个业务查询

代码语言:javascript
复制
  SELECT
  SUM(alias2.col_varchar_nokey),
  alias2.pk AS field2
  FROM
  t1 AS alias1
  STRAIGHT_JOIN t2 AS alias2
    ON alias2.pk = alias1.col_int_key
  WHERE alias1.pk
  GROUP BY field2
  ORDER BY alias1.col_int_key,
  alias2.pk;

看下捕获到的sql的trace情况

代码语言:javascript
复制
> SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE \G

注意:

每个记住的trace都是一个字符串。它随着优化的进行而扩展(使用 realloc())并向其追加数据。

optimizer_trace_max_mem_size 变量对所有当前记住的trace使用的内存总量设置限制:如果达到此限制,则不会扩展当前跟踪(因此trace的结果显式将不完整)。

还可以把结果导出到文件(使用 INTO DUMPFILE 而不是 INTO OUTFILE ,因为后者会转义换行符。需要关闭end_markers_in_json,不然导出结果可能会不符合标准json)

代码语言:javascript
复制
> SELECT TRACE INTO DUMPFILE '/tmp/aaa' FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;

用完记得关闭(当然不关闭也没问题,我们这里用的是session级别的设置)

代码语言:javascript
复制
> SET OPTIMIZER_TRACE="enabled=off";
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档