SQL Azure에서 Dapper로 INSERT하는 데 너무 오래 걸림

azure-sql-database c# dapper

문제

엔티티의 인스턴스가 있는데, 일대 다 관계 (항목)가 있습니다. Dapper를 통해 SQL Azure 인스턴스에 삽입하려고합니다.

항목 수는 ~ 3.5k입니다.

using (var transaction = connection.BeginTransaction())
{
  // (...) x inserted here, we want to insert the items next...
  connection.Execute(TSQL_InsertStatement, x.Items, transaction);
  transaction.Commit();
}
  • 로컬 (대. \ SQLEXPRESS), 실행은 ~ 300-500 [ms]
  • Azure에서 실행은 ~ 8 ​​[s]

나는이 행동이 개별적인 INSERT 톤을 생성하고 이것이 문제가 될 수 있다고 생각한다. 나는 이것을 "수동으로 생성 된 SQL"솔루션으로 리팩토링 해 보았습니다.이 솔루션은 4x INSERT (1k, 1k, 1k, 500 rows)를 생성했지만이 실행은 로컬에서 2 [s]를 넘었습니다.

  • Dapper를 사용하여 더 빠르게 실행할 수 있습니까? 벌크 삽입물 같은 거?
  • SQL Azure에 대해 잘 모르는 뭔가가 있습니까? 숨겨진 스로틀처럼?

수락 된 답변

동일한 트랜잭션 내에서 여러 삽입을 사용하는 것은 일반적으로 Azure SQL Database에서 좋지 않습니다.

일괄 처리를 사용하여 삽입 쿼리의 성능을 향상시켜야합니다 ( https://azure.microsoft.com/en-us/documentation/articles/sql-database-use-batching-to-improve-performance/) . 가능한 경우 테이블 값 매개 변수, 대량 삽입 또는 다중 매개 변수 삽입을 권장합니다. 이러한 시나리오는 참조 된 문서에 설명되어 있습니다.

Azure Sql 데이터베이스도 JSON을 지원합니다. 따라서 원본 소스가 JSON 개체의 배열이면 전체 JSON을 텍스트로 푸시하고 OPENJSON을 사용하여 SQL 측에서 구문 분석 할 수 있습니다 (다른 방법보다 더 빠른 증거는 없습니다).



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow