2010-06-04 11 views
2

테이블에 직접 삽입하는 것과 테이블을 가리키는 다른 데이터베이스의 뷰에 삽입하는 것 사이의 성능 차이를 테스트하려고했습니다. 나는 단순한 테이블에 10,000 개의 삽입물이있는 WHILE 루프가 3 초 걸렸지 만보기에는 30 초가 걸렸습니다.연결 간의 큰 성능 차이

내가 조사한 것처럼 SSMS에서 창을 전환하면 뷰 성능이 테이블의 뷰 성능과 동일하다는 것을 알았습니다. 그런 다음 뷰 창에서 DB를 테이블 DB로 전환하고 거기에 삽입하면 테이블에 직접 갈 때 속도가 느려집니다.

이것은 연결에 약간의 차이가 있다는 아이디어를 지적했습니다. 이것들은 SSMS에서 다른 탭이었고, 하나는 -N과 함께 만들어졌습니다. SET NOCOUNT ON (두 창에서) 및 모든 통계, 쿼리 계획 등을 제외한 모든 SET 명령을 해제하지 않았습니다.

SQL 프로필러를 실행하여 연결을 살펴본 결과 동일한 설정이었습니다. 그러나 성능 차이는 100 % 일관되었습니다.

어느 연결에서 트랜잭션이 열려 있지 않은지 확인했습니다.

SSMS의 다른 인스턴스를 열어 보았는데 느린 성능을 복제 할 수 없습니다 (SSMS의 첫 번째 인스턴스에서 내 탭 중 3 개에서 2 개가 발생하지만).

이것은 모두 로컬 서버에 있습니다. 약 1 시간 만에 시스템을 종료해야 할 필요가 있습니다.이 문제를 재현 할 수 있을지 모르겠으므로 그 전에 몇 가지 제안을 얻을 수 있습니다.

차이점에 대한 다른 아이디어 있다?

+0

SQL Server가 시간 차이를 어떻게 계산합니까? 실제 실행 계획을 포함하여 차이가 있는지 확인하고 SET STATISTICS IO 및 SET STATISTICS TIME 결과를 확인해 보았습니까? –

+1

빠른 설명 : 복제가 어렵거나 불가능한 경우 다른 생각을하지 않을 것입니다. – NotMe

+0

보기에 데이터베이스에 대상이 삽입되기 전에 동일한 데이터베이스의 다른 테이블에 대해 추가 쿼리가 발생하는 것이 있습니까? – Nate

답변

3

느리고 빠른 세션의 행을 sys.dm_exec_sessions에서 비교하고 다른 것이 있는지 확인해보십시오.

+0

감사합니다. 내 메시지에서 언급하지는 않았지만 dm_exec_connections를 확인했습니다. –

+1

아마도 시간 차이가 어디에 있는지 찾으려고 노력해야합니다. 느리고 빠른 쿼리가 실행되는 동안 sys.dm_exec_requests wait_type, wait_resource 및 wait_time에 풀을 만들고 패턴에 명백한 차이가 있는지 확인합니다. 이것은 힌트를 줄 것입니다 * 왜 * 시간 차이가 발생합니다. –

+0

Btw, N 번째 실행마다 데이터베이스 및/또는 로그 증가 이벤트가 발생하지 않도록하십시오. * 동일한 창에서 언제나 실행됩니다 *. –