广告
返回顶部
首页 > 资讯 > 数据库 >mysql临时表,临时表空间,ibtmp1表空间暴增原因初探
  • 657
分享到

mysql临时表,临时表空间,ibtmp1表空间暴增原因初探

2024-04-02 19:04:59 657人浏览 独家记忆
摘要

问题的形式解答: 一、Mysql在什么情况下会创建临时表(Internal Temporary Table Use in mysql)? 我列举3个 1. UNION查

问题的形式解答:

一、Mysql在什么情况下会创建临时表(Internal Temporary Table Use in mysql)?

我列举3个

1. UNION查询;

2. insert into select ...from ...

3. ORDER BY和GROUP BY的子句不一样时;

4.数据表中包含blob/text列

等等,其实还有好多。具体参考 https://dev.mysql.com/doc/refman/5.7/en/internal-temporary-tables.html



二、怎么知道mysql用了临时表呢?

这个问题很简单, EXPLaiN 查看执行计划结果的 Extra 列中,如果包含 Using Temporary 就表示会用到临时表。举个例子,有个感性认识。

创建测试表t22 :create  table  t22 as select *  from infORMation_schema.tables;


mysql> desc t22;
+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.02 sec)
mysql> explain
    -> select  table_schema  ,table_name, create_time  from   t22  where table_schema  like 'test%' 
    -> union
    -> select  table_schema  ,table_name, create_time  from   t22  where table_schema  like 'information%'  
    -> ;
+----+--------------+------------+------------+------+---------------+------+---------+------+----------+----------+-----------------+
| id | select_type  | table      | partitions | type | possible_keys | key  | key_len | ref  | rows     | filtered | Extra           |
+----+--------------+------------+------------+------+---------------+------+---------+------+----------+----------+-----------------+
|  1 | PRIMARY      | t22        | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 12522369 |    11.11 | Using where     |
|  2 | UNION        | t22        | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 12522369 |    11.11 | Using where     |
| NULL | UNION RESULT | <union1,2> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |     NULL |     NULL | Using temporary |
+----+--------------+------------+------------+------+---------------+------+---------+------+----------+----------+-----------------+
3 rows in set, 1 warning (0.02 sec)


三、临时表有关的参数有哪些?

    innodb_temp_data_file_path = ibtmp1:12M:autoextend
     tmp_table_size = 16777216
     max_heap_table_size =16777216
     default_tmp_storage_engine=InnoDB

      internal_tmp_disk_storage_engine= InnoDB


四、mysql临时表配置参数是tmp_table_size,当临时表空间不够用的时候怎么办?

       如果临时表中需要存储的数据量超过了上限( tmp-table-size 或 max-heap-table-size 中取其大者),这时候就需要生成基于磁盘的临时表了。也就是放在innodb_temp_data_file_path指定的临时表空间中。

      如果你对这句话有疑问,那我举个例子来看下:反复执行语句: insert into  t22  select * from t22; 同时查看表空间ibtmp1的大小变化。反复执行insert 语句,插入表中的数量指数级增长。

     看下例子:

    mysql临时表,临时表空间,ibtmp1表空间暴增原因初探

mysql临时表,临时表空间,ibtmp1表空间暴增原因初探



五、看图说话,做了上个实验,不知道你是否会有如下想法:既然内部临时表(Internal Temporary Table)用于排序,分组,当需要的存储空间超过 tmp-table-size 上限的时候,使用临时表空间。临时表空间是磁盘,速度比不上内存,那是不是可以加大tmp_table_size来优化需要使用临时表的SQL语句?

      当然可以呀,tmp_table_size最大值是18446744073709551615,如果建议256M。


六、mysql中是如何监控临时表和临时表空间使用情况的?


mysql> show  status like '%tmp%';         
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 1     |
| Created_tmp_files       | 7     |
| Created_tmp_tables      | 18    |
+-------------------------+-------+

    建议Created_tmp_disk_tables/Created_tmp_tables不要超过25%。如果Created_tmp_disk_tables数量很大,查看是否有很多慢sql,是否有很多使用临时表的语句。加大 tmp_table_size 的值。


七、mysql的临时表空间文件暴增,可以达到几百G,你认为形成的原因是什么?

      第四个问题做的例子,如果你不停的反复的实验,你会发现ibtmp1增长的速度惊人。有个项目,曾经ibtmp1暴增到300G。一看慢sql日志,有大量慢sql,而且有很多语句需要排序。所以给ibtmp1加上限制最大值。innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G,mysql会反复利用。

参考:老叶茶馆

Https://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ==&mid=207355450&idx=3&sn=3e3a2c0a7497a8cd099ddc5c33a9932d&scene=21#wechat_redirect

您可能感兴趣的文档:

--结束END--

本文标题: mysql临时表,临时表空间,ibtmp1表空间暴增原因初探

本文链接: https://www.lsjlt.com/news/47627.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql临时表,临时表空间,ibtmp1表空间暴增原因初探
    问题的形式解答: 一、MySQL在什么情况下会创建临时表(Internal Temporary Table Use in MySQL)? 我列举3个 1. UNION查...
    99+
    2022-10-18
  • Oracle11G_l临时表空间
    临时表空间:用来存放用户的临时数据,在需要是可以被覆盖,数据库关系后临时数据小时;用处:大量数据的排序操作; ...
    99+
    2022-10-18
  • 创建表空间和临时表空间
     查看数据文件存放路径select FILE_ID,FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE from dba_data_files order ...
    99+
    2022-10-18
  • MySQL会话临时表空间
    1、物理文件 [root@roidb1 data]# cd \#innodb_temp/ [root@roidb1 #innodb_temp]# ls -lh total 160K -rw-r-----. ...
    99+
    2022-10-18
  • 消除临时表空间暴涨的方法
      关于消除temp ts暴涨的方法     经常有人问temp表空间暴涨的问题,以及如何回收临时表空间,由于版本的不同,方法显然也多种多样,但这些方法显示是治标...
    99+
    2022-10-18
  • oracle创建表空间,临时表空间,用户
    create tablespace a_dat datafile 'D:\oracle\product\10.2.0\oradata\orcl\a_dat.dbf' size 1024m autoexten...
    99+
    2022-10-18
  • 【临时表空间组】临时表空间组的创建、维护及应用
    关于临时表空间组的概念和简单描述可以参考Oracle官方文档的“Oracle Database SQL Reference”(http://download.oracle.com/docs/cd/B19306_01/server.102/b...
    99+
    2023-06-06
  • oracle 表空间,临时表空间使用率查询
    临时表空间: SELECT a.tablespace_name, a.BYTES total, a.bytes - nvl(b.bytes, 0) free      ...
    99+
    2022-10-18
  • MySQL 5.7 新特性 共享临时表空间及临时表改进
    〇 前言: 在MySQL 5.6引用了独立undo tablespace之后,MySQL 5.7在temporary tablespace上做了改进。 已经实现将temporary tablespac...
    99+
    2022-10-18
  • oracle 临时表空间 占用磁盘空间
    新创建一个临时表空间 tmpacreate   temporary   tablespace   TEMPA   TEMPFI...
    99+
    2022-10-18
  • oracle临时表空间的增删改查命令
    本篇内容介绍了“oracle临时表空间的增删改查命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!orac...
    99+
    2022-10-18
  • oracle怎么释放临时表空间
    要释放Oracle数据库中的临时表空间,可以按照以下步骤进行操作:1. 首先,确保当前会话没有使用该临时表空间。可以通过执行以下查询...
    99+
    2023-09-28
    oracle
  • MySQL 5.7临时表空间的使用方法
    这篇文章将为大家详细讲解有关MySQL 5.7临时表空间的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。导读MySQL 5.7的目标是成为发布以来最安全的MySQ...
    99+
    2022-10-18
  • 解决oracle临时表空间的报错
    报错信息:[HY000](1652) [Oracle][ODBC][Ora]ORA-01652: 无法通过 128 (在表空间 TEMP 中) 扩展&nbs...
    99+
    2022-10-18
  • ORA-01652 临时表空间占满问题
    查询临时表空间已经分配的空间和可用空间: select tablespace_name ,tablespace_size/1024/1024 mb_size ,allocated_spa...
    99+
    2022-10-18
  • 怎么理解Oracle临时表空间组
    本篇内容介绍了“怎么理解Oracle临时表空间组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在oracl...
    99+
    2022-10-19
  • 查看临时表空间占用情况
    SELECT B.TABLESPACE,        B.SEGFILE#,        B.SEGBLK#, &...
    99+
    2022-10-18
  • 临时表空间过大解决方法
    临时表空间过大解决方法解决临时表空间过大有两种方法,方法一增加临时表空间的大小,方法二重建临时表空间,解决临时表空间过大的问题。方案一:增加临时表空间的大小--1.临时表空间的使用情况SELECT ...
    99+
    2022-10-18
  • ORACLE临时表空间的总结分析
    ORACLE临时表空间的总结分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。临时表空间概念临时表空间用来管理数据库排序操作以...
    99+
    2022-10-19
  • MySQL会话临时表空间有什么作用
    本文主要给大家介绍MySQL会话临时表空间有什么作用,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL会话临时表空间有什么作用吧。 ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作