1

我们有一个包含大约 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。我们确实有很多一次性物品,我想弄清楚为什么?

我们的应用程序是在 ASP.NET 中构建的,我们总是使用参数化查询。我们在应用程序中同时使用 SP 和 SQL 语句,但总是参数化。

在这个数据库上运行的网页是一个相当大的网站,每天有大约 500 000 次浏览量,如果这些信息有帮助的话,每分钟大约有 10 000 次请求。

我们没有长时间运行的查询和索引,并且统计数据是有序的。这是最后要优化的事情之一。

CPU 平均为 15%,内存约为 100 GB,当然会被 SQL 服务器用完。我们使用 SQL Server 2014 企业版。

我开始想知道的一件事。如果我有这样的 sql 语句

SELECT doors, windows, seats from cars where Wheels = @Wheels AND Active = 1

这个计划不会被重用,因为我们没有在这部分设置参数:**AND Active = 1 **

关于如何了解为什么我们有这么多一次性使用的任何想法?缓存计划的计数约为 20 000。相比之下,我们有大约 700 sp' 和应用程序中的更多查询。

4

0 回答 0