我有一个负载相当大的 Azure SQL DB (OLTP),我们称之为 AppDB。AppDB 在事务上是一致的,但会不断地向其中写入新行。现在我需要每 30 分钟根据 AppDB 状态填充 ReportingDB。报告人口作业针对 AppDB 运行几个中等大的查询,不幸的是,这些查询不能包装在事务中,但仍然必须全部在一致的数据上运行。也就是说,我不能有情况Query 1 runs
=> new rows inserted into AppDB
=> Query 2 runs
。我所有的查询都必须以查询 1 开始时的方式查看数据。
我希望我可以使用快照创建一个只读快照以供报告作业使用。根据描述,这样的快照的创建应该很快,并且随后的“写入时复制”性能命中应该是可控的。快照的生命周期平均不到 10 分钟。
但是现在看起来 Azure SQL 不支持CREATE DATABASE ... AS SNAPSHOT OF ...
,它只支持CREATE DATABASE ... AS COPY OF ...
,我预计会慢很多(可能不打算用于报告快照)。
在 Azure SQL DB 中创建快速且短暂的只读快照以进行报告的好方法是什么?
PS我们已经考虑过复制,但由于政策限制,目前这不是我们的选择。
Azure SQL 数据库不支持数据库快照,因此除此之外没有其他选择:
或者
您可以使用只读副本,但它们不会被冻结,因此它们可以接收一些新数据。
https://learn.microsoft.com/en-us/azure/azure-sql/database/read-scale-out
也许您可以使用基于插入/更新日期时间的某种过滤器来解决问题。