繁体   English   中英

超时在数据库中插入1,000,000行(有时)

[英]Timeout inserting 1,000,000 of rows in database (sometimes)

我正在使用.NET Framework 4.0,Entity Framework 6.1.3和SQL Server 2012开发一个C#库。

我有这个存储过程,我用Ado.net调用:

CREATE PROCEDURE [dbo].[InsertCodes]
      @codes as dbo.SerialAndValueList READONLY -- Codes
    , @username nvarchar(50)            
    , @source nvarchar(50)              
    , @column2 tinyint                  
AS
    Declare @codesCount int;

    set nocount on;

-- =========== CODE =============   
    INSERT INTO Code (Serial, Column1, Column2, Column3, UserName, Source)
        SELECT Serial, Column1, @column2, @column3, @username, @source FROM @codes

    IF (@@ERROR != 0)
        RETURN -1 -- Database error

RETURN 0

SerialAndValueList

CREATE TYPE [dbo].[SerialAndValueList]
AS TABLE
(
    Serial nvarchar(20),
    Column1 tinyint
)

我用它来存储1,000,000个@codes@codes有1,000,000行)。

我正在使用相同数量的代码对其进行测试,有时我会获得超时异常,有时则没有。

我找到了文章配置远程查询超时服务器配置选项建议:

EXEC sp_configure 'remote query timeout', 0 ;  
GO  
RECONFIGURE ;  
GO

但是如果我这样做,我想只在这个存储过程中(在开始时)禁用它,并在离开它之前重新启用它。

另一个问题是超时只发生在我运行存储过程后60秒但是在这里读取, 远程查询超时选项 ,我看到默认值是600秒。

如何在数据库中获取远程查询超时选项的当前值?

或者,我该如何解决这个问题?

远程XXX超时值与服务器上运行的传出远程查询的超时有关 - 例如,对链接服务器的传出查询,这些设置对来自客户端的传入查询没有影响。

如果你想要一个更高的超时设置.CommandTimeout可以在ObjectContextSqlCommand

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM