SqlBulkCopy замедляются как патока

Я ищу самый быстрый способ загрузить объемные данные через c#. У меня есть этот сценарий, который делает задание, но медленный. Я считал свидетельства, что SqlBulkCopy является самым быстрым.
1 000 записей 2,5 секунды. файлы содержат в какой-либо степени 5 000 записей на 250k, Что такое некоторые вещи, которые могут замедлить его?

Определение таблицы:

CREATE TABLE [dbo].[tempDispositions](
    [QuotaGroup] [varchar](100) NULL,
    [Country] [varchar](50) NULL,
    [ServiceGroup] [varchar](50) NULL,
    [Language] [varchar](50) NULL,
    [ContactChannel] [varchar](10) NULL,
    [TrackingID] [varchar](20) NULL,
    [CaseClosedDate] [varchar](25) NULL,
    [MSFTRep] [varchar](50) NULL,
    [CustEmail] [varchar](100) NULL,
    [CustPhone] [varchar](100) NULL,
    [CustomerName] [nvarchar](100) NULL,
    [ProductFamily] [varchar](35) NULL,
    [ProductSubType] [varchar](255) NULL,
    [CandidateReceivedDate] [varchar](25) NULL,
    [SurveyMode] [varchar](1) NULL,
    [SurveyWaveStartDate] [varchar](25) NULL,
    [SurveyInvitationDate] [varchar](25) NULL,
    [SurveyReminderDate] [varchar](25) NULL,
    [SurveyCompleteDate] [varchar](25) NULL,
    [OptOutDate] [varchar](25) NULL,
    [SurveyWaveEndDate] [varchar](25) NULL,
    [DispositionCode] [varchar](5) NULL,
    [SurveyName] [varchar](20) NULL,
    [SurveyVendor] [varchar](20) NULL,
    [BusinessUnitName] [varchar](25) NULL,
    [UploadId] [int] NULL,
    [LineNumber] [int] NULL,
    [BusinessUnitSubgroup] [varchar](25) NULL,
    [FileDate] [datetime] NULL
) ON [PRIMARY]

и вот код

    private void BulkLoadContent(DataTable dt)
    {
        OnMessage("Bulk loading records to temp table");
        OnSubMessage("Bulk Load Started");
        using (SqlBulkCopy bcp = new SqlBulkCopy(conn))
        {
            bcp.DestinationTableName = "dbo.tempDispositions";
            bcp.BulkCopyTimeout = 0;
            foreach (DataColumn dc in dt.Columns)
            {
                bcp.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
            }
            bcp.NotifyAfter = 2000;
            bcp.SqlRowsCopied += new SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
            bcp.WriteToServer(dt);
            bcp.Close();
        }
    }
5
задан Chris Hayes 22 April 2010 в 16:42
поделиться

2 ответа

Есть ли у вас какие-либо индексы, триггеры или ограничения для этой таблицы?

Это вызовет замедление при вставке, особенно если кластерный индекс повредит. При увеличении объемов данных, которые вы делаете, лучше сначала отбросить индексы, а потом повторно применить их.

Хорошая статья об этом здесь: Какой самый быстрый способ массовой вставки большого количества данных в SQL Server (клиент C #)

7
ответ дан 13 December 2019 в 05:32
поделиться

Что может замедлить массовое копирование: - полнотекстовые индексы в таблице - триггеры при вставке - ограничения внешнего ключа

1
ответ дан 13 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: