为什么Azure数据库在事务中表现更好

Rén*_*ald 8 ado.net distributed-transactions micro-orm entity-framework-6 azure-sql-database

我们决定对Azure数据库使用微操作.由于我们的业务只需要"插入"和"选择",我们决定禁止所有代码管理SqlTransaction(没有数据的并发问题).

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

接下来,我们使用EF6对代码进行基准测试,我们发现服务器响应非常快.当EF6实现内置事务时,我们决定恢复SqlTransaction微观orm上的(ReadCommited),我们发现一切都很好.

Azure数据库是否需要显式SqlTransaction(由代码管理)?SqlTransactionAzure数据库的表现如何影响?为什么这样实现?

编辑:我将发布一些关于我们收集痕迹的方式的更准确的信息.我们的Azure事件日志有时以纳秒表示,有时以毫秒为单位.看起来很奇怪.

Dak*_*san 1

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

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

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