로깅은 MySQL 성능을 저하시킵니다. 왜 그렇습니까?


9

꽤 이미 사이트에이 어디에 대한 답변을 볼 수 없습니다 놀랐어요, 나 MySQL의 문서에 ( 섹션 5.2 , 그렇지 않으면 잘 덮여 로그인 것 같습니다!)

binlogs를 활성화하면 약간의 추가 IO로 예상되는 작은 성능 저하 (주관적으로)가 표시되지만 일반적인 쿼리 로그를 활성화하면 막대한 성능 저하가 발생합니다 (쿼리 실행 시간의 두 배, 또는 더 나쁘게), binlogs로 보는 것을 초과합니다. 물론 모든 SELECT 및 모든 UPDATE / INSERT를 기록하고 있지만 다른 데몬은 정지하지 않고 모든 요청 (Apache, Exim)을 기록합니다.

IO와 관련하여 성능 "티핑 포인트"에 가까워지는 효과를 보입니까, 아니면 쿼리를 로깅하는 데 근본적으로 어려운 문제가 있습니까? 개발을 쉽게하기 위해 모든 쿼리를 기록 할 수 있기를 원하지만 일반적인 쿼리 로깅을 사용하여 성능을 회복해야하는 하드웨어 종류를 정당화 할 수는 없습니다.

물론 느린 쿼리를 기록 하고이 기능을 사용하지 않으면 일반적인 사용법이 무시할만한 수준으로 향상됩니다.

(이 모든 것은 Ubuntu 10.04 LTS, MySQLd 5.1.49에 있지만 연구는 이것이 보편적 인 문제라고 제안합니다)

답변:


9

일반 쿼리 로그는 이진 로그보다 훨씬 많은 IO입니다. 대부분의 SQL Server가 90 % 읽기에서 10 % 쓰기라는 사실 외에도 이진 로그는 적은 디스크 공간을 사용하는 일반 텍스트가 아닌 이진 형식으로 저장됩니다. (공간이 얼마나 적습니까? 잘 모르겠습니다. 죄송합니다.)

Apache와 Exim이 성능에 큰 영향을주지 않고 모든 요청을 기록 할 수있는 이유는 두 가지가 있습니다. 첫 번째는 요청이 발생했다는 사실을 기록하지만 로그에 넣는 내용은 일반적으로 실제 요청보다 상당히 작다는 것입니다. HTTP 요청은 종종 로그에 들어가는 행보다 두 배나 크며 짧은 일반 텍스트 전자 메일도 함께 제공되는 로그 행보다 10 배 또는 20 배 더 큽니다. 첨부 파일이 10MB 인 전자 메일에는 여전히 로그에 몇 줄만 기록됩니다.

이에 대한 두 번째 부분은 일반 웹 애플리케이션에는 일반적으로 단일 HTTP 페이지와 연관된 수십 개의 SQL 쿼리가 있다는 것입니다. 이메일은 HTTP 요청보다 훨씬 적은 수로 제공됩니다. MySQL 서버가 아마도 Apache 나 Exim보다 훨씬 더 많은 로그를 기록하려고합니다.

하루가 끝날 때 MySQL 바이너리 및 일반 로그와 Apache 및 Exim 로그의 크기 (압축되지 않은)를 확인하십시오. MySQL 일반 로그가 최소 5 배 큰 것임을 알 수있을 것입니다.


1
몇 가지 좋은 점, 특히 응용 프로그램에 대한 단일 GET은 100의 SELECT를 유발할 수 있습니다. 비록 단일 쿼리에서 최대한 많은 노력을 기울이려고 할 때 때때로 우리는 이것의 성능 / 청결성을 상쇄하기 때문에 더 우아한 구조, 더 읽기 쉬운 코드 및 더 깨끗한 DB. (이 외에도,이 모든 것은 실제로 POST의 내용과 GET의 URL 로깅에 대해 이야기하는 것부터 시작했습니다. CGI.pm이 다른 경우가 아니라 다른 경우가 아닌 매개 변수를 보았 기 때문에 로깅 / 성능에 일반). 어쨌든, 몇 시간이 지났으므로 답을 받아 들였습니다. 감사!
제임스 그린

4

제공된 답변에 추가하기 위해 MySQL 데이터 저장소가있는 것과 동일한 장치에 로깅하는 경우 성능이 저하되는 것을 볼 수 있습니다-동일한 디스크 인 경우 여러 위치에서 읽고 쓸 것입니다 항상 전체 프로세스를 느리게합니다.

동일한 물리 디스크의 다른 파티션 인 경우에도 마찬가지입니다.

로깅이 다른 장치로 이동하면 일부 성능 문제 가 완화 됩니다.


1
내 상황과 관련이 없습니다. 호스트 VM이며 DB는 동일한 스토리지 배열에서 차례로 제공되는 / var에 대한 별도의 논리 볼륨에 있습니다. 이론 상으로는 동일한 스핀들에있을 수 있다고 생각하지만, 그것은 우연의 일치처럼 느껴질 것입니다 :-) 이것은 +1을 제외하고는 기본 데비안 / 우분투 설정 (DBs / var / mysql, / var / log에 로그인)!
제임스 그린

@jimbo-특정 상황에 직접 적용 할 수없는 소품이라도 감사합니다. :)
warren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.