꽤 이미 사이트에이 어디에 대한 답변을 볼 수 없습니다 놀랐어요, 나 MySQL의 문서에 ( 섹션 5.2 , 그렇지 않으면 잘 덮여 로그인 것 같습니다!)
binlogs를 활성화하면 약간의 추가 IO로 예상되는 작은 성능 저하 (주관적으로)가 표시되지만 일반적인 쿼리 로그를 활성화하면 막대한 성능 저하가 발생합니다 (쿼리 실행 시간의 두 배, 또는 더 나쁘게), binlogs로 보는 것을 초과합니다. 물론 모든 SELECT 및 모든 UPDATE / INSERT를 기록하고 있지만 다른 데몬은 정지하지 않고 모든 요청 (Apache, Exim)을 기록합니다.
IO와 관련하여 성능 “티핑 포인트”에 가까워지는 효과를 보입니까, 아니면 쿼리를 로깅하는 데 근본적으로 어려운 문제가 있습니까? 개발을 쉽게하기 위해 모든 쿼리를 기록 할 수 있기를 원하지만 일반적인 쿼리 로깅을 사용하여 성능을 회복해야하는 하드웨어 종류를 정당화 할 수는 없습니다.
물론 느린 쿼리를 기록 하고이 기능을 사용하지 않으면 일반적인 사용법이 무시할만한 수준으로 향상됩니다.
(이 모든 것은 Ubuntu 10.04 LTS, MySQLd 5.1.49에 있지만 연구는 이것이 보편적 인 문제라고 제안합니다)
답변
일반 쿼리 로그는 이진 로그보다 훨씬 많은 IO입니다. 대부분의 SQL Server가 90 % 읽기에서 10 % 쓰기라는 사실 외에도 이진 로그는 적은 디스크 공간을 사용하는 일반 텍스트가 아닌 이진 형식으로 저장됩니다. (공간이 얼마나 적습니까? 잘 모르겠습니다. 죄송합니다.)
Apache와 Exim이 성능에 큰 영향을주지 않고 모든 요청을 기록 할 수있는 이유는 두 가지가 있습니다. 첫 번째는 요청이 발생했다는 사실을 기록하지만 로그에 넣는 내용은 일반적으로 실제 요청보다 상당히 작다는 것입니다. HTTP 요청은 종종 로그에 들어가는 행보다 두 배나 크며 짧은 일반 텍스트 전자 메일도 함께 제공되는 로그 행보다 10 배 또는 20 배 더 큽니다. 첨부 파일이 10MB 인 전자 메일에는 여전히 로그에 몇 줄만 기록됩니다.
이에 대한 두 번째 부분은 일반 웹 애플리케이션에는 일반적으로 단일 HTTP 페이지와 연관된 수십 개의 SQL 쿼리가 있다는 것입니다. 이메일은 HTTP 요청보다 훨씬 적은 수로 제공됩니다. MySQL 서버가 아마도 Apache 나 Exim보다 훨씬 더 많은 로그를 기록하려고합니다.
하루가 끝날 때 MySQL 바이너리 및 일반 로그와 Apache 및 Exim 로그의 크기 (압축되지 않은)를 확인하십시오. MySQL 일반 로그가 최소 5 배 큰 것임을 알 수있을 것입니다.
답변
제공된 답변에 추가하기 위해 MySQL 데이터 저장소가있는 것과 동일한 장치에 로깅하는 경우 성능이 저하되는 것을 볼 수 있습니다-동일한 디스크 인 경우 여러 위치에서 읽고 쓸 것입니다 항상 전체 프로세스를 느리게합니다.
동일한 물리 디스크의 다른 파티션 인 경우에도 마찬가지입니다.
로깅이 다른 장치로 이동하면 일부 성능 문제 가 완화 됩니다.