前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 临时数据空间不足导致SQL被killed 的问题与扩展

MySQL 临时数据空间不足导致SQL被killed 的问题与扩展

作者头像
AustinDatabases
发布于 2023-12-01 04:38:16
发布于 2023-12-01 04:38:16
55900
代码可运行
举报
文章被收录于专栏:AustinDatabasesAustinDatabases
运行总次数:0
代码可运行

最近在MySQL运行中应用程序报错,/home/mysql/data3009/tmp/#sql_14cdb_24' is full" 。

一般来说在MySQL在运行中有很多的cache来支持相关的语句执行的工作,临时表在MySQL 中有重要的作用,如

tmp_table_size max_heap_table_size max_tmp_tables 这些参数制定在内存中存储的临时表的最大的大小,tmp_table_size 直接制定在内存中存储的临时表的最大值, max_heap_table_size 指定在heap存储引擎的最大临时表的大小,同时max_tmp_tables 用来指定一个线程可以创建的最大的临时表的数量。 而上面这些参数,在设置不足的情况下,就可能发生上面的问题,尤其在MySQL中执行一些大SQL 和 过度使用MySQL 将其当做OLAP的应用场景使用的情况下,会容易发生上面的错误。 一般简单的情况下,可以通过调高上面的参数来,临时解决问题。一般来说在8 -16MB,不建议MySQL数据库超过这个值,基本触发tmp_table_size 产生的情况为语句中有group by ,order by 等语句导致数据需要进行收集后的排序导致的,使用tmp_table. tmp_table_size = 8 * 1024 * 1024; 另外再进行语句操作中sort_buffer_size 是另一个控制语句中数据排序操作的缓冲区的设置,设置较大的缓冲区有助于排序的操作。当然需要注意在内存不足的时候,这些设置会导致操作在磁盘上进行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[mysqld]
tmp_table_size = 16M
sort_buffer_size = 2M

这里在调整了tmp_table_size 参数后,将原有数据库的参数调整为现有参数的3倍后,问题解决,同时也调整了一些其他的参数。 这里对这些参数进行一个回顾和在学习 1 tmp_table_size :参数设置主要负责临时表在内存中最大的写入的大小,与这个参数有关的MySQL的动作有 创建临时表,如 create temporary table , 或MySQL 根据数据处理中的需求,自助创建临时表,这个参数在MySQL 8.028 开始有了改变,在tmp_table_size 达到使用的限制的时候,MySQL会自动将内存中的内部临时表转换为innodb磁盘上的内部临时表,这个参数限制内存的使用,主要的目的是防止个别查询过多消耗temptable的资源。 2 sort_buffer_size :sort_buffer_size 主要是在针对SQL运算中的无法通过查询优化,或索引进行改进的情况下,数据库针对数据排序进行的另一种优化的方式。

3 max_heap_table_size : 在使用heap内存数据存储引擎的时候,会对创建的临时表进行中间结果的存储,这里heap的存储部分会通过max_heap_table_size来进行限制,这里产生临时表的过程主要是ORDER BY ,GROUP BY 等语句会产生相关的需求,另外再表连接中也可能会使用,另外还有没有索引的情况下,也有可能会使用。 4 innodb_disable_sort_file_cache: 这个参数是针对排序文件是否使用文件来进行限制,如果设置为 1 将禁止使用缓存文件,这里就只能使用缓存而当缓存不足,就无法创建磁盘文件,所以产生上面的错误也有可能是这个参数被设置为1 。 所以在遇到上面的错误的情况下,可以针对这四个参数进行检查,将相关的设置进行变动,常识解决遇到SQL 执行报错临时文件无法生成的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mysql配置文件 扩展详细配置(下)
避免MySQL的外部锁定,减少出错几率增强稳定性。 5以前版本skip-locking,新版本skip-external-locking
陈不成i
2021/06/15
1.2K0
临时表tmp table如何避免
1、配置文件参数my.cnf tmp_table_size=64M max_heap_table_size=64M tmpdir = /data/mysql/tmp 2、优化Tips: 如果Created_tmp_disk_tables/ Created_tmp_tables应该小于20%,如果比值较高,就需要适当调高tmp_table_size或者max_heap_table_size的值,让Mysql在内存中完成临时表的操作,减少使用硬盘对性能和响应时长的影响。 在调高tmp_table_size或者m
MySQL轻松学
2018/03/09
3.7K0
多场景下MySQL临时表的作用
墨墨导读:MySQL临时表在很多场景中都会用到,比如用户自己创建的临时表用于保存临时数据,以及MySQL内部在执行复杂SQL时,需要借助临时表进行分组、排序、去重等操作。下面将会对MySQL临时表的一些概念、分类和常见问题进行整理。
数据和云
2020/08/06
4.9K0
多场景下MySQL临时表的作用
MySQL系统变量优化详述
1、全局内存缓冲区 1)key_buffer_size     该变量是只存储MyISAM索引信息的全局内存缓冲区。在对应的.MYI文件中的索引数据从磁盘上被读取出来然后存入这个缓冲区。想要调整key_buffer_size的大小,只需要简单统计所有MyISAM表中总索引的大小,然后随着数据随时间增长而调整。  当这个索引码缓冲区中没有足够的空间来存储新的索引数据时,将会用最近最少使用的的方法覆盖掉旧的页面。 2)innodb_buffer_pool_size     innodb_buffer_pool_size是用来存储所有InnoDB数据和索引的全局内存缓冲区。对完全使用InnoDB的数据库来说,这是个很重要的缓冲区,一定要正确分配,不正确的分配这个缓冲区可能导致额外的磁盘IO开销并降低查询性能。     常见的方法是把innodb_buffer_pool_size设定为RAM的80%,但是很多情况下这样设定不合理,如RAM大小50G,而数据库总量只有2G。     可以使用SHOW GLOBAL STATUS或者SHOW ENGINE INNODB STATUS命令来监控InnoDB缓冲池的使用情况。 MySQL> SHOW GLOBAL STATUS LIKE 'innodb_buffer%'; +---------------------------------------+--------------------------------------------------+ | Variable_name                        | Value                                            | +---------------------------------------+--------------------------------------------------+ | Innodb_buffer_pool_dump_status        | Dumping of buffer pool not started              | | Innodb_buffer_pool_load_status        | Buffer pool(s) load completed at 180330 16:27:30 | | Innodb_buffer_pool_resize_status      |                                                  | | Innodb_buffer_pool_pages_data        | 51679                                            | | Innodb_buffer_pool_bytes_data        | 846708736                                        | | Innodb_buffer_pool_pages_dirty        | 0                                                | | Innodb_buffer_pool_bytes_dirty        | 0                                                | | Innodb_buffer_pool_pages_flushed      | 116888                                          | | Innodb_buffer_pool_pages_free        | 1024                                            | | Innodb_buffer_pool_pages_misc        | 4641                                            | | Innodb_buffer_pool_pages_total        | 57344                                            | | Innodb_buffer_pool_read_ahead_rnd    | 0                                                | | Innodb_buffer_pool_read_ahead        | 0                                                | | Innodb_
星哥玩云
2022/08/16
8720
Mysql优化系列(1)--Innodb引擎下mysql自身配置优化
1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。 2.之所以选用innodb作为存储引擎的
洗尽了浮华
2018/01/23
2.6K0
MySQL性能参数配置总结
以下List是我们常见的MySQL参数配置,这个参数对提高实例的性能大有裨益。 其中 建议设置值,仅供参考,需要根据自己的业务场景和硬件资源仔细推敲。 参数 设置说明 建议设置值 lower_case_table_names 大小写敏感:此参数不可以动态修改,必须重启数据库:0.表名存储为给定的大小和比较是区分大小写的1.表名存储在磁盘是小写的,但是比较的时候是不区分大小写 2.表名存储为给定的大小写但是比较的时候是小写的 0 max_connections 最大链接数据 2000 max_connect_
星哥玩云
2022/08/17
7830
数据库MySQL-优化配置参数
Mysql可以通过启动时指定参数和使用配置文件两种方法进行配置,在大多数情况下配置文件位于/etc/my.cnf 或者是 /etc/mysql/my.cnf在Windows系统配置文件可以是位于C://windows//my.ini文件,MySQL查找配置文件的顺序可以通过以下方法获得。
cwl_java
2020/02/13
7.5K0
数据库MySQL-优化配置参数
mysql造数据占用临时表空间
MySQL在处理复杂查询时,有时会使用临时表来存储中间结果。当这些临时表占用大量空间时,可能导致性能下降甚至服务中断。本文将深入探讨临时表空间的占用问题,分析常见问题,指出易错点,并提供避免和优化的策略。
Jimaks
2024/05/20
3690
MySQL性能优化之参数配置
通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。
跟着阿笨一起玩NET
2022/05/10
2.9K0
MySQL8.0中消失又回来的磁盘临时表
首先,我是一个标题党^_^,写这样的标题就是为了吸引你们来看的。标题中说的磁盘临时表消失,并不是真的消失了,而是在MySQL默认配置下,从8.0.15到8.0.27的版本都不会产生磁盘临时表(8.0.15之前的版本没有做个测试,就不妄下结论了),在8.0.28及之后的版本中,默认配置又放开了磁盘临时表(文章中未特殊说明时都指内部临时表,非用户创建临时表)的使用,这是什么情况?请容我慢慢道来。
GreatSQL社区
2023/02/23
9630
MySQL临时表在高并发环境下可能导致哪些性能问题?
MySQL是一款广泛使用的关系型数据库管理系统,在高并发环境下,数据库性能是至关重要的。然而,在使用临时表时,特别是在高并发环境中,可能会遇到一些性能问题。
用户1289394
2024/07/10
1940
MySQL临时表在高并发环境下可能导致哪些性能问题?
故障分析 | MySQL 5.7 使用临时表导致数据库 Crash
在 MySQL5.7.30 主从读写分离环境下,从库在某天出现了 MySQL crash.
爱可生开源社区
2022/05/13
5810
为什么MySQL内存占用这么大? for InnoDB
这是 Innodb 引擎最重要的缓存,也是提升查询性能的重要手段。一般是global共享内存中占用最大的部分。在进行 SQL 读和写的操作时,首先并不是对物理数据文件操作,而是先对 buffer_pool 进行操作,然后再通过 checkpoint 等机制写回数据文件。占用的内存启动后就不会自动释放,默认通过LRU的算法镜像缓存淘汰,每次的新数据页,都会插入buffer pool的中间,防止前面的热数据被冲掉,长时间没动静的冷数据,会被淘汰出buffer pool,但是是被其它新数据占用了,所以一般这里不会释放的,除非重启(5.7 开始支持动态调整,默认以128M的chunk单位分配内存块)。innodb_buffer_pool主要包含数据页、索引页、undo 页、insert buffer、自适应哈希索引、锁信息以及数据字典等信息。
elontian田凌翔
2019/11/11
7.9K0
为什么MySQL内存占用这么大? for InnoDB
MySQL 优化配置参数(my.cnf)
max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000 max_connect_errors:如果客户端尝试连接的错误数量超过这个参数设置的值,则服务器不再接受新的客户端连接。可以通过清空主机的缓存来解除服务器的这种阻止新连接的状态,通过FLUSH HOSTS或MySQLadmin flush-hosts命令来清空缓存。这个参数的默认值是100,一般将该参数设置为100000。
星哥玩云
2022/08/17
1.6K0
mysql 性能优化方案 (转)
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化。 mysql> show global status;   可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一、
wangxl
2018/03/07
1.5K0
MySQL8的临时表
在磁盘上的内部临时表过多时(created_tmp_disk_tables),需要增大参数tmp_talble_size,temptable_max_ram,temptable_max_mmap。
cuiyi
2023/01/03
3.9K0
MySQL配置优化
转载自http://www.cnblogs.com/luyucheng/p/6340076.html
allsmallpig
2021/02/25
1.2K0
MySQL(一)|性能分析方法、SQL性能优化和MySQL内部配置优化
我曾经在公司处理过很多次Mysql性能上的问题,利用一些Linux常用的命令来查看Mysql对服务器的CUP和I/O使用情况,通过慢查询日志找出有待优化的sql,通过show processlist查看正在执行的sql的情况以及及时kill死锁的sql,通过EXPLAIN分析需要优化的sql语句。当然也对Mysql内部配置做了一些调整。 最近也在看《高性能MySQL》这本Mysql的经典书籍,很早的时候我就想写一个系列来介绍我在使用Mysql遇到的一些问题。无意中发现一篇博客写的内容和我想写的基本差不
黄小怪
2018/05/21
3.2K0
Linux中MySQL配置文件my.cnf参数优化
MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的。MySQL的参数优化也不例外,对于不同的需求,还有硬件的配置,优化不可能又最优选择,只能慢慢的进行优化,需要不断的调试,才能达到不同环境的最优选择。 首先介绍一下MySQL配置文件中不同模块 [client] MySQL客户端应用模块,只有MySQL附带的客户端应用程序保证可以读取此模块下的内容。 [mysqld] MySQL服务端应用模块 [client] port = 3306 socket
863987322
2018/01/24
3.7K0
MySQL临时表空间避坑指南
最近遇到一个MySQL数据导入时候遇到问题,先来看下问题产生的具体报错信息如下所示:
SEian.G
2022/03/30
4K0
相关推荐
Mysql配置文件 扩展详细配置(下)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验