Azure SQL 数据库 DTU 达到最大值 - 由于数据库很大?
Azure SQL database DTUs maxing out - due to large database?
我们有一个 Azure SQL 数据库。直到几周前,我们设置为 10 个 DTU (S0)。最近,我们收到更多 SQL 超时错误,促使我们将 DTU 增加到 50 (S2)。我们得到错误的频率较低,但偶尔也会出现。当我们遇到这些超时时,我们会看到资源图上的峰值达到 100%。深入研究,通常是数据 I/O 操作使其激增。但是当我们检查 Query Performance Insight 时,none 列出的查询显示它们使用了那么多资源。
另一件需要注意的事情是,我们的数据库规模一直在稳步增长。现在大约是 19 GB,其中大部分(18 GB)来自一个 table,其中有很多长 JSON 字符串。超时错误通常发生在具有多个连接的特定查询上,但它们不会与带有长字符串的 table 交互。
我们测试了创建数据库副本并删除所有长字符串,它在 10 DTU 时没有任何超时,但就负载而言,它与所有长字符串在 50 DTU 时的数据库执行相同次。
我们已经重建了索引,尽管它有所帮助,但我们仍然遇到超时错误。
鉴于获取超时的查询未触及长字符串的 table,长字符串的 table 是否仍然是 DTU 使用的罪魁祸首?它与 SQL 缓存有关吗?长字符串是否会占用缓存并导致大量数据 I/O? (它们的访问也相当频繁。)
如果字符串很热(如您所说),它们肯定会耗尽您的缓存预算。当热工作集超过 RAM 缓存大小时,性能可能会急剧下降 (10-100x)。那是因为 IO 比 RAM 访问慢 10-1000 倍。这意味着即使缓存命中率的微小下降(例如 1%)也会成倍增加性能损失。
这个悬崖可能非常陡峭。前一秒应用还好,下一秒IO就爆表了。
因为 Azure SQL 数据库有严格的资源限制(正如我所听到和读到的),这会很快耗尽你购买的性能。
我认为您所做的测试可以确认是字符串导致了问题。您可以尝试在其他地方隔离字符串吗?如果他们觉得冷,请将他们转移到另一个 table。如果它们很热,请将它们移动到另一个数据存储(数据库或 NoSQL)。这样你就可以回到更低的等级。
我们有一个 Azure SQL 数据库。直到几周前,我们设置为 10 个 DTU (S0)。最近,我们收到更多 SQL 超时错误,促使我们将 DTU 增加到 50 (S2)。我们得到错误的频率较低,但偶尔也会出现。当我们遇到这些超时时,我们会看到资源图上的峰值达到 100%。深入研究,通常是数据 I/O 操作使其激增。但是当我们检查 Query Performance Insight 时,none 列出的查询显示它们使用了那么多资源。
另一件需要注意的事情是,我们的数据库规模一直在稳步增长。现在大约是 19 GB,其中大部分(18 GB)来自一个 table,其中有很多长 JSON 字符串。超时错误通常发生在具有多个连接的特定查询上,但它们不会与带有长字符串的 table 交互。
我们测试了创建数据库副本并删除所有长字符串,它在 10 DTU 时没有任何超时,但就负载而言,它与所有长字符串在 50 DTU 时的数据库执行相同次。
我们已经重建了索引,尽管它有所帮助,但我们仍然遇到超时错误。
鉴于获取超时的查询未触及长字符串的 table,长字符串的 table 是否仍然是 DTU 使用的罪魁祸首?它与 SQL 缓存有关吗?长字符串是否会占用缓存并导致大量数据 I/O? (它们的访问也相当频繁。)
如果字符串很热(如您所说),它们肯定会耗尽您的缓存预算。当热工作集超过 RAM 缓存大小时,性能可能会急剧下降 (10-100x)。那是因为 IO 比 RAM 访问慢 10-1000 倍。这意味着即使缓存命中率的微小下降(例如 1%)也会成倍增加性能损失。
这个悬崖可能非常陡峭。前一秒应用还好,下一秒IO就爆表了。
因为 Azure SQL 数据库有严格的资源限制(正如我所听到和读到的),这会很快耗尽你购买的性能。
我认为您所做的测试可以确认是字符串导致了问题。您可以尝试在其他地方隔离字符串吗?如果他们觉得冷,请将他们转移到另一个 table。如果它们很热,请将它们移动到另一个数据存储(数据库或 NoSQL)。这样你就可以回到更低的等级。