为什么 Azure 数据库在处理事务时表现更好

Why does Azure Database perform better with transactions

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

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

接下来,我们使用 EF6 对我们的代码进行了基准测试,我们发现服务器响应速度非常快。由于 EF6 实现了内置事务,我们决定恢复 micro-orm 上的 SqlTransaction (ReadCommited),我们发现一切正常。

Azure 数据库是否需要明确的 SqlTransaction(由代码管理)? SqlTransaction 如何影响 Azure 数据库性能?为什么以这种方式实施?

编辑:我将 post 一些关于我们收集痕迹的方式的更精确的信息。似乎我们的 Azure 事件日志有时以纳秒为单位,有时以毫秒为单位。好奇怪啊

如果我正确理解您的要求,将多个 SQL 查询分批处理到一个事务中将使您在任何 DBS 上获得更好的结果。在每个 insert/update/delete 之后提交都会在不是为它设计的 DBS 上产生巨大的开销(比如 MySQL 上的 MyISAM)。

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

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