我们有一个大约50-60%重新编译的数据库。该值来自[SQL Compilations / sec]和[Batch Requests / sec]。
我们认为这个值有点高
如果我们查看此查询:
SELECT TOP 150
qs.plan_generation_num,
qs.execution_count,
qs.statement_start_offset,
qs.statement_end_offset,
st.text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE qs.plan_generation_num > 1
ORDER BY plan_generation_num DESC
如果将它与执行计数进行比较,我们就没有很多plan_generation_num。 Wat我们有很多单一用途的物品,我想弄清楚为什么?
我们的应用程序是在ASP.NET中构建的,我们总是使用参数化查询。我们在应用程序中使用SP&SQL和SQL语句,但始终参数化。
这个数据库再次运行的网页是一个非常大的网站,每天有大约500 000次综合浏览量,如果这些信息有帮助,每分钟大约有10 000个请求。
我们没有长时间运行的查询,索引和统计数据是有序的。这是最后要优化的事情之一。
CPU平均为15% ram大约100 GB,并且SQL服务器用完了。 我们使用SQL Server 2014 Enterprise。
我开始怀疑的一件事。如果我有像这样的SQL语句
SELECT doors, windows, seats from cars where Wheels = @Wheels AND Active = 1
此计划不会被重复使用,因为我们没有在此部分设置参数:** AND Active = 1 **
有关如何了解我们为何如此多次使用的想法? 缓存计划的数量约为20 000.在比较中,我们有大约700 sp'在应用程序中有更多的查询。