3

Azure SQL在我的项目中使用数据库,并且其中一些相同的查询集被非常频繁地执行。最近我收到一个性能推荐说 - Non-Parameterized queries are causing performance issues。并建议在我的数据库中执行以下语句。

ALTER DATABASE [TestDB] SET PARAMETERIZATION FORCED

我开始知道强制参数化可以通过减少查询编译和重新编译的频率来提高某些数据库的性能。此外,众所周知,存储过程是可执行代码,并且会自动缓存并在用户之间共享,并且可以防止重新编译。

请帮助我解决下面列出的问题。

1)将数据库转换为强制参数化会比将常用查询转换为存储过程更好吗?

2)在我的数据库中执行强制参数化选项是否安全?

4

2 回答 2

1

如果没有进一步的测试,很难说它是否会更好地工作,但如果顾问告诉您启用参数化会提高性能,那么您绝对应该尝试一下。原因如下:

您可以通过单击“应用”命令快速轻松地应用此建议。应用此建议后,它将在几分钟内对您的数据库启用强制参数化,并启动大约持续 24 小时的监视过程。在此期间之后,您将能够看到验证报告,其中显示了应用建议前后 24 小时数据库的 CPU 使用情况。SQL 数据库顾问具有一种安全机制,可在检测到性能下降时自动恢复应用的建议。

更多信息在这里:

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-advisor#parameterize-queries-recommendations

于 2017-07-10T11:52:49.147 回答
1

1)将数据库转换为强制参数化会比将常用查询转换为存储过程更好吗?

否。强制参数化是一种解决方法,适用于未正确参数化查询的应用程序。最好将参数用于频繁运行的查询,以及您希望计划基于单个值的硬编码值。

例如

select * 
from Orders
where CustomerId = @customerID
and Active = 1
于 2017-07-10T13:35:52.037 回答