2008-08-12 4 views
6

Jeff는 그가 항상하는 일 중 하나가 데이터베이스 호출을위한 계측에 포함되므로 어떤 쿼리가 속도 저하 등을 일으키는 지 알 수 있습니다. 과거에는 SQL 프로파일 러를 사용했지만, 다른 사람들이 이것을 응용 프로그램의 일부로 포함시키는 데 사용 된 전략에 관심이 있습니다.계기 데이터베이스 액세스

각 데이터베이스 호출에 타이머를 포함하고 결과를 로깅하는 간단한 경우입니까, 아니면이를 수행하는 '깔끔한'방법입니까? 이미이 작업을 수행하는 프레임 워크가 있거나 이미 사용할 수있는 플래그가있을 수 있습니다. 비슷한 기능을 제공하는 Linq-to-SQL.

저는 주로 C#을 사용하지만 다른 언어의 메서드를 보는데도 관심이 있습니다. SQL 프로파일 러와 같은 DB 플랫폼 메서드에서이 작업을 수행하는 '코드'방식에 더 관심이 있습니다.

답변

1

쿼리가 단일 테이블에서 단순한 SELECT 이상이면 MySQL 또는 PostgreSQL을 사용하는 경우 항상 EXPLAIN을 통해 실행합니다. SQL Server를 사용하는 경우 Management Studio에는 본질적으로 동일한 예상 예상 실행 계획이 있습니다. 엔진이 각 테이블에 액세스하는 방법과 인덱스가 사용하는 인덱스를 확인하는 것이 유용합니다. 때때로 그것은 당신을 놀라게 할 것입니다.

0

SQL Management Studio에서 쿼리를 작성하는 경우 다음을 입력 할 수 있습니다. SET STATISTICS TIME ON 및 SQl Server는 쿼리의 개별 부분이 구문 분석, 컴파일 및 실행하는 데 걸린 시간을 알려줍니다. SqlConnection 클래스의 InfoMessage 이벤트를 처리하여이 정보를 기록 할 수 있습니다 (SQL 프로파일 러를 사용하는 것이 훨씬 쉽습니다).

1

데이터베이스 호출, 총 타이밍 및 레코드 수)는 유용하지만 필요한 모든 정보를 제공하지는 않습니다.

예상하지 못한 사용 패턴이 표시 될 수 있습니다. 그것은 "기반 행"작업 대신 "행 단위"액세스를 사용하는 위치를 보여줄 수 있습니다.

가장 유용한 도구는 SQL 프로필러이며 "읽기 수"와 CPU 및 기간을 분석합니다. 높은 CPU 쿼리, 높은 읽기 및 장시간 (duh!)을 피하려고합니다.

"그룹별로 읽기"는 가장 까다로운 쿼리를 맨 위로 가져 오는 유용한 기능입니다.

0

여기서 중요한 질문은 "사용중인 데이터베이스 플랫폼은 무엇입니까?"라고 생각했을 것입니다.

예를 들어 Sybase에서 MDA tables을 설치하면 프로 시저 호출에서 평균 논리 I/O, CPU 시간 및 인덱스 범위로 통계를 제공 할 수 있습니다. 당신이 원하는대로 똑똑 할 수 있습니다.

0

응용 프로그램이 실행되는 동안 SQL 프로필러를 사용할 때의 가치를 분명히 볼 수 있으며 EXPLAIN 또는 SET STATISTICS는 개별 쿼리에 대한 정보를 제공하지만 데이터베이스 쿼리에 대한 정보를 수집하기 위해 일상적으로 측정 포인트를 코드에 넣는 사람은 없습니다 진행중인 - 예를 들어 처음에는 잘 수행하는 테이블에 대한 쿼리를 선택하지만 행 수가 증가하면 느려지고 느려집니다.

MySQL 또는 Postgre를 사용하는 경우 쿼리 활동을 실시간으로 볼 수있는 다양한 도구가 있지만 시간이 지남에 따라 쿼리 성능을 측정하기위한 SQL 프로파일 러만큼 좋은 도구를 찾지 못했습니다.

ELMAH과 비슷한 방식으로 연결하고 더 많은 노력을 기울이지 않고도 정보를 얻을 수 있는지 궁금합니다.

0

당신이 Firebird에 있다면 sinatica.com을보고 싶을 것입니다.
Firebird DBA를위한 실시간 모니터링 도구를 곧 출시 할 예정입니다./뻔뻔한 플러그

<>

0

당신이 최대 절전 모드를 사용하는 경우 (I 자바 버전을 사용, 내가 NHibernate에 비슷한 뭔가가 상상하는 것), 당신은 최대 절전 모드는 다른 많은 것들에 대한 통계를 수집 할 수 있습니다. 참조 예 :

http://www.javalobby.org/java/forums/t19807.html