mysql 디스크의 tmp 테이블에 복사 건너 뛰기
큰 mysql 쿼리에 대한 질문이 있습니다. mysql이 대용량 쿼리 에 사용하는 디스크 단계의 tmp 테이블에 복사하는 것을 건너 뛸 수 있습니까? 아니면 더 빠르게 만들 수 있습니까? 이 단계는 내 쿼리 결과를 다시 가져 오는 데 너무 오래 걸리기 때문입니다. MySQL 페이지에서 mysql이 메모리를 절약하기 위해이 작업을 수행한다는 내용을 읽었지만 메모리 절약에 신경 쓰지 않습니다. 쿼리 결과를 빨리 되찾고 싶을뿐입니다. 컴퓨터에 충분한 메모리가 있습니다. 또한 내 테이블이 제대로 인덱싱되므로 쿼리가 느린 이유가 아닙니다.
도움이 필요하세요?
감사합니다
이로 인한 영향을 줄이기 위해 수행 할 수있는 두 가지 방법이 있습니다.
옵션 # 1 : 변수 tmp_table_size 및 / 또는 max_heap_table_size 늘리기
이 옵션은 메모리 내 임시 테이블이 너무 큰 것으로 간주되기 전에 얼마나 큰지 결정한 다음 임시 MyISAM 테이블로 디스크에 페이지를 표시합니다. 이 값이 클수록 '디스크의 tmp 테이블에 복사'할 가능성이 줄어 듭니다. 서버에 충분한 RAM 이 있고 단일 DB 연결에 자체 임시 테이블에 많은 RAM이 필요한 경우 max_connections 가 적당히 구성 되어 있는지 확인하십시오 .
옵션 # 2 : tmp 테이블에 RAM 디스크 사용
Linux에서 RAM 디스크를 구성한 다음 mysql 의 tmpdir 을 RAM 디스크가 마운트 된 폴더 로 설정할 수 있어야합니다.
우선, 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을 다시 시작하십시오.
옵션 # 3 : 최대한 빨리 tmp 테이블을 RAM 디스크로 가져옵니다 (먼저 옵션 # 2를 적용한다고 가정)
MySQL이 대용량 메모리 내 tmp 테이블을 RAM 디스크로 마이그레이션하는 바퀴를 돌리지 않도록 가능한 한 빨리 tmp 테이블을 RAM 디스크에 강제로 넣을 수 있습니다. /etc/my.cnf에 다음을 추가하십시오.
[mysqld]
tmpdir=/var/tmpfs
tmp_table_size=2K
mysql을 다시 시작하십시오. 이로 인해 가장 작은 임시 테이블도 RAM 디스크에서 바로 존재하게됩니다. 주기적으로 실행 ls -l /var/tmpfs하여 임시 테이블이오고가는 것을 볼 수 있습니다.
시도 해봐 !!!
경고
/ var / tmpfs 24/7에 임시 테이블 만 표시되는 경우 OS 기능 / 성능에 영향을 미칠 수 있습니다. / var / tmpfs가 과도하게 채워지지 않도록하려면 쿼리를 조정하십시오. 그러면 / var / tmpfs에서 구체화되는 tmp 테이블이 줄어 듭니다.
디스크 부분의 tmp 테이블 에 대한 복사를 건너 뛸 수도 있습니다 (선택한 답변에 응답하지 않음)
- 일부 데이터 유형을 피하는 경우 :
MEMORY에서 지원하지 않는 가변 길이 데이터 유형 (BLOB 및 TEXT 포함)에 대한 지원.
에서 https://dev.mysql.com/doc/refman/8.0/en/memory-storage-engine.html (또는 https://mariadb.com/kb/en/library/memory-storage-engine/ 당신이 경우 mariadb를 사용하고 있습니다).
- 임시 테이블이 충분히 작은 경우 : 선택한 답변에서 말했듯이
변수 tmp_table_size 및 / 또는 max_heap_table_size를 늘립니다.
그러나 쿼리를 더 작은 쿼리로 분할하면 (쿼리가 없어도 문제를 분석하는 데 도움이되지 않음) 메모리 임시 테이블에 맞출 수 있습니다.
참고 URL : https://stackoverflow.com/questions/7532307/skip-copying-to-tmp-table-on-disk-mysql
'program story' 카테고리의 다른 글
| Factory Girl-목적이 무엇인가요? (0) | 2020.12.05 |
|---|---|
| 방향 메타 데이터를 기반으로 JPEG 이미지를 회전하는 방법은 무엇입니까? (0) | 2020.12.05 |
| 데이터 프레임에있는 모든 열의 클래스를 가져 오는 방법은 무엇입니까? (0) | 2020.12.05 |
| C ++ 용 NumPy 스타일 배열? (0) | 2020.12.05 |
| 부트 스트랩 3-열 내부 사용자 지정 div의 100 % 높이 (0) | 2020.12.05 |