오류 "1038 메모리가 부족합니다. 정렬 버퍼 크기를 늘리는 것을 고려하십시오.
symfony2(symfony2)에 오류를 트리거하는 쿼리가 있습니다.
Error "1038 Out of sort memory, consider increasing server sort buffer size
쿼리:
$queryBuilder = $this
->createQueryBuilder('object')
->leftJoin('object.objectCategory', 'c')
->leftJoin('object.medias', 'm')
->leftJoin('object.recipients', 'r')
->leftJoin('object.answers', 'a')
->leftJoin('object.tags', 't')
->leftJoin('object.user', 'u')
->leftJoin('object.votes', 'v')
->leftJoin('object.comments', 'comments')
->leftJoin('v.user', 'vuser')
->addSelect('c, t, v, u')
->groupBy('object, c, t, v, u')
->where('object.isVisible = :isVisible')
->orderBy('object.createdAt', 'DESC')
->setParameter('isVisible', true)
->addSelect('SUM(v.value) AS HIDDEN vote_value')
->orderBy('vote_value', 'DESC')
;
내가 그 그룹을 생략하면, 그럭저럭 잘 굴러간다.select 및 group by less elements를 추가하면 정상적으로 실행되지만, 그 후 더 많은 서브쿼리가 트윗 템플릿에서 실행됩니다.
이 쿼리를 최적화하여 오류가 발생하지 않도록 하거나 메모리를 더 할당하여 오류를 제거할 수 있는 방법(이상적으로는 이 쿼리에만 해당)을 선택합니다.
mysql 쿼리만 실행
SET GLOBAL sort_buffer_size = 256000000 // It'll reset after server restart
영속적으로 설정하려면
아래 파일을 편집하여 추가
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
sort_buffer_size = 256000000
sudo service mysql restart
MySQL에 해결되지 않은 문제가 있어 json 열이 있는 테이블에서 정렬하려고 할 때 이 오류가 발생합니다.MySQL > = 8.0.18에 영향을 미치는 것 같습니다.제 답변으로, 팀은 아직 버그 여부를 검토하고 있습니다.이 영향을 받는 경우 해당 스레드에 대한 피드백을 제공해 주십시오.
버퍼 크기를 늘리는 것이 해결책이지만 IMO는 실제로 필요하지 않습니다.json 컬럼이 있는 테이블에서 숫자 프라이머리 키를 사용하여 주문해도 이 문제가 발생할 수 있기 때문입니다.
제 경험상 버퍼 사이즈는 json 컬럼의 콘텐츠 길이에 비례하기 때문에 버퍼 사이즈를 조정하는 것은 그다지 신뢰성이 높지 않습니다.따라서 즉각적인 문제를 해결할 수 있지만 데이터 세트가 증가하면 다시 조정할 필요가 있습니다.
mysql 버퍼 크기를 늘려야 할 수 있습니다./etc/mysql/my.cnf
, 예를 들어 다음과 같습니다.
[mysqld]
sort_buffer_size=256k
docker mysql 컨테이너를 사용하는 경우 docker-compose.yml에 다음 설정을 추가합니다.
db:
image: mysql:8
command: --sort_buffer_size=512K
따라서 답은 버퍼 크기를 늘리는 것이 아니라(그리고 일반적으로 MySQL의 기본 설정을 건드리지 않도록), 쿼리의 품질을 확인하거나 자주 실행하는 열에 인덱스를 추가하는 것입니다.
구문:
CREATE INDEX [index name] ON [table name]([column name]);
델 텔레폰 어드바이저:https://dev.mysql.com/doc/refman/8.0/en/create-index.html
제 경우, 정렬 버퍼 크기를 늘리지 않고 실제로 도움이 된 것은 주문한 필드에 대한 인덱스를 작성하는 것이었습니다.테이블을 접합할 때는 효과가 있을지 모르겠지만, 큰 테이블을 1개 주문하려고 할 때는 효과가 있습니다.
큰 json 데이터가 있는 열을 선택하면 이 오류가 발생할 수 있습니다.html 페이지가 있는 json column을 select statement에서 삭제하여 오류를 수정하였습니다.
언급URL : https://stackoverflow.com/questions/29575835/error-1038-out-of-sort-memory-consider-increasing-sort-buffer-size
'IT' 카테고리의 다른 글
pylab과 pyplot의 차이점은 무엇입니까? (0) | 2022.10.28 |
---|---|
스위치가 다음과 같은 경우보다 빠른 이유 (0) | 2022.10.28 |
네임스페이스 내에 클래스가 있는지 확인하는 방법 (0) | 2022.10.28 |
fetch를 사용한 기본 인증? (0) | 2022.10.28 |
IntelliJ의 코드 커버리지 정보 클리어 (0) | 2022.10.28 |