百万插入:SqlBulkCopy超时

 军长长军765 发布于 2022-12-07 10:11

我们已经有一个运行系统来处理所有连接字符串(db2,oracle,MSServer).

目前,我们正在使用ExecuteNonQuery()一些插入.

我们希望通过使用SqlBulkCopy()而不是改进性能ExecuteNonQuery().我们有一些客户拥有超过5000万条记录.

我们不想使用SSIS,因为我们的系统支持多个数据库.

我创建了一个示例项目来测试其性能SqlBulkCopy().我为MSServer创建了一个简单的读取和插入函数

这是小功能:

public void insertIntoSQLServer()
{
    using (SqlConnection SourceConnection = new SqlConnection(_sourceConnectionString))
    {
        //Open the connection to get the data from the source table
        SourceConnection.Open();
        using (SqlCommand command = new SqlCommand("select * from " + _sourceSchemaName + "." + _sourceTableName + ";", SourceConnection))
        {
            //Read from the source table
            command.CommandTimeout = 2400;
            SqlDataReader reader = command.ExecuteReader();

            using (SqlConnection DestinationConnection = new SqlConnection(_destinationConnectionString))
            {
                DestinationConnection.Open();
                //Clean the destination table
                new SqlCommand("delete from " + _destinationSchemaName + "." + _destinationTableName + ";", DestinationConnection).ExecuteNonQuery();

                using (SqlBulkCopy bc = new SqlBulkCopy(DestinationConnection))
                {
                    bc.DestinationTableName = string.Format("[{0}].[{1}]", _destinationSchemaName, _destinationTableName);
                    bc.NotifyAfter = 10000;
                    //bc.SqlRowsCopied += bc_SqlRowsCopied;
                    bc.WriteToServer(reader);
                }
            }
        }
    }
}

当我在我的dummyTable中少于20万时,批量复制工作正常.但是,当它超过20万条记录时,我有以下错误:

尝试在具有挂起操作的对象上调用批量复制.

要么

等待操作超时(对于IDataReader)

我为读者增加了CommandTimeout.它似乎已经解决了与IDataReader相关的超时问题.

我在代码中做错了吗?

1 个回答
  • 您可以在调用WriteToServer之前尝试添加以下内容吗?

    bc.BatchSize = 10000;
    bc.BulkCopyTimeout = 0;
    

    我不知道默认批量大小或超时是什么,但我怀疑这可能是你的问题.希望有所帮助

    此外,您可以尝试使用不同的批量大小来获得最佳性能.

    2022-12-11 02:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有