8

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

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

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

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

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

4

1 回答 1

1

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

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

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

于 2016-02-13T08:31:45.297 回答