source

MySQL의 "주요 효율성"이란

nicesource 2022. 11. 14. 21:37
반응형

MySQL의 "주요 효율성"이란

MySQL Workbench는 서버 상태와 관련하여 "Key Efficiency"라는 값을 보고합니다.이것은 무엇을 의미하며 무엇을 의미합니까?

alt 텍스트

MySQL.com에서 제공하는 '주요 효율성:

...실제로 그 수를 나타내는 것.

그래, 그게 무슨 뜻이지?서버를 어떻게 조정해야 하는지 알려주세요.

"Key Efficiency"는 MySQL 메모리에 저장된 인덱스 캐시에서 얼마나 많은 값을 얻고 있는지를 나타냅니다.키 효율성이 높은 경우 MySQL은 대부분의 경우 메모리 공간 내에서 키 검색을 수행합니다. 이는 디스크에서 관련 인덱스 블록을 검색하는 것보다 훨씬 빠릅니다.

주요 효율성을 높이는 방법은 MySQL의 인덱스 캐시에 시스템 메모리를 더 많이 할당하는 것입니다.이 방법은 사용하는 스토리지 엔진에 따라 달라집니다.MyISAM의 경우 key-buffer-size 값을 늘립니다.InnoDB의 경우 innodb-buffer-pool-size 값을 늘립니다.

그러나 Michael Eakins가 지적했듯이 운영체제는 최근에 액세스한 디스크 블록의 캐시도 보유하고 있습니다.사용 가능한 메모리가 많을수록 더 많은 디스크 블록을 캐시할 수 있습니다.또한 디스크 드라이브 자체(경우에 따라서는 디스크 컨트롤러도 포함)에도 캐시가 있어 디스크에서 데이터를 빠르게 검색할 수 있습니다.계층은 다음과 같습니다.

  1. fast - MySQL의 인덱스 캐시 내에서 인덱스 데이터를 검색합니다.이 비용은 메모리 조작을 몇 번 하면 됩니다.
  2. OS 파일 시스템 캐시에 저장된 인덱스 데이터를 검색합니다.이 비용은 시스템콜(읽기용)과 메모리 조작의 일부입니다.
  3. Disk 시스템 캐시(컨트롤러 및 드라이브)에 저장된 인덱스 데이터를 검색합니다.비용은 시스템 호출(읽기용), 디스크 장치와의 통신 및 일부 메모리 작업입니다.
  4. slowest - 디스크 표면에서 인덱스 데이터를 검색합니다.비용은 시스템 호출, 장치와의 통신, 디스크의 물리적 이동(암 이동 + 회전)입니다.

실제로 시스템이 매우 혼잡하지 않으면 1과 2의 차이는 거의 눈에 띄지 않습니다.또, 사용의 시스템의 스페어 RAM이 디스크 컨트롤러보다 적은 경우는, 시나리오 3이 유효하게 되는 일은 거의 없습니다.

MyISAM 테이블은 인덱스 캐시(512MB)는 비교적 작지만 시스템 메모리(64GB)는 대용량이므로 인덱스 캐시의 크기를 늘리는 것의 가치를 나타내는 것은 어렵습니다.서버에서 어떤 일이 일어나느냐에 따라 다르겠죠.MySQL 데이터베이스만 실행 중인 경우 OS 캐시가 매우 효과적일 수 있습니다.그러나 동일한 서버에서 다른 작업을 실행하고 이러한 작업이 많은 메모리/디스크 액세스를 사용하는 경우 MySQL이 Disk를 더 자주 히트하도록 캐시된 귀중한 인덱스 블록이 제거될 수 있습니다.

흥미로운 연습(시간이 있는 경우)은 시스템을 느리게 작동하도록 고치는 것입니다.큰 테이블에서 표준 워크로드를 실행하여 영향이 두드러질 때까지 MySQL 버퍼를 줄입니다.파일 시스템(cat large-file > /dev/null)에 대량의 관련 없는 데이터를 저장함으로써 파일 시스템 캐시를 플래시합니다.쿼리 실행 시 상태를 확인합니다.

「키 효율」은, 키의 우수성을 나타내는 지표가 아닙니다.적절하게 설계된 키는 높은 "Key Efficiency"보다 퍼포먼스에 훨씬 더 큰 영향을 미칩니다.유감스럽게도 MySQL은 도움이 되지 않습니다.

Key_read_requests는 캐시에서 키 블록을 읽기 위한 요청 수입니다.key_reads는 디스크에서 키 블록의 물리적 읽기 수입니다.따라서 이 두 변수는 독립적으로 증가할 수 있습니다.(http://bugs.mysql.com/bug.php?id=28384)

그건 여전히 진흙처럼 맑다.

다음 설명으로 넘어가겠습니다.

Key_reads의 부분적으로 유효한 사용

Key_reads를 조사하는 데는 부분적으로 타당한 이유가 있습니다.이는 디스크의 속도가 컴퓨터의 다른 부품에 비해 매우 느리기 때문입니다.여기서 Key_reads는 실제로 물리적 디스크 읽기가 아니기 때문에 위의 "대부분 사실"로 돌아갑니다.요청된 데이터 블록이 운영 체제 캐시에 없는 경우 Key_read는 디스크 읽기입니다. 그러나 캐시된 경우에는 시스템 호출일 뿐입니다.단, 증명하기 어려운 첫 번째 가정은 다음과 같습니다.

증명하기 어려운 전제 조건 #1: Key_read는 물리 디스크의 판독에 대응하고 있는 경우가 있습니다.이 가정을 사실로 받아들인다면 Key_reads를 신경 쓸 다른 이유가 있을까요?이러한 가정은 "캐시 미스 속도는 캐시 히트보다 훨씬 느리다"로 이어집니다.Key_read_request만큼 빠르게 Key_read를 실행할 수 있다면 키 버퍼는 어떤 용도로 사용됩니까?내 말을 믿자ISAM의 크리에이터는 캐시 히트를 미스보다 빠르게 설계했기 때문입니다.(http://planet.mysql.com/entry/?id=23679)

언급URL : https://stackoverflow.com/questions/3845014/what-is-mysql-key-efficiency

반응형