文章来自:http://blog.csdn.net/stevendbaguo/article/details/73229562

mysql> select version();

+------------+

| version()  |

+------------+

| 5.6.14-log |

+------------+

mysql> show global status like 'Created_%_tables';

+-------------------------+-------+

| Variable_name           | Value |

+-------------------------+-------+

| Created_tmp_disk_tables | 4836110|

| Created_tmp_tables      | 46376366|

+-------------------------+-------+

数据库启动一周,产生的临时表惊人,设置的两个变量tmp_table_size = 16777216, max_heap_table_size=64M。

从nmon上看IO消耗比较大,特别是IOPS已经达到了瓶颈,现在要定位出是哪些SQL导致的这个问题。

官方文档的解释:

Created_tmp_disk_tables

The number of internal on-disk temporary tables created by the server while executing statements.

If an internal temporary table is created initially as an in-memory table but becomes too large, MySQL automatically converts it to an on-disk table. The maximum size for in-memory temporary tables is the minimum of the tmp_table_size andmax_heap_table_size values. If Created_tmp_disk_tables is large, you may want to increase the tmp_table_size or max_heap_table_size value to lessen the likelihood that internal temporary tables in memory will be converted to on-disk tables.

You can compare the number of internal on-disk temporary tables created to the total number of internal temporary tables created by comparing the values of the Created_tmp_disk_tables and Created_tmp_tables variables.

这些SQL会产生:DISTINCT, GROUP BY, ORDER BY and UNION。如果需要的临时表 大于 min(tmp_table_size, max_heap_table_size),就会需要放到磁盘上。

有一个表是监控产生Created_tmp_disk_tables的SQL。

mysql> use performance_schema

mysql> select * from setup_consumers;

+--------------------------------+---------+

| NAME                           | ENABLED |

+--------------------------------+---------+

| events_stages_current          | NO      |

| events_stages_history          | NO      |

| events_stages_history_long     | NO      |

| events_statements_current      | YES     |

| events_statements_history      | NO      |

| events_statements_history_long | NO      |

| events_waits_current           | NO      |

| events_waits_history           | NO      |

| events_waits_history_long      | NO      |

| global_instrumentation         | YES     |

| thread_instrumentation         | YES     |

| statements_digest              | YES     |

+--------------------------------+---------+

mysql> UPDATE setup_consumers SET ENABLED='YES' WHERE NAME IN ('events_statements_history_long');

mysql> select * from setup_consumers;

+--------------------------------+---------+

| NAME                           | ENABLED |

+--------------------------------+---------+

| events_stages_current          | NO      |

| events_stages_history          | NO      |

| events_stages_history_long     | NO      |

| events_statements_current      | YES     |

| events_statements_history      | NO      |

| events_statements_history_long | YES     |

| events_waits_current           | NO      |

| events_waits_history           | NO      |

| events_waits_history_long      | NO      |

| global_instrumentation         | YES     |

| thread_instrumentation         | YES     |

| statements_digest              | YES     |

+--------------------------------+---------+

history_long表则记录了最近所有线程产生的10000个事件,是可以配置的。

mysql> show variables like 'performance_schema%history%size';

+--------------------------------------------------------+-------+

| Variable_name                                          | Value |

+--------------------------------------------------------+-------+

| performance_schema_events_stages_history_long_size     | 10000 |

| performance_schema_events_stages_history_size          | 10    |

| performance_schema_events_statements_history_long_size | 10000 |

| performance_schema_events_statements_history_size      | 10    |

| performance_schema_events_waits_history_long_size      | 10000 |

| performance_schema_events_waits_history_size           | 10    |

+--------------------------------------------------------+-------+

mysql> SELECT sql_text, COUNT(*) AS cnt  FROM performance_schema.events_statements_history_long

WHERE  CREATED_TMP_DISK_TABLES > 0;

+------------------------------------------+-----+

| sql_text                                 | cnt |

+------------------------------------------+-----+

| select distinct * from t1  LIMIT 0, 1000 |   2 |

+------------------------------------------+-----+

mysql sql 检测磁盘_MySQL 找到临时表用到磁盘的SQL相关推荐

  1. mysql 内部 临时表_MySQL内部临时表何时使用磁盘

    问题: 在 实验 05中,我们看到了内部临时表会使用到不少内存. 那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的? 实验: 我们仍使用 实验 05中的环境,略去准 ...

  2. mysql row 日志格式_mysql row日志格式下 查看binlog sql语句

    有时候我们需要使用row作为binlog的日志格式,即配置文件使用了binlog_format= row 参数 这样以来,我们在查看数据库binlog内容时候,就看不到增删改查的具体语句了,在数据库恢 ...

  3. mysql死锁检测算法_MySQL InnoDB如何应付死锁

    死锁是事务处理型数据库系统的一个经典问题,但是它们并不是很危险的, 除非它们如此地频繁以至于你根本处理不了几个事务. 当因死锁而产生了回滚时,你通常可以在你的应用程序中重新发出一个事务即可. Inno ...

  4. mysql死锁检测算法_MySQL 8 死锁检测脚本

    MySQL 8 记录死锁关的几张表有所变化,重新写一个脚本,便于在出现问题的时候快速处置问题. 死锁示意图 死锁相关的表 information_schema.INNODB_TRX `performa ...

  5. mysql 创建端口号_MySQL命令行 不同端口登录 执行SQL文件 创建用户 赋予权限 修改root密码...

    0.安装MySQL服务 1.[不同端口登录] 通过开始菜单-> 程序-> MySQL-> MySQL Command Line Client 通过输入密码Enter password ...

  6. mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...

    之前开发的一个监控系统,数据库的日志表是单表,虽然现在数据还不大并且做了查询sql优化,不过以后数据库的日志表数据肯定会越来越庞大,将会导致查询缓慢,所以把日志表改成分表,日志表可以按时间做水平分表, ...

  7. mysql参数优化步骤_MySQL架构优化实战系列4:SQL优化步骤与常用管理命令2(转)

    MySQL架构优化实战系列4:SQL优化步骤与常用管理命令 原文:http://dbaplus.cn/news-11-649-1.html 一.SQL语句优化步骤 1.查看MySQL状态及配置 sho ...

  8. 用mysql语句骂人_MySQL中特别实用的几种SQL语句送给大家

    在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮. 目录 实用的SQL 1.插 ...

  9. mysql时间模糊查询_mysql中那些根据时间查询的sql语句

    在我们使用mysql是免不了要根据时间去查询一些数据,这个时候一般有几种方式可以去查询. 第一种数据库,如果有数据新建时间可以以这个时间为节点,通过当前时间条件去比较时间来查询到此段时间内的数据 例如 ...

最新文章

  1. 一文掌握明年物联网传感器市场!2022中国AIoT产业全景图谱报告新鲜出炉
  2. Android 让图片等比例缩放的三种方法
  3. Go语言中Goroutine与线程的区别
  4. mysql获取时间戳_服了!阿里Mysql三位封神专家总结1200多页性能优化的千金良方...
  5. excel群发邮件 支持html,在Excel中利用VBA实现邮件的群发实例
  6. Java高并发、分布式框架,从无到有微服务架构设计
  7. T1164 统计数字 codevs
  8. Ubuntu16.04 安装搭建RED5流媒体服务器
  9. 基于Gromacs的蜘蛛毒素肽显性溶剂动力学分析
  10. 有道云笔记·协作android版,【每天一品】有道云笔记协作
  11. 别人都不知道的“好用”网站,让你的效率飞快
  12. 很多人看都哭了,不信你不哭
  13. Windows权限维持方法
  14. C语言排序算法之“选择排序法”
  15. Html 和 CSS笔记
  16. 高压直流电源为什么要“接地”?如何“接地”?
  17. android studio日志不打印,Mac 下 Android Studio 不打印日志的解决办法
  18. js动态加载table,打印table里的内容以及解决打印后的问题
  19. 视频教程-数据中台-数据仓库建模设计方法和实现-数据仓库
  20. 刀片服务器接显示器,《魔兽世界》国服 退役刀片服务器开售

热门文章

  1. mysql limit优化_MySQL:教你学会如何做性能分析与查询优化
  2. hive load data inpath 空目录_走近大数据之Hive进阶(一、Hive数据的导入)
  3. vm虚拟机和windows共享文件夹
  4. centos开启防火墙指定端口
  5. vc怎么查看c源码的汇编语言,VC++代码的汇编分析(一)
  6. matlab运行容量小,可变大小(运行时)输入Simulink Matlab
  7. parse函数 python_python的parse_args()函数
  8. 五行塔怎么吃第五个_红毛丹怎么吃 吃红毛丹的五个好处
  9. 【以太坊】搭建测试网络之ubuntu系统安装golang环境以及helloworld
  10. 微信小程序获取不到unionid还有小程序无法解析JSON字符串的问题