disk mysql의 tmp 테이블로 복사 건너뛰기
대형 mysql 문의에 대한 질문이 있습니다.mysql이 큰 쿼리에서 실행하는 디스크 스텝의 tmp 테이블로의 복사를 생략할 수 있습니까, 아니면 더 빨리 진행할 수 있습니까?이 단계는 쿼리 결과를 되돌리는데 너무 오래 걸리기 때문입니다.MySQL 페이지에서 mysql이 메모리 절약을 위해 이 작업을 수행한다고 읽었지만 메모리 절약을 신경쓰지 않습니다. 쿼리 결과를 빨리 가져오고 싶을 뿐입니다.제 머신에 충분한 메모리가 있습니다.또한 테이블이 적절하게 색인화되어 있기 때문에 쿼리가 느려지는 것은 아닙니다.
도움이 필요하신가요?
감사해요.
이것으로 인한 영향을 줄이기 위해 할 수 있는 두 가지 방법이 있습니다.
OPTION #1 : 변수 tmp_table_size 및/또는 max_heap_table_size를 늘립니다.
이러한 옵션에 의해 메모리 내 임시 테이블이 너무 크다고 간주되어 임시 MyISAM 테이블로 디스크에 페이지될 때까지 테이블 크기가 결정됩니다.이러한 값이 클수록 '디스크의 tmp 테이블에 복사'될 가능성이 낮아집니다.단일 DB 연결에서 자체 임시 테이블에 많은 RAM이 필요한 경우 서버에 충분한 RAM이 있고 max_connections(최대접속수)가 적절하게 구성되어 있는지 확인하십시오.
옵션 #2: tmp 테이블에는 RAM 디스크를 사용합니다.
리눅스에서 RAM Disk를 구성한 다음 mysql의 tmpdir를 RAM Disk가 마운트된 폴더로 설정할 수 있습니다.
우선, OS 로 RAM 디스크를 설정합니다.
Linux에서 /var/tmpfs라는 폴더를 만듭니다.
mkdir /var/tmpfs
다음으로 /etc/fstab에 이 행을 추가합니다(예를 들어 16GB RAM 디스크를 사용하는 경우).
none /var/tmpfs tmpfs defaults,size=16g 1 2
서버를 재기동합니다.
메모: 재기동하지 않고 RAM 디스크를 작성할 수 있습니다.서버 재부팅 후 RAM 디스크를 사용하려면 위의 행을 /etc/fstab에 추가해야 합니다.
MySQL의 경우:
/etc/my.cnf에 이 행을 추가합니다.
[mysqld]
tmpdir=/var/tmpfs
mysql을 재시작합니다.
OPTION #3 : tmp 테이블을 가능한 한 빨리 RAM 디스크로 가져옵니다(OPTION #2를 먼저 적용한다고 가정).
MySQL이 메모리 내 대형 tmp 테이블을 RAM 디스크로 마이그레이션하는 휠을 회전시키지 않도록 가능한 한 빨리 tmp 테이블을 RAM 디스크에 강제로 삽입할 수 있습니다.다음 내용을 /etc/my.cnf에 추가합니다.
[mysqld]
tmpdir=/var/tmpfs
tmp_table_size=2K
mysqlmysql을 다시 시작합니다.이것에 의해, 극히 작은 온도 테이블도 RAM 디스크에 바로 표시됩니다.으로 실행할 수 .ls -l /var/tmpfs
임시직 테이블이 왔다 갔다 하는 걸 보게 될 거야
시험해 보세요!!!
경고
/var/tmpfs 24/7에 임시 테이블만 표시되는 경우 OS 기능/퍼포먼스에 영향을 줄 수 있습니다./var/tmpfs가 과도하게 채워지지 않도록 하려면 쿼리 조정을 검토하십시오.그러면 /var/tmpfs에서 실현되는 tmp 테이블이 적어집니다.
디스크 부분의 tmp 테이블에 복사하는 것도 생략할 수 있습니다(선택한 답변에서는 응답하지 않습니다).
- 일부 데이터 유형을 사용하지 않는 경우:
가변 길이 데이터 유형(BLOB 및 TEXT 포함)은 MEMORY에서 지원되지 않습니다.
https://dev.mysql.com/doc/refman/8.0/en/memory-storage-engine.html(또는 mariadb를 사용하는 경우 https://mariadb.com/kb/en/library/memory-storage-engine/)에서 확인하십시오.
- 선택한 답변에서 설명한 대로 임시 테이블이 충분히 작을 경우 다음 작업을 수행할 수 있습니다.
변수 tmp_table_size 및/또는 max_heap_table_size를 늘립니다.
단, 쿼리를 작은 쿼리로 분할한 경우(쿼리가 없는 경우 문제 분석에 도움이 되지 않음) 메모리 임시 테이블에 적합하도록 만들 수 있습니다.
언급URL : https://stackoverflow.com/questions/7532307/skip-copying-to-tmp-table-on-disk-mysql
'source' 카테고리의 다른 글
gradle.properties와 settings.gradle을 사용하는 경우 (0) | 2023.01.28 |
---|---|
vuex 상태를 html 입력 요소에 바인딩하지 않았는데도 구성 요소 수준 상태를 변경하면 vuex 상태가 변경되는 이유는 무엇입니까? (0) | 2023.01.19 |
$물건을 보다 (0) | 2023.01.19 |
"new" 대신 "Object.create" 사용 (0) | 2023.01.19 |
Window.resize 또는 document.resize 중 어느 것이 동작하고 어떤 것이 동작하지 않는가?VueJS (0) | 2023.01.19 |