记Mysql 查询报Out of sort memory错误的总结

文章讲述了在遇到MySQL查询时出现Outofsortmemory错误的原因,该错误通常是由于排序操作超过排序缓存区大小导致的。解决方案包括增加排序缓存区大小、降低查询数据量、重设计查询语句和修改服务器内存配置。可以通过修改my.cnf配置文件或使用SET命令临时调整sort_buffer_size,并建议对查询语句的WHERE和ORDERBY字段建立合适索引来优化。
摘要由CSDN通过智能技术生成

一、起因:

        使用一个SQL查询的时候,由于业务需要,需要对相关字段按照某个字段进行排序,且进行LIMIT 数据分页,发现查询的报错。

二、分析

2.1 为什么会出现这个问题呢?又怎么解决这个问题呢?

经过搜索资料查询,大概确定了几个问题:

1)当使用MySQL服务器执行大量排序操作时,就可能会遇到以下错误:“Out of sort memory,重新分配了XXX字节”。这个错误表示MySQL服务器在执行排序时耗尽了所有分配给排序操作的内存,导致操作失败。

出现这个错误的原因是,MySQL服务器会在内存中创建一个排序缓存区,用于存储将要排序的数据。如果排序操作涉及的数据太多,超过了MySQL服务器为排序操作分配的缓存空间大小,那么就会出现“Out of sort memory”错误。

可在Mysql 的sql 界面排序缓存区的大小查询:

SHOW VARIABLES LIKE '%SORT_BUFFER_SIZE%';

 我这跟一些人的大小不一样,我的约 1M左右,

应对这个问题,可以采取以下措施:

1. 增加排序缓存区的大小。可以通过在服务器上修改MySQL的配置文件,适当调整排序缓存区的大小。

两个方案:

1)修改mysql的配置文件 my.cnf

[mysqld]
sort_buffer_size = 1048576

修改后重启服务即可

2)直接navicat 命令工具中通过SET来设置(必须要有SUPER权限)

SET SESSION sort_buffer_size = 2048* 1024; – 修改当前session连接的值
SET GLOBAL sort_buffer_size = 2048* 1024;-- 修改全局变量的值;

上述命令只会修改当前的mysql实例的排序缓存区大小,不修改配置文件,重启后会恢复配置文件的大小

直接修改配置文件,

2. 降低排序查询返回的数据量。可以通过限制查询语句的返回结果数量,或者增加查询的限制条件,来减少排序查询涉及的数据量。

3. 重新设计查询语句。可以通过重新设计查询语句,去除掉排序操作,或将排序操作转移到客户端执行,从而避免在MySQL服务器上执行排序操作。

        一般出现这个报错,sql的执行计划会伴随出现,Using where;Using Filesort

这就是SQL查询语句中一般出现了WHERE 、ORDER BY 加 LIMIT ,我们可以对 相关的where字段以及ORDER BY的字段做组合索引,按照where 条件的字段、order by的字段遵循最左原则,从左到右新增。

4. 修改服务器内存配置。可以通过增加服务器的物理内存,或者调整MySQL服务器的内存配置参数,来扩大排序缓存区的大小。 

注意事项:Mysql配置文件修改后注意重启

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多线程编程是指在Java语言中使用多个线程来同时执行多个任务,以提高程序的并发性能和响应速度。Java多线程编程PDF是一本介绍Java多线程编程的PDF文档,其中包含了Java多线程编程的基本概念、原理、技术和实践经验。该PDF文档可以帮助读者快速了解Java多线程编程的相关知识,并提供实用的编程示例和案例分析,有助于读者掌握Java多线程编程的核心技术和方法。 在Java多线程编程PDF中,读者可以学习到如何创建和启动线程、线程的状态和生命周期、线程间的通信与同步、线程池的使用、并发容器等相关内容。同时,该PDF文档还介绍了Java中的并发包(concurrent package)的使用和实现原理,以及多线程编程中的常见问题和解决方案。 通过学习Java多线程编程PDF,读者可以深入了解Java多线程编程的理论和实践,掌握多线程编程的核心知识和技能,提高自己的并发编程能力,为开发高性能、高并发的Java应用程序打下坚实的基础。同时,对于已经掌握多线程编程知识的读者来说,该PDF文档也能够帮助他们进一步巩固和扩展自己的多线程编程技能,提升自己的编程水平和竞争力。 总之,Java多线程编程PDF是一本全面介绍Java多线程编程的优秀文档,对于Java程序员来说具有很高的参考价值,可以帮助他们在多线程编程领域取得更好的成就。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值