ado.net - 为什么 Azure 数据库在事务方面表现更好

标签 ado.net entity-framework-6 azure-sql-database distributed-transactions micro-orm

我们决定对 Azure 数据库使用 micro-orm。由于我们的业务只需要“插入”和“选择”,我们决定取消所有代码管理SqlTransaction (没有数据的并发问题)。

然后,我们注意到我们的 Azure 数据库实例响应非常缓慢。 “ rpc Completed ”事件发生的延迟是运行简单sql语句所需时间的数百倍。

接下来,我们使用 EF6 对我们的代码进行了基准测试,我们看到服务器响应非常快。由于 EF6 实现了一个内置事务,我们决定恢复 SqlTransaction (ReadCommited) 在 micro-orm 上,我们注意到一切都很好。

Azure 数据库是否需要显式 SqlTransaction (由代码管理) ? SqlTransaction怎么办影响 Azure 数据库性能?为什么这样实现?

编辑:我将发布一些关于我们收集痕迹的方式的更精确的信息。似乎我们的 Azure 事件日志有时以纳秒表示,有时以毫秒表示。看起来好奇怪

最佳答案

如果我正确理解您的要求,将多个 SQL 查询批处理到一个事务中将在任何 DBS 上为您提供更好的结果。每次插入/更新/删除后提交都会对不是为其设计的 DBS(如 MySQL 上的 MyISAM)产生巨大的开销。

如果您做得太多,它甚至可能导致对磁盘的不良刷新和颠簸。我曾经有一个程序员每分钟向我的一个数据库提交数千个条目,每个条目都作为自己的事务,这导致服务器停止运行。

InnoDB 是 MySQL 的 2 种最流行的数据库格式之一,每秒只能提交 20-30 个事务(或者可能是 2-3 个......这已经很长时间了),因为每个事务最后都会刷新到磁盘中酸合规性。

关于ado.net - 为什么 Azure 数据库在事务方面表现更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35231430/

相关文章:

.net - 有没有办法在参数替换后从 SqlCommand 获取完整的 sql 文本?

excel - 使用 OleDbConnection::GetOleDbSchemaTable() 列出 excel 表

c# - 如何本地化 DataTable 列名称

c# - Entity Framework 6. 禁用模型缓存

c# - Entity Framework (EF6) 插入或更新属性(如果存在)

azure-sql-database - Langchain的SQLDatabaseSequentialChain来查询数据库

c# - 通过过程调用时 ADO.NET 中的整数输出参数空问题

.net - 如何在 Entity Framework (EF6) Code-First 中映射冗余关系

sql-server - sql azure 初学者 - 简单的插入语句出现错误

sql - Windows Azure 应用程序中提供邮件通知服务