program story

mysql 디스크의 tmp 테이블에 복사 건너 뛰기

inputbox 2020. 12. 5. 09:44
반응형

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 테이블 대한 복사를 건너 뛸 수도 있습니다 (선택한 답변에 응답하지 않음)

  1. 일부 데이터 유형을 피하는 경우 :

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를 사용하고 있습니다).

  1. 임시 테이블이 충분히 작은 경우 : 선택한 답변에서 말했듯이

    변수 tmp_table_size 및 / 또는 max_heap_table_size를 늘립니다.

그러나 쿼리를 더 작은 쿼리로 분할하면 (쿼리가 없어도 문제를 분석하는 데 도움이되지 않음) 메모리 임시 테이블에 맞출 수 있습니다.

참고 URL : https://stackoverflow.com/questions/7532307/skip-copying-to-tmp-table-on-disk-mysql

반응형