c# - 禁用超时时 SqlBulkCopy 到 Azure 超时

标签 c# azure .net-core azure-sql-database sqlbulkcopy

我正在尝试使用 .NET Core 中的 SqlBulkCopy 将几百万行批量插入到开发实例 Azure SQL 数据库中。

我已禁用连接字符串超时和 BulkCopyTimeout(将它们都设置为 0),但仍然超时。

现在这不是一台高层机器(它是一个开发环境),这个过程很容易使 DTU 达到最大...但我对 DTU 最大应该如何工作的理解是它是一种节流机制,不是中止机制。由于超时不受限制,我预计该过程需要一段时间但最终会完成。相反,我看到的是进程开始...上传一堆行...然后在奇怪的时间超时:2:38、4:20...没有押韵或原因。

这让我认为这是某种传输错误,但我显然收到了 TimeoutException。

根据 Bulk insert is not working properly in Azure SQL Server 中的建议,我也尝试过将批处理做得非常小,但这似乎也没有任何作用。

谁能解释一下这里发生了什么以及如何解决它?这阻碍了高可见度项目的开发,我讨厌告诉人们我可以让它在我的笔记本电脑的 SQL Server Express 上工作,但不能在 Azure DB 上工作。

最佳答案

请运行以下查询,让我们尝试查找有关 Azure SQL 数据库受到限制的证据。

SELECT *
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;

如果您看到 avg_log_write_percent 接近或等于 100%,则表示正在发生限制,您需要扩展数据库层。非高级层不适合 I/O 密集型工作负载,建议使用批处理。

当 Azure SQL 数据库上发生限制时,您不仅会看到响应时间缓慢,而且还会开始看到不成功的连接尝试和超时。

select * 
from sys.event_log 
where event_type <> 'connection_successful' and
start_time >= CAST(FLOOR(CAST(getdate() AS float)) AS DATETIME)
order by start_time desc

select *
from sys.database_connection_stats_ex
where start_time >= CAST(FLOOR(CAST(getdate() AS float)) AS DATETIME)
order by start_time desc

关于c# - 禁用超时时 SqlBulkCopy 到 Azure 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517161/

相关文章:

c# - 如何在 ASP.Net Core 中注入(inject) WCF 服务客户端?

c# - 将文本框中的信息发布到不同解决方案中的另一个文本框

c# - 搜索列表比使用 foreach 更好的方法

ios - 将 Xamarin iOS 提交到 Apple AppStoreConnect TestFlight 后获取 'ITMS-90338: Non-public API usage' 和 'ITMS-90809: Deprecated API Usage'

具有网关的 VNET 中的 Azure API 管理(502 - Web 服务器在充当网关或代理服务器时收到无效响应)

websocket - SignalR 不在 IIS Express 10 上使用 websockets

c# - FileOptions.DeleteOnClose Windows 是特定的吗?

c# - 彼此靠近的 Lat、Long 簇

c# - 在 Azure 网站中附加路径以包含 bin\debug 和 bin\release

azure - 使用 Azure AD 作为 SAP HANA 中的 IDP 进行 SAML 单点注销