我们决定对Azure数据库使用微观问题。由于我们的业务只需要"插入"并且"选择",我们决定禁止所有代码管理SqlTransaction
(没有数据并发问题)。
然后,我们注意到我们的Azure数据库实例反应非常缓慢。 " rpc已完成"事件发生的延迟是运行简单sql语句所需时间的数百倍。
接下来,我们使用EF6对代码进行基准测试,我们发现服务器响应非常快。由于EF6实现了内置事务,我们决定在微观上恢复SqlTransaction
(ReadCommited),我们发现一切都很好。
Azure数据库是否需要显式SqlTransaction
(由代码管理)? SqlTransaction
如何影响Azure数据库的性能?为什么以这种方式实施?
编辑:我将发布一些关于我们收集痕迹的方式的更准确信息。我们的Azure事件日志有时以纳秒表示,有时以毫秒为单位。看起来很奇怪。
答案 0 :(得分:1)
如果我理解你的问题是正确的,那么将多个SQL查询批处理到一个事务中将会在任何DBS上获得更好的结果。每次插入/更新/删除后提交都会对不是为它设计的DBS(如MySQL上的MyISAM)产生巨大的开销。
如果做得太多,它甚至可能导致磁盘刷新和冲击。我曾经有一个程序员每分钟向我的一个DB提交数千个条目,每个条目都是他们自己的事务,它使服务器停止运行。
InnoDB是MySQL最流行的2种数据库格式之一,每秒只能提交20-30个事务(或者可能是2-3次......已经很长时间了),因为每个事务都被刷新到磁盘上ACID合规的终结。