首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL错误[1038] [HY001]:排序内存不足,请考虑增加服务器排序缓冲区大小

问SQL错误[1038] [HY001]:排序内存不足,请考虑增加服务器排序缓冲区大小
EN

Stack Overflow用户
提问于 2021-02-06 18:02:13
回答 1查看 300关注 0票数 0

我在mysql中创建了一个用于搜索文章的存储过程。所以当我想调用它的时候,我得到了这个错误。

SQL错误1038:排序内存不足,请考虑增加服务器排序缓冲区大小

我的代码目的是首先根据标题对文章进行排序,然后根据相对描述对文章进行排序。

另外,在增加缓冲区大小(并重新启动mysql服务,然后再次调用sp )之后,我得到这个错误: SQL Error S1000:无法从服务器检索事务只读状态。

代码语言:javascript
复制
create PROCEDURE art_usp_Article_Search(in SearchTerm varchar(200),in SortColumn varchar(100),in SortOrder varchar(5),in PageNumber int,in PageSize int)
BEGIN
    
    
    DECLARE StartRow INT;
    DECLARE EndRow INT;
    declare NSortColumn varchar(100);
    declare NSortOrder varchar(100);
    -- calculate the starting and ending of records
    SET NSortColumn = LOWER(IFNULL(SortColumn, ''));
    SET NSortOrder = LOWER(IfNULL(SortOrder, ''));
    SET StartRow = (PageNumber - 1) * PageSize  ;    
    SET EndRow = (PageNumber * PageSize)+1      ;   
    
    WITH CTETitleResult AS (
        SELECT ROW_NUMBER() OVER (ORDER BY 
            CASE 
                WHEN (@SortColumn = 'title' AND @SortOrder='asc') THEN title
                WHEN (@SortColumn = 'date' AND @SortOrder='asc') THEN date
            end
         ) AS RowNumber
        , COUNT(*) OVER () AS TotalCount
        ,id,code,categoryId ,title,shortDescription ,description ,tags ,content,date,time,typeId,isActive,isSpecial,visited,author,imageId,statusId,created_by,updated_by,created_at,updated_at
        FROM art_article aa 
        WHERE isActive = 1
         AND (
                 (IfNULL(SearchTerm, '') = '' OR title LIKE CONCAT('%', SearchTerm, '%'))
            )
    ),CTEDescriptionResult AS (
        SELECT ROW_NUMBER() OVER (ORDER BY 
            CASE 
                WHEN (@SortColumn = 'title' AND @SortOrder='asc') THEN title
                WHEN (@SortColumn = 'date' AND @SortOrder='asc') THEN date
            end
         ) AS RowNumber
        , COUNT(*) OVER () AS TotalCount
        ,id,code,categoryId ,title,shortDescription ,description ,tags ,content,date,time,typeId,isActive,isSpecial,visited,author,imageId,statusId,created_by,updated_by,created_at,updated_at
        FROM art_article aa 
        WHERE isActive = 1
         AND (
                 (IfNULL(SearchTerm, '') = '' OR shortDescription LIKE CONCAT('%', SearchTerm, '%'))
            )
    )
    SELECT *
        FROM CTETitleResult
        WHERE RowNumber > StartRow AND RowNumber < EndRow
        union       
        SELECT *
        FROM CTEDescriptionResult
        WHERE RowNumber > StartRow AND RowNumber < EndRow
        ORDER BY RowNumber;
    
END

call art_usp_Article_Search('','title','asc',1,10)
EN

回答 1

Stack Overflow用户

发布于 2021-02-08 21:18:48

临时解决方案

只需运行mysql查询

SET GLOBAL sort_buffer_size = 256000000 //服务器重启后会重置

要设置永久

编辑以下文件并添加

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

sort_buffer_size = 256000000

sudo服务mysql重启

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66075626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档