标签: sp-blitzcache

大多数查询计划在过去 4 小时内重新创建

我的 SQL Server 数据库的性能有问题。我找到了这个工具sp_BlitzCache。命令执行后,我得到了这个语句:

您在过去 24 小时内创建了 92.00% 的计划,在过去 4 小时内创建了 92.00%。

虽然我发现了问题(使用 SQL Server Profiler,我检查了 StmtRecompile 事件发生),但我只能找到几个经常重建的全文搜索查询。但是,全文搜索查询仅占所有查询的 5% 左右。

您有什么建议可能会导致其余 87% 的计划重新创建?

我有 SQL Server 2012(版本 11.0.6567.0)。

编辑:我添加了我的性能计数器

+---------------------------+--------------------------------+--------------+
|        object_name        |          counter_name          |  cntr_value  |
+---------------------------+--------------------------------+--------------+
| SQLServer:Buffer Manager  | Background writer pages/sec    |            0 |
| SQLServer:Buffer Manager  | Buffer cache hit ratio         |        28436 |
| SQLServer:Buffer Manager  | Buffer cache hit ratio base    |        28436 |
| SQLServer:Buffer Manager  | Checkpoint pages/sec           | …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2012 sp-blitzcache query-performance

9
推荐指数
1
解决办法
1765
查看次数

“最大并行度”= 1 的服务器范围设置是否会导致 Brent Ozar 的 sp_BlitzCache 将执行计划标记为“强制序列化”?

我正在使用 Brent Ozar 的 sp_BlitzCache 存储过程,并试图确定它报告的原因:

“您计划中的某些内容正在强制进行串行查询。如果这不是故意的,则需要进一步调查。”

经过调查,我发现服务器配置已设置:

'Max Degree of Parallelism = 1' 
Run Code Online (Sandbox Code Playgroud)

(这是我要正确配置的清单。这是无知的日子。)

这是否是 Brent 报告强制序列化的原因?

在此处输入图片说明

sql-server parallelism sql-server-2016 sp-blitz sp-blitzcache

6
推荐指数
2
解决办法
524
查看次数

@SortOrder='cpu' 上的 sp_BlitzCache 结果缓慢

sp_BlitzCache几天来,我一直在使用我的数据库来调查一些问题。这是一个巨大的帮助,但就在今天,它开始表现得有点奇怪,我很好奇是否有人知道发生了什么。

昨天我用@SortOrder“读取”或“CPU”运行了许多检查,它运行良好,并且总是在大约相同的时间内返回结果。

今天,'reads' 返回的时间与昨天大致相同,但 'cpu' 需要 10 倍或更多的时间。它进入“检查功能”,然后在那里坐了很长时间。'xpm' 也和往常一样快。

我正在使用 v5.7(20170901)

我意识到我的 SQL 会话已经打开了 +24 小时,并认为##temp文件可能变得太大了。但是在我重新启动会话并且那些表消失后,cpu 排序顺序仍然很慢。所以不是这样。

关于什么会导致这种情况的任何想法?

performance sql-server sql-server-2012 sp-blitzcache

5
推荐指数
1
解决办法
550
查看次数

sp_blitzCache 结果 内存授予

我正在运行 SQL Server 2012 并使用 2019 年 3 月发布的 sp_blitzCache 来分析系统上一些运行缓慢的查询。

我已经使用参数 @SortOrder = 'Reads' 执行了存储过程,并发现一些查询需要减少读取大量页面(以百万计)。

奇怪的是,这些查询都没有返回内存授予列的任何信息,它们都是空的。

为什么我们可以让 sp_BlitzCache 返回的查询执行多次读取和写入,但所有内存授予列都包含空值?

谢谢,凯文

sql-server-2012 sp-blitzcache

3
推荐指数
1
解决办法
127
查看次数

缓存中的参数嗅探和多个计划

我们有一个多租户数据库。FirmID 是分区键,我们有很多不同的公司。

我遇到了一个参数嗅探问题,我很忙。

我宁愿不在查询中使用任何 [Options]。

我最近的想法是更改我为公司使用的参数的名称。在下面的代码段中,您将看到我将其命名为 @Firm611 而不是使用 @FirmID,其中 611 是 ID 的实际公司。这将为我提供每个公司的唯一查询。

select
    c.ID [_cid],
    c.Name [Name]  
from vwClaims c with(nolock)  
where c.FirmID=@Firm611       
and (c.Name is not null and c.Name!='')
    
select
    c.ID [_cid],
    c.Name [Name]
from vwClaims c with(nolock)
where c.FirmID=@Firm625
and (c.Name is not null and c.Name!='')
Run Code Online (Sandbox Code Playgroud)

运行 Brent Ozar 的 sp_BlitzCache 后,我发现它只是编译为相同的查询并导致重复的缓存条目:

与相同查询哈希关联的查询计划

我的问题是我读的结果对吗?即使我更改了参数名称,它真的还在使用相同的计划和参数嗅探吗?

sql-server sp-blitzcache parameter-sniffing

3
推荐指数
2
解决办法
196
查看次数

运行 sp_BlitzCache 指定输出数据库、架构和表时出错

sp_BlitzCache version 4.1 (20161210)在一个2008R2 instance (10.5.4042).

如果我在没有 的情况下执行 sp @OutputDatabaseName, @OutputSchemaName, and @OutputTableName,它工作正常。但是,当我设置这些值时,它会在整个过程中运行到最后,并出现错误:

“INSERT 语句的选择列表包含比插入列表更多的项目。SELECT 值的数量必须与 INSERT 列的数量相匹配。”

我正在运行的具体语句是:

EXEC [dbo].[sp_BlitzCache] @OutputDatabaseName = 'Maintenance_Stats'
,@OutputSchemaName = 'dbo'
,@OutputTableName = 'BlitzCacheResults'
Run Code Online (Sandbox Code Playgroud)

数据库、模式和表已经存在,但其中没有记录。所以......在 sp 代码的某个地方,它创建了表,但试图将太多的值填充到表中。

我正在使用它来尝试解决应用程序 (SCCM) 挂起问题,并按照建议创建了一个 SQL 代理作业,帮助台在遇到问题时可以执行该作业(它是间歇性的),但我尝试自己执行它,并且它因上述错误而失败。

sql-server sql-server-2008-r2 sp-blitzcache

2
推荐指数
1
解决办法
252
查看次数

运行 sp_BlitzCache (v5.2) 时出错

我已经从 First Responder Kit 安装了 sp_BlitzCache(和其他),并且收到以下错误:

EXEC sp_BlitzCache;
Run Code Online (Sandbox Code Playgroud)

消息 208,级别 16,状态 0,过程 sp_BlitzCache,第 3878 行 [批处理开始第 0 行]

无效的对象名称“#trace_flags”。

所有其他脚本似乎都按预期工作,但我不确定我是否遇到了缺陷,或者它是否与我的使用和/或配置有关。

同样值得注意的是,该过程确实返回了 10 个结果,但随后因上述错误而失败。

我已经在网上和通过存储过程本身做了一些搜索。虽然我很困惑#trace_flags临时表似乎不像其他人那样创建,但我在 GitHub 上找不到似乎表明它曾经有过的代码..所以因为我认为它一直在为其他人工作,所以它导致我相信我假设错误的事情和/或错误地运行它。

  • 服务器: Microsoft SQL Server 标准版
  • 版本: 10.50.6220.0(SQL Server 2008 R2)

先感谢您!无论是为了帮助,还是为了任何参与开发急救箱的人。

sql-server sp-blitzcache

2
推荐指数
1
解决办法
608
查看次数

sp_BlitzCache 安装语法错误

尝试sp_BlitzCache在 SQL Server 2008上安装时,我得到:

Msg 102, Level 15, State 1, Procedure sp_BlitzCache, Line 2705 Incorrect syntax near '.'.
Msg 102, Level 15, State 1, Procedure sp_BlitzCache, Line 2715 Incorrect syntax near '.'.
Msg 102, Level 15, State 1, Procedure sp_BlitzCache, Line 2865 Incorrect syntax near '.'.
Run Code Online (Sandbox Code Playgroud)

第 2705 行是:

/* END Testing using XML nodes to speed up processing */
Run Code Online (Sandbox Code Playgroud)

第 2865FROM行是:

/* Set configuration values */
SELECT  @ctp = NULLIF(CAST(value AS INT), 0)
FROM    sys.configurations …
Run Code Online (Sandbox Code Playgroud)

sql-server sp-blitzcache

2
推荐指数
1
解决办法
91
查看次数

针对一个存储过程的 sp_blitzCache

最近我们开始使用 sp_BlitzCache 来帮助我们调整我们的查询。我们发现一个 SP 有一些问题,我们能够成功地重构它。

在我们调整查询之前的一周内,我有一份 sp_BlitzCache 的输出副本,可在此处获得

https://drive.google.com/open?id=1oiAEl62ZT51qcCEhVzkg8oDA3HB-NCsv

生成此输出的命令运行是

exec sp_BlitzCache @StoredProcName = 'hs_UpdateShipmentPackagesAndWeightSp'
Run Code Online (Sandbox Code Playgroud)

几个问题

1)我注意到我们有多个行用于同一个计划句柄,这是为什么?

2) 您会注意到成本最高的查询 (1451) 具有整个 create procedure 语句的查询文本,这是什么意思?该行的指标是否仅用于创建存储过程?

3) 对于成本最高的行,即上面提到的行,它的最小/最大授权几乎为 2GB。这是否意味着当我们运行 create procedure 语句时,它要求 2gb 的内存?还是在调用 proc 时使用此计划?我想这与问题 2 的答案有关

4) 为什么在某些情况下我们有 Min/Max grant KB > 0 和 Min/Max used grant kb > 0,但百分比内存授权为 null ?

我们正在运行 SQL Server 2012。

谢谢,凯文

sql-server execution-plan sql-server-2012 sp-blitzcache

2
推荐指数
1
解决办法
953
查看次数