Azure SQL 在处理 SELECT 和在相同 Table 上插入 2100 万条记录时性能不佳

Azure SQL Performance bad when dealing with SELECT and INSERT on same Table with 21Mil records

我们有 Azure 托管解决方案,其中函数应用程序将记录插入 Azure SQL。我们有一个这样的 Azure 函数,我们首先执行 SELECT 查询(简单的使用过滤条件中使用的索引列来检查记录是否存在)。如果没有找到记录,那么我们插入相同的 table。当 table 中的记录少于 1000 条时,这一切正常,但现在 table 有 2100 万条记录,并且从函数应用程序调用时,一个简单的 SELECT 语句大约需要 25 秒有 100 个并发用户的负载。我怀疑 SELECT 和 INSERT 是同一函数应用程序方法调用的一部分,我认为 Table 上某处发生了锁定,导致 SELECT 语句需要 25 秒。我们确实看到计算利用率在那段时间达到了 80%。

我相信很多人可能遇到过类似的问题,无论如何要解决这个问题,我们在同一事务集中执行 SELECT 和 INSERT 并避免

这是一个“在不存在的地方插入”样式问题。这个posthttps://devblogs.microsoft.com/azure-sql/the-insert-if-not-exists-challenge-a-solution/应该可以帮你解决。

顺便说一句,在这种情况下使用查询规划器非常有用,因为它会告诉您正在发生什么以及需要多长时间,因此您不必推测。参见 https://docs.microsoft.com/en-us/sql/relational-databases/performance/display-an-actual-execution-plan?view=sql-server-ver15