2017-11-18 2 views
2

내가 삽입하고 기록. Azure 웹 응용 프로그램 webjob 및 Azure Sql 데이터베이스에서이 작업을 실행하면 10 분 이상 걸리고 트랜잭션이 시간 초과됩니다. 테이블 정의는 동일하며, 테이블에있는 비슷한 양의 데이터입니다. 잠금이 없으며 느린 것입니다. 로컬에서 실행하고 Azure Sql 데이터베이스에 쓰려고하면 10 분 이상 걸립니다. 내가 TransactionScope(Suppress)를 사용하여 트랜잭션을 제거 해봤지만 아무런 차이를하지 것SqlBulkCopy의는 * 아주 * 푸른 SQL을 느리게하고 C#

using(var bulkCopy = new SqlBulkCopy(connection){DestinationTableName="Table") 
using(var reader = ObjectReader.Create(entities, columnList) 
{ 
    await bulkCopy.WriteToServerAsync(reader).ConfigureAwait(false); 
} 

: 그것은있을 수 있기 때문에

실제 전화

은 간단합니다.

아무도 내가 뭘 어리석은 실수를했는지 알려주거나 이걸 진단하는 방법에 대한 조언을 해 줄 수 있습니까? 정말 실망하고 있습니다! 시간의 차이가 너무 커서 여기서 뭔가 근본적인 것을 놓친 것 같습니다. 그 작업이 실행되는 동안

+0

데이터베이스 계층이 무엇입니까? 또한이 기간 동안 DTU (로그/cpu/Io/메모리)의 어떤 부분이 최대 값입니까? – TheGameiswar

+0

S3/P1 (유사한 결과) 및 DTU는 어느 경우에도 최대 값이 아닙니다. DTU가 약 70 %로 잠시 급상승 한 다음 약 10-20 %를 앉습니다. – Carl

+1

그러면 기다려야합니다.이 기간 동안 대기 통계를 수집 할 수 있습니까? – TheGameiswar

답변

-1

당신은 높은 로그 쓰기 퍼센트를 확인하기 위해 쿼리 아래 실행 존재할 수 :

당신은 또한 다른 방법 중 하나를 사용하여 해당 작업과 관련된 대기를 수집 할 수 있습니다
SELECT 
    (COUNT(end_time) - SUM(CASE WHEN avg_cpu_percent > 80 THEN 1 ELSE 0 END) * 1.0)/COUNT(end_time) AS 'CPU Fit Percent' 
    ,(COUNT(end_time) - SUM(CASE WHEN avg_log_write_percent > 80 THEN 1 ELSE 0 END) * 1.0)/COUNT(end_time) AS 'Log Write Fit Percent' 
    ,(COUNT(end_time) - SUM(CASE WHEN avg_data_io_percent > 80 THEN 1 ELSE 0 END) * 1.0)/COUNT(end_time) AS 'Physical Data Read Fit Percent' 
FROM sys.dm_db_resource_stats 

this 기사에 설명했다. 해당 워크로드의 실행 중 IO 관련 대기 시간이 길어질 수 있습니다.

높은 IO 집중적 인 작업 부하를 실행하는 동안 조절을 방지하려면 작업 부하를 실행하기 전에 확장하고 작업 부하가 완료된 후 초기 계층으로 확장 할 수 있습니다.

ALTER DATABASE [db1] MODIFY (EDITION = 'Premium', SERVICE_OBJECTIVE = 'P15'); 
0

음. 모든 인덱스를 제거하고 약간의 차이를 만들었지 만 배치는 여전히 10 분에 시간 초과되었습니다. 나는 (TransactionScope.Suppress를 사용하는 대신) 바깥 쪽 주변 거래 범위를 제거했고 갑자기 시간이 '정상'으로 다시 보였다. 삽입하는 데 약 50 초 가량 소요되며 DTU가 실행되는 동안 DTU를 최대치에 가깝게 만드는 반면, DTU가 실행되기 전에는 DTU가 약 20 %에 불과합니다.

나는 아직도 주위 트랜잭션과 2 초에 로컬로 작동 왜 아무 생각이 없지만

덕분에 대답하는 모든 경험 분필 하나가 될거야 - 적어도 좋은 날 지적을 배울 방향!