范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

MySQL的ibtmp1文件怎么这么大?

  1. 啥情况呀
  测试环境机器磁盘空间不足的告警打破了下午的沉寂,一群人开始忙活着删数据。但是,不久前刚清理了一波数据,测试环境在没做压测的情况下不至于短短一个月不到就涨了200G数据,于是,我悄悄的进入数据目录下,发现一个不寻常的点,ibtmp1文件有192G   ll -h  ibtmp1  -rw-r----- 1 mysql mysql 192G Aug 12 16:20 ibtmp1
  2. 怎么处理
  2.1 简单说明
  ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在支持大文件的系统这个文件大小是可以无限增长的。
  2.2 解决办法
  a) 找个空闲时间关闭数据  #  设置innodb_fast_shutdown参数 SET GLOBAL innodb_fast_shutdown = 0;  # 此步骤可以省略 #  关闭数据库实例 shutdown;   #  因本实例为MySQL5.7  可以直接在SQL命令行中shutdown关闭
  关闭后ibtmp1文件会自动清理
  b) 修改my.cnf配置文件
  为了避免ibtmp1文件无止境的暴涨导致再次出现此情况,可以修改参数,限制其文件最大尺寸。
  如果文件大小达到上限时,需要生成临时表的SQL无法被执行(一般这种SQL效率也比较低,可借此机会进行优化)   innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G  # 12M代表文件初始大小,5G代表最大size
  c) 启动mysql服务
  启动数据库后可以查一下是否生效  mysql> show  variables like "innodb_temp_data_file_path"; +----------------------------+-------------------------------+ | Variable_name              | Value                         | +----------------------------+-------------------------------+ | innodb_temp_data_file_path | ibtmp1:12M:autoextend:max:5G | +----------------------------+-------------------------------+ 1 row in set (0.01 sec)
  3. 什么情况下会用到临时表
  当EXPLAIN 查看执行计划结果的 Extra 列中,如果包含 Using Temporary 就表示会用到临时表,例如如下几种常见的情况通常就会用到:
  a) GROUP BY 无索引字段或GROUP BY+ ORDER BY 的子句字段不一样时  /**  先看一下表结构 */ mysql> show  create table  test_tmp1G *************************** 1. row ***************************        Table: test_tmp1 Create Table: CREATE TABLE `test_tmp1` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(50) DEFAULT NULL,   `col2` varchar(25) DEFAULT NULL,   PRIMARY KEY (`id`),   KEY `name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 1 row in set (0.00 sec)  /**  group  by无索引字段*/ mysql> explain select * from test_tmp1 group by  col2 ; +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+ | id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                           | +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+ |  1 | SIMPLE      | test_tmp1 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | Using temporary; Using filesort | +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+   /**  group by 与order by字段不一致时,及时group by和order by字段有索引也会使用 */ mysql> explain select name from test_tmp1 group by  name order by id desc; +----+-------------+-----------+------------+-------+---------------+------+---------+------+------+----------+-----------------------------------------------------------+ | id | select_type | table     | partitions | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                                     | +----+-------------+-----------+------------+-------+---------------+------+---------+------+------+----------+-----------------------------------------------------------+ |  1 | SIMPLE      | test_tmp1 | NULL       | range | name          | name | 153     | NULL |    3 |   100.00 | Using index for group-by; Using temporary; Using filesort | +----+-------------+-----------+------------+-------+---------------+------+---------+------+------+----------+-----------------------------------------------------------+ 1 row in set, 1 warning (0.02 sec)
  b) order by 与distinct 共用,其中distinct与order by里的字段不一致(主键字段除外)  /**  例子中有无索引时会存在,如果2个字段都有索引会如何*/ mysql> alter table  test_tmp1 add key col2(col2); Query OK, 0 rows affected (1.07 sec) Records: 0  Duplicates: 0  Warnings: 0  /**   结果如下,其实该写法与group by +order by 一样*/ mysql> explain select distinct col2  from test_tmp1 order  by  name; +----+-------------+-----------+------------+-------+---------------+------+---------+------+------+----------+---------------------------------+ | id | select_type | table     | partitions | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra                           | +----+-------------+-----------+------------+-------+---------------+------+---------+------+------+----------+---------------------------------+ |  1 | SIMPLE      | test_tmp1 | NULL       | index | col2          | col2 | 78      | NULL |    8 |   100.00 | Using temporary; Using filesort | +----+-------------+-----------+------------+-------+---------------+------+---------+------+------+----------+---------------------------------+ 1 row in set, 1 warning (0.00 sec)
  c) UNION查询(MySQL5.7后union all已不使用临时表)  /**  先测一下union all的情况*/  mysql> explain select name from test_tmp1 union all  select name from test_tmp1 where id <10; +----+-------------+-----------+------------+-------+---------------+---------+---------+------+------+----------+-------------+ | id | select_type | table     | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra       | +----+-------------+-----------+------------+-------+---------------+---------+---------+------+------+----------+-------------+ |  1 | PRIMARY     | test_tmp1 | NULL       | index | NULL          | name    | 153     | NULL |    8 |   100.00 | Using index | |  2 | UNION       | test_tmp1 | NULL       | range | PRIMARY       | PRIMARY | 4       | NULL |    8 |   100.00 | Using where | +----+-------------+-----------+------------+-------+---------------+---------+---------+------+------+----------+-------------+ 2 rows in set, 1 warning (0.01 sec)  /**  再看一下union 作为对比,发现出现了使用临时表的情况*/ mysql> explain select name from test_tmp1 union   select name from test_tmp1 where id <10; +----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+ | id | select_type  | table      | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra           | +----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+ |  1 | PRIMARY      | test_tmp1  | NULL       | index | NULL          | name    | 153     | NULL |    8 |   100.00 | Using index     | |  2 | UNION        | test_tmp1  | NULL       | range | PRIMARY       | PRIMARY | 4       | NULL |    8 |   100.00 | Using where     | | NULL | UNION RESULT |  | NULL       | ALL   | NULL        | NULL    | NULL    | NULL | NULL |     NULL | Using temporary | +----+--------------+------------+------------+-------+---------------+---------+---------+------+------+----------+-----------------+ 3 rows in set, 1 warning (0.00 sec)
  d) insert into select ...from ...  /**  简单看一下本表的数据重复插入的情况 */  mysql> explain insert into test_tmp1(name,col2)  select name,col2 from test_tmp1; +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-----------------+ | id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           | +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-----------------+ |  1 | INSERT      | test_tmp1 | NULL       | ALL  | NULL          | NULL | NULL    | NULL | NULL |     NULL | NULL            | |  1 | SIMPLE      | test_tmp1 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | Using temporary | +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-----------------+ 2 rows in set (0.00 sec)
  小结: 上面列举的是最常见的使用临时表的情况,其中基本都是引起慢查询的因素,因此,如果遇到临时表空间文件暴涨是需要查看一下是否有大量的慢查询。
  4. 和临时表空间相关的参数有哪些
  各参数之间相互影响,其中直接影响临时表空间的参数如要有如下几个  innodb_temp_data_file_path  tmp_table_size max_heap_table_size default_tmp_storage_engine internal_tmp_disk_storage_engine
  5. 下面来模拟一个ibtmp1文件快速膨胀的例子
  5.1 调整参数值
  上面列出了主要的参数,那么先调整一下参数,以便于模拟  tmp_table_size = 16M innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G
  调整后重启数据库
  5.2 造一批数据  /**  造一张表或者从其他表复制一批数据,为了方便模拟,可以不创建主键及索引*/ mysql> create table test_tmp3 select  * from db1.tbname; Query OK, 15948372 rows affected (2 min 27.24 sec) Records: 15948372  Duplicates: 0  Warnings: 0
  此时查看一下ibtmp1文件的大小  ll -h ibtmp1  -rw-r----- 1 mysql mysql 12M Aug 15 16:06 ibtmp1  /**  此时是默认的初始大小*/
  5.2 使用insert into ... select * from ...的方式插入  /**  此方式将会使用临时表空间,且 tmp_table_size参数已调小为16M,本表当前有2G多,所以会使用临时表空间*/ mysql> insert into  test_tmp3 select  * from test_tmp3 ; Query OK, 15948372 rows affected (2 min 7.40 sec) Records: 15948372  Duplicates: 0  Warnings: 0
  此时 查看一下ibtmp1文件的大小   ll -h ibtmp1  -rw-r----- 1 mysql mysql 2.8G Aug 15 16:17 ibtmp1  /**  此时已使用了2.8G*/
  此时该表的size如下   ll -h bak_db/test_tmp3*                          /**   结果中已有5.8G*/ -rw-r----- 1 mysql mysql 8.9K Aug 15 16:04 bak_db/test_tmp3.frm -rw-r----- 1 mysql mysql 5.8G Aug 15 16:16 bak_db/test_tmp3.ibd
  5.3 继续测试,看看会发生什么
  因为ibtmp1当前设置的最大值为5G,继续复制一个5.8G的数据,会不会异常,如果异常有什么表现?  /**   继续插入时 因临时表空间大小有限制,超过5G后将异常,信息如下*/ mysql> insert into  test_tmp3 select  * from test_tmp3; ERROR 1114 (HY000): The table "/app/data/mysql3306/tmp/#sql_32469_0" is full
  此时 查看一下ibtmp1文件的大小   ll -h ibtmp1  -rw-r----- 1 mysql mysql 5.0G Aug 15 16:17 ibtmp1  /**  此时已使用了5.0G,已达到上限*/
  数据库日志里也会记录本次异常  2019-08-15T08:23:47.016495Z 3 [ERROR] /usr/local/mysql5.7/bin/mysqld: The table "/app/data/mysql3306/tmp/#sql_32469_0" is full
  以上测试实例因不同的版本可能会有差异,建议大家亲自测试一下。
  另外,大家帮忙关注一下我的微信公众号: 数据库干货铺 ,将不定期有书籍及学习资料赠送

人民日报崔斌赞同孩子接触2至3个运动人民日报崔斌赞同孩子接触2至3个运动刘国梁委员建议每个孩子接触熟悉2个运动项目,人民日报崔斌表示赞同。时代的快速发展,加上生活节奏的加快,很多上班族每天的大部分时间都是在工作,在运乌兹别克斯坦人赞成丁克吗?乌兹别克斯坦姑娘认为什么时候该生孩子?她们对丁克又有什么样的看法?让我们听一听她们怎么说。阿齐扎古利亚莫娃,25岁,塔什干市,博主企业家我丈夫和我有两个很棒的儿子。我提心吊胆地为第特应性皮炎适用哪种润肤乳?求推荐!!!自从我家孩子走上寻医问药的路程,几乎所有看诊的医生都会说要注意皮肤保湿,刚开始没怎么注意,每天一次润肤乳都没有做到。随着孩子症状越来越严重,我也开始重视润肤这个问题了。从去年夏天开孕28周后产检的时候,这三个问题一定要清楚!胎位正不正,该如何纠正胎位?怀孕对于任何一个女性而言都是一个特别幸福的经历,但是与此同时,孕期中所面临的问题也远不止于此。随着孕期的进行,婴儿的生长和发育非常迅速,与此同时也会面临政策扶持支撑行业站上风口美恩早教托育园为入托婴幼儿设置了宽敞的户外活动场地。雅仔锦泰托育园在空间设计上力求通透,让入托婴幼儿更加感受到与外界环境的密切联系。正雅幼儿园外景。2月14日,汕头市举办第一批3岁小王子中最经典的25个句子,值得我们回味一生小王子是作家安东尼德圣埃克苏佩里于1942年写成的著名法国儿童文学短篇小说。故事讲述了小王子从自己星球出发前往地球的过程中,所经历的各种历险。作者以小王子的孩子式的眼光,透视出成人网红马小跳出轨成性,前妻晒照再曝猛料,每任小三他都给买戒指拥有一百多万粉丝的网红马小跳(原名马小飞),被前妻老梁曝出出轨,醉驾,违背妇女意志强行发生关系等黑料一事已经持续数天,获得了广大网友的关注。根据事件双方表现来看,网红马小跳几乎被实近七年的四部现象级电视剧,狂飙只能屈居第二早些年,或许是因为没有太多的娱乐活动,亦或者是影视剧的发展还处于初始阶段,所以每当有一部电视剧或者是电影问世时,都能得到广大观众群体的集体追捧。像上个世纪八十年代诞生的西游记,曾创甲流肆虐!孩子发热先护脑,瀚方医用退热凝胶安全退热物理降温!近日,甲流进入高发期,北京上海浙江天津等地均有学校因学生患甲流而停课。网上也有很多朋友表示自己中招,太难受了甲流很严重吗?很多人因为新冠的三年肆虐忽略了甲流,但甲流的传染性和致病率还在一刀切不让孩子看短视频?优秀的家长都在这样做自从我家娃上了小学,我常常都在他不行和他好像还行之间来回横跳。我自己从小是那种很让老师家长省心的娃儿,没怎么为学习的事情烦恼过。我真没想到有朝一日,我隔三差五就要为了学习的事情点头普通人每次打开电脑能做什么?今天教宝爸宝妈们给孩子做手抄报新学期已经过去好几周了,各位宝爸宝妈们孩子一周一到两张的手抄报做的还开心吗?心灵手巧多才多艺的宝爸宝妈们感觉和孩子一起设计完成手抄报是很快乐的亲子时光,但对于没有绘画天赋又有点小忙
能打85折的苹果官翻机买之前一定要注意这三点如果你最近有寻找过手机优惠,相信一定看到过官翻机这个词。在淘宝抖音等电商平台上搜索官翻机,也能够搜索到众多结果,其中不乏一些超低价产品。那么官翻机值得买吗?购买官翻机又有哪些需要注媒体人宁波男篮已签约CBA旧将中锋马尔科托多罗维奇直播吧10月6日讯今日,据媒体人所罗门的臣仆报道,宁波男篮已经签下上赛季效力于北控男篮的黑山籍中锋马尔科托多罗维奇。托多罗维奇(MarkoTodorovic),1992年4月出生,CBA季前赛杰克逊5记三分揽21分法尔47新疆4人得分上双力擒北京北京时间10月7日15时30分,202223赛季CBA季前赛第二比赛日,北京队对阵新疆队。历经一番角逐,新疆队7465战胜北京队。数据统计新疆队杰克逊21分5助攻3抢断,法尔4分7两战轰73分15篮板7封盖!加强版詹姆斯诞生了头条创作挑战赛北京时间10月7号,备受关注的NBA季前赛仍在火热进行中,联赛各队都在积极备战着,力争帮助球队能利用这几场热身赛完成阵容的磨合,以在新赛季拿到更多场次的胜利,吸引了不CBA10月7日辽宁对山东,杨鸣用青年军难求一胜,王晗没琼斯不会玩10月7日晚19点30,首先失利的辽宁男篮将迎战CBA季前赛第二个对手山东男篮,第一场失利对于杨鸣来说不算什么,杨鸣敢在第四节用五名年轻队员在场就是不怕输,把握不住机会输球对杨鸣来苹果手机,死磕SIM卡从iPhone诞生开始,苹果公司就开始对于SIM卡的改造,并一直延续至今。2010年,苹果在iPhone4机型上,首次应用了MicroSIM卡,将SIM卡的面积进行了很大程度上的缩SK追平久哲成第二位五冠教练,赛后深情发文,跟粉丝互怼引争议前言挑战者杯总决赛落下帷幕,武汉eStarPro力克强敌北京WB,卫冕成功的同时也拿到了队史第七冠,这也是他们一年之内拿到的第四个总冠军,可喜可贺。这场比赛eStar三军用命,虽然降低你的视觉疲劳感,2K档真护眼手机推荐现在总有一些手机厂商会去宣传自己的手机产品有什么护眼技术,但实际上仔细考究过后会发现他们的产品采用的并不是护眼性能更好的LCD屏幕,如果你非常在意手机的护眼效果,那么我还是更推荐你抄底时期已经来临!深圳政策不断放出1抄底抄底!抄底正当时!!近22年来房贷利率最低!比如贷款1000万30年可以省31。8万,降息就是降成本,国家在帮我们省成本,业内大佬和权威专家都一致认为,当前是最后的底部抄底时CBA3大消息广东队换掌舵人,辽宁连签3人,马尚想打辽宁队头条创作挑战赛CBA新赛季的比赛季前赛今日开打,广东队由于出现了战况,现在俱乐部全体球员一起进行隔离,没办法出征第一轮的比赛!这对于广东队来说很可惜!新赛季广东队不仅在阵容上有很大CBA赛程辽宁本钢VS山东高速,新闻排名积分榜GBSPORTS虽然刘志轩高诗妍等人离队,但辽宁男篮的主力格局并没有改变,这意味着下赛季夺冠大热门仍将是辽宁队。今年夏天,辽篮同时引进了五名球员,分别是张晨曦米爱丽张俊昊张立文和桑