我在mysql中创建了一个用于搜索文章的存储过程。所以当我想调用它的时候,我得到了这个错误。
SQL错误1038:排序内存不足,请考虑增加服务器排序缓冲区大小
我的代码目的是首先根据标题对文章进行排序,然后根据相对描述对文章进行排序。
另外,在增加缓冲区大小(并重新启动mysql服务,然后再次调用sp )之后,我得到这个错误: SQL Error 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)发布于 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重启
https://stackoverflow.com/questions/66075626
复制相似问题