【问题标题】:SQL Error [1038] [HY001]: Out of sort memory, consider increasing server sort buffer sizeSQL 错误 [1038] [HY001]: Out of sort memory, 请考虑增加服务器排序缓冲区大小
【发布时间】:2021-02-06 10:02:12
【问题描述】:

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

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

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

在增加缓冲区大小(并重新启动 mysql 服务,然后再次调用 sp)之后,我也收到此错误: SQL 错误 [S1000]: 无法从服务器检索事务只读状态

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)

【问题讨论】:

    标签: mysql stored-procedures buffer


    【解决方案1】:

    临时解决方案

    只运行mysql查询

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

    设置永久

    编辑下面的文件并添加

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

    sort_buffer_size = 256000000

    sudo 服务 mysql 重启

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2015-06-17
      • 2020-12-25
      • 2019-08-06
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多