2017-10-26 1 views
-3
  • 파일에서 한 행의 단일 값인 데이터를 읽는 콘솔 .net 응용 프로그램이 있습니다.
  • 지난 달 며칠 동안 응용 프로그램에 SQL 시간 초과 문제가 발생하여 근본 원인을 찾기 위해 노력하고 있습니다.
  • app의 논리는 단일 값을 사용하여 파일의 단일 데이터보다 높은 열 값을 기반으로 기본 테이블에서 데이터를 가져옵니다.
  • 기본 테이블 조인에서 가져온 데이터는 첨부 된 스크립트에있는 두 개의 임시 테이블로 덤프됩니다.
  • 두 개의 임시 테이블이 기본 테이블로 조인되고 조인 코드의 유효성 확인을위한 특정 비즈니스 로직 (직원/사용자가 청구 한 시간)을 확인한 후 조인의 데이터를 기본 임시 테이블 (AccMatters)에 덤프합니다. 충전 시간에 사용되는 회사 휴대 요금 코드에 대한 특정 문제 해결).
  • 제한 시간 문제를 발생시킨 첨부 된 SQL 코드. 임시 테이블 AccMatters가 삽입 중에 문제가 발생했습니다. 주석은 코드에 대한 정보를 제공하기 위해 SQL 코드에서 사용할 수 있습니다.
  • SQL 문이 포함 된 .net 콘솔 응용 프로그램의 로그를 검사 할 때 해당 시점에서 시간 초과 문제가 발생하여 마지막 임시 테이블로 덤프 할 때까지 스크립트에 코드가 포함됩니다.
  • 문제가 지난 달에 3 일 동안 발생했으며 마지막 임시 테이블에 삽입 된 레코드의 양은 시간 초과 문제가 발생한 당시 800 개 이상의 행이었습니다.
  • 프로덕션 환경에서 실행하는 경우 스크립트는 응용 프로그램에서 설정 한 20 분 초과 시간보다 훨씬 짧은 몇 분이 걸립니다.
  • 마지막으로 사용자 정의 응용 프로그램이 단일 데이터를 포함하는 파일을 기본 테이블의 해당 값보다 큰 새 데이터로 업데이트하고 파일 데이터가 다음 사용자 정의 응용 프로그램 실행시 다시 사용됩니다.

첨부 된 스크립트에서 식별 할 수있는 가능한 SQL 서버 코드 불일치에 대한 도움은 고객이 문제를보고 한 날의 근본 원인을 파악하는 데 도움이됩니다.사용자 정의 응용 프로그램의 임시 테이블에 데이터를 삽입 할 때 SQL 시간 초과가

+0

대신 글로벌 임시 테이블을 사용하여 시도 했습니까? ## 또는 왜 사용하지 않는 이유가 있습니까? –

+0

제안 해 주셔서 감사합니다.우리는 ##을 사용하지 않을 이유가 없습니다. 하지만 그렇게 말하면서, 우리는이 코드가 이전에 다른 팀에 의해 작성되었지만 지금은 우리 팀에 의해 문제가 유지/점검되고 있음을 언급하고자합니다. 또한 문제는 지난 달 3 일 동안 만 발생했습니다. 문제는 생산 당시의 데이터로도 시뮬레이션 할 수 없었지만 근본 원인이없는 고객과의 사례를 마무리 할 수는 없습니다. – Aravindan

+0

고객이 근본 원인을 묻는 중입니다. 지금은 수정이 필요 없습니다. – Aravindan

답변

0

경우에 따라 서버에서 발생하는 현상을 확인하기 위해 진단 스크립트를 거의 실행하지 않아도됩니다.

1) 리더/라이터

DBCC OpenTran (dbname) 

2)는 tempdb의 지연 시간과 Tempdb를

의 로그 파일 증가

3) 차단 된 세션을 확인 충돌/processess

SELECT * FROM dbo.sysprocesses WHERE blocked <> 0; 
SELECT * FROM dbo.sysprocesses WHERE spid IN (SELECT blocked FROM 
       dbo.sysprocesses where blocked <> 0) 

4) 해당 프로세스가 디스크/대기 시간에 영향을 많이받는 쿼리에 속하는지 확인하십시오.

SELECT TOP 10 t.TEXT AS 'SQL Text' 
    ,st.execution_count 
    ,ISNULL(st.total_elapsed_time/st.execution_count, 0) AS 'AVG Excecution Time' 
    ,st.total_worker_time/st.execution_count AS 'AVG Worker Time' 
    ,st.total_worker_time 
    ,st.max_logical_reads 
    ,st.max_logical_writes 
    ,st.creation_time 
    ,ISNULL(st.execution_count/DATEDIFF(second, st.creation_time, 
    getdate()), 0) AS 'Calls Per Second' 
    FROM sys.dm_exec_query_stats st 
    CROSS APPLY sys.dm_exec_sql_text(st.sql_handle) t 
    ORDER BY creation_time desc 

5) 임시 데이터베이스의 응답 시간이 있는지 확인하기 위해 활동 모니터를 사용하여 높은

정말, 시작 임시 DB 로그 파일의 비정상적인 성장을 확인하기 위해 성능 모니터 카운터를보고 싶은

. 다른 비슷한 proc 파일을 만들고 전역 temp 테이블과 다르게 이름을 붙일 것입니다. 디버깅을하면 서버에서 발생하는 상황을 충분히 파악할 수 있습니다.

관련 문제