【发布时间】:2019-04-02 04:05:45
【问题描述】:
总的来说,我对 Azure 和云计算还很陌生,想请你帮忙解决问题。
当我们的网页由于 sql 超时设置为(30 秒)而超时时,第一次发现此问题。
我做的第一件事是使用 MS SQL 管理工作室 2014 连接到生产数据库(连接到 azure prod db)
运行低性能页面正在使用的存储过程,但返回不到 0 秒。这让我很困惑,因为可能是什么导致了这个问题。
意外地,我也尝试在 Azure SQL 查询编辑器中运行相同的查询,但运行它需要 29 秒,这让我感到震惊。
我的主要问题是为什么在 azure sql 查询编辑器和 Management Studio 中运行查询之间存在差异。这是完全相同的数据库。
DTU 使用率为 98%,我认为存储过程存在性能问题,但首先想知道为什么 sql 编辑器运行 SP 的速度比 Management Studio 慢。
当前 azure db 有 50 个 dtu。
【问题讨论】:
-
听起来像参数嗅探。我不敢相信它仍然是一件事!
-
@Nick.McDermaid 我目前正在阅读有关参数嗅探的信息并考虑其影响,但问题仍然存在,如果存在参数嗅探问题,为什么在我使用管理工作室时不会发生?您是说嗅探是在客户端而不是在实际服务器中完成的吗?我们说的是同一台服务器,只是不同的客户端
-
我发现不同的客户端(库)使用不同的 SET 设置。因此,从 EF 运行的查询使用与从 SSMS 运行的查询不同的 SET ARITHABORT。这意味着整个查询获得不同的“指纹”,这意味着它使用不同的(可能是新的)缓存查询计划。参数嗅探是关于使用错误的缓存查询计划,这通常是由于初始参数集错误。我希望这是有道理的。
-
您的网络应用使用什么 DAL?英孚?因为通常的事件顺序是使用 EF 的应用程序很慢,然后您在 SSMS 中运行它并且它很快。再次 - 通过参数嗅探,它不是真正的客户端或库,只是它们使用稍微不同的 SET 设置,为查询提供新指纹并强制执行新计划
标签: sql-server azure azure-sql-database ssms