2010-06-04 5 views
3

프로덕션 환경에서도 SQL 쿼리를 기록할지 여부에 대한 딜레마가 있습니다.프로덕션 환경에서 SQL 쿼리를 로깅 하시겠습니까?

파일을 작성하는 속도가 PHP에 얼마나 있는지 알 수 없습니다. 아마도 일부 벤치 마크에서 해답을 얻을 수는 있겠지만 전에 생각한 것을보고 싶었습니다.

프로세스가 느려지거나 느려지지는 않는 사항은 무엇입니까? 아니면 어떤 것들에 의존 할 수 있습니까?

답변

3

대부분의 데이터베이스에는 쿼리 로깅 및 느린 쿼리를위한 옵션이 내장되어 있으므로 PHP를 통해 로그 할 필요가 없습니다. 문제가 발생하지 않고 문제 해결 프로세스의 일부인 경우가 아니라면 프로덕션 환경의 모든 쿼리를 기록해서는 안됩니다. 프로덕션 사이트 속도를 느리게 할 수 있도록 느린 쿼리를 기록 할 수 있고 기록해야합니다.

프레임 워크에서 지원하는 경우 페이지 생성에 일정 시간이 소요 된 경우에만 쿼리를 기록 할 수 있습니다 (이것이 내가하는 일입니다). 그런 다음 조건부 로깅을 실행하고 지나치게 많은 쿼리가 실행되고 있음을 발견 할 수 있습니다.

+0

내장 된 데이터베이스 로깅에주의를 기울이지 않으면 신중하게 적용하지 않으면 전체 성능이 저하 될 수 있습니다. – pcent

+1

이것은 우리 앱에서 수행 한 것입니다. 속도가 느린 경우 쿼리를 기록하고 로그 메시지에 쉽게 greppable 문자열을 넣습니다. 모든 쿼리를 원하면 dbas로 이동합니다. DB 쿼리 로그를 사용하는 경우 각 쿼리에 고유 한 주석 문자열을 넣어 앱의 위치를 ​​알 수 있도록하는 것이 좋습니다. 이것은 우리가 신경 쓰는 것이 일어나고있는 모든 것보다는 오히려 잘못되어 가고 있기 때문에 위대한 일입니다. –

+0

이것이 우리가하는 일입니다. MySQL은 자체 쿼리를 기록하고 느린 로그는 별도입니다. 로그는 텍스트 파일 (복제 및 복구에 사용되는 바이너리 트랜잭션 로그 파일과 다름)에 추가하기가 매우 빠릅니다. 또한 로깅은 시스템 및 데이터베이스와 다른 실제 디스크에서 수행되므로 디스크 경합을 피할 수 있습니다. –

1

당신은 몇 가지 옵션이 있습니다 :

  • 는 데이터베이스가 작성하는 캐시 된 파일 핸들을 사용하는 정적 방법 로거 클래스를 만들기 쿼리
  • 를 기록 할 것으로 ..이 꽤 빠릅니다. 또한 들어오는 sql 쿼리를 무시하거나 파일에 기록하기 위해 config에서 로그 변수를 보도록이 클래스를 설정할 수 있습니다. 데이터베이스 API를 사용 중이라고 가정하면 (옵션) 로깅을위한이 추가 코드 행을 포함하도록 쿼리 함수를 확장 할 수 있습니다.
0

글쎄, 1 번 속도가 느린 디스크 IO은 db. 가장 좋은 대답은 일부 사소한 경우에 시도하는 것입니다 (작은 n에 대해서는 모든 것이 빠름을 기억하십시오). 성능이 허용되는지를 일부 이해 관계자에게 묻습니다. 그것은 당신이 한 대답이 아닐지도 모르지만, 그것은 가장 좋은 대답입니다.

0

레코드의 경우 (DB를 지정하지 않은 경우) Postgresql은 로깅과 관련된 bunch of options을가집니다. 그 중 N 초 이상 실행 된 쿼리를 기록하려면 log_min_duration_statement을 사용합니다. 로그 파일을 채우지 않고 성능을 방해하지 않고 프로파일 링에 유용합니다. 나는 대부분의 데이터베이스가 비슷한 것을 가질 것이라고 확신한다.

관련 문제