如何确定 SQL Server 中正在编译的内容

2024-01-11

在跟踪我的 SQL Server 2008 Std Edition 安装上的性能监视器时,我注意到每秒 SQL 编译数大约每五秒就会从 3 次激增到大约 50 次。

我们每秒的编译与批处理请求的比率也相对较高。我知道理想情况下这应该是 1/10 的比例,但我们现在的比例更像是 8/10。

该数据库支持具有大量应用程序的繁忙网站,因此很难确定导致过度编译的原因,尤其是 5 秒的峰值。几乎所有查询都是存储过程调用而不是嵌入式 SQL,并且我们拥有大量 (48GB) RAM。

有没有办法及时查看给定时刻当前正在编译哪些查询?如果是这样,我们可以找出是否有问题。


过去,当我不得不研究计划缓存/过度查询重新编译的问题时,我遵循了 Microsoft 白皮书中提供的指导“在 SQL Server 2008 中规划缓存” http://msdn.microsoft.com/en-us/library/ee343986%28v=sql.100%29.aspx我强烈建议阅读它,因为它涵盖了计划缓存、查询计划重用、重新编译的原因、识别重新编译和其他相关主题。

话虽如此,SQL Server Profiler(如果您将其作为客户端工具安装的一部分进行安装,则应位于 Microsoft SQL Server 2008 -> 性能工具下)公开了三个与查询编译直接相关的事件,这些事件可能对您有帮助:

  • Cursor
    • 光标重新编译
  • Performance
    • 用于查询编译的显示计划 XML
  • Stored Procedure
    • SP:重新编译

您很可能正在使用存储过程,您只需要担心SP:重新编译 http://msdn.microsoft.com/en-us/library/ms187105(v=sql.100).aspx事件。每当重新编译存储过程、触发器或用户定义函数时,都会触发此事件。 TextData 列将显示导致语句重新编译的 tsql 语句的文本,EventSubClass 列将显示指示重新编译原因的代码。

SQL 2008 中 SP:Recompile 的事件子类代码

  • 1 = 架构已更改
  • 2 = 统计数据已更改
  • 3 = 重新编译 DNR
  • 4 = 设置选项已更改
  • 5 = 临时表已更改
  • 6 = 远程行集已更改
  • 7 = 浏览权限已更改
  • 8 = 查询通知环境已更改
  • 9 = MPI 视图已更改
  • 10 = 光标选项已更改
  • 11 = 带重新编译选项

如果您监视以下 5 个事件,您将能够看到 SQL Server 上正在调用哪些存储过程和语句以及哪些正在触发重新编译:

  • Store Procedures
    • SP:开始
    • SP:Stmt启动
    • SP:重新编译
    • SP:已完成
  • Performance
    • 自动统计

我通常还设置 Profiler 跟踪来捕获这些事件的所有列。我想说的是,使用这 5 个事件设置跟踪,运行跟踪 30 到 60 秒,然后暂停它,然后您应该对导致重新编译的原因有一个很好的快照。

如果噪声太多,您可以开始向跟踪属性添加列过滤器以过滤输入/输出事件。例如,如果您发现大多数重新编译仅发生在一个数据库上,请在databaseID或databaseName列上设置列过滤器,以便仅针对该数据库运行的查询包含在跟踪中。

然后开始寻找重新编译查询的模式,并使用 Microsoft 的白皮书作为指导,了解为什么它们可能会触发重新编译。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 SQL Server 中正在编译的内容 的相关文章

  • 如何找出我的 MS SQL Server 排序规则是什么?

    是否有我可以执行的 SQL 来找出答案 服务器默认排序规则 select serverproperty collation 哪个是相同的 select databasepropertyex master collation Check 服务
  • SQL Server 2000 中是否提供公用表表达式 (CTE)

    我最近发现了以下文章 http www tsqltutorials com with common table expressions php http www tsqltutorials com with common table exp
  • sql查询中的truncate和delete命令有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 SQL中TRUNCATE和DELETE有什么区别 https stackoverflow com questions 139630 whats the difference between trunc
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr
  • T-sql、刻度、时间戳

    是否有可能在 t sql 中获得像 DateTime Ticks 这样的 C 内容 感谢帮助 您不太可能从 SQL 中获得与 DateTime Ticks 相同的精度 因为 SQL 不能以那么高的精度表达时间 SQL Server 只存储大
  • 对具有许多索引的表进行缓慢的批量插入

    我尝试将数百万条记录插入到具有 20 多个索引的表中 在上次运行中 每 100 000 行花费了 4 个多小时 并且查询在 3 5 天后被取消 您对如何加快速度有什么建议吗 我怀疑是索引太多的原因 如果你也这么认为 如何在操作前自动删除索引
  • 与 FOREIGN KEY 约束冲突

    我有两张桌子 学术界 CREATE TABLE dbo R ACADEMIE ID ACADEMIE dbo IDENTIFIANT NOT NULL LC ACADEMIE CODE dbo LIBELLE COURT NOT NULL
  • SQL Server 中的派生表

    我有这两个疑问 我不知道如何将它们组合在一起来制作派生表 我假设使用第二个查询作为主查询 并在主查询的 FROM 子句中使用第一个查询 SELECT EmailAddress Orders OrderID SUM ItemPrice Qua
  • 在 C# 中将平面数据库结果集转换为分层对象集合

    我有一个数据库查询 它以平面格式返回分层数据 例如客户 订单和订单项目 只是一个例子 我的数据不同 如何将其转换为分层对象集合 即客户对象的集合 其中每个客户对象都有订单对象的集合 每个订单对象都有订单项目对象的集合 这只是循环遍历每个项目
  • 更新每组单行

    的背景 我有一个临时表 其中包含唯一的 rowID OrderNumber 和 guestCount 等信息 RowID 和 OrderNumber 已存在于该表中 并且我正在运行一个新查询来填充每个 orderNumber 缺少的 gue
  • SqlException超时未达到

    我们的服务器有时会抛出这个众所周知的异常 超时已过 操作完成之前超时时间已过 或者服务器未响应 当服务器处理大请求时 这种情况会在压力下发生 我做了一些研究 发现我可以改变连接字符串连接超时设置和 或SqlCommand 超时数据读取器属性
  • PHP、PDO 和 SQLSRV 对一个 INSERT 语句执行多次

    我已经在 MySQL 和 Apache 服务器上使用 PDO 和 PHP 一段时间了 我最近的任务是将企业的旧 Web 应用程序转换为新设置 旧设置是标准 Linux Web 堆栈 Apache PHP MySQL Filezilla 新设
  • 在 Dockerfile 中切换到 root 用户

    我运行了这个命令 docker pull mcr microsoft com mssql server 2019 latest 然后我创建了一个 dockerfile 来使用此容器映像作为另一个容器的基础映像 escape FROM mcr
  • 从 URL 生成报告 - SQL Server Reporting Services 2008

    我有 SQL Server Reporting Services 2008 当我打开以下 URL 时 http localhost Reports Pages Report aspx someReport 我正在进入报告屏幕 在其中填写参数
  • 如何检查Azure SQL数据库中是否已存在数据库用户

    我的新客户计划使用 Azure 托管 SQL 数据库服务 我正在使用 dacpac 来部署数据库 在 dacpac 中 我有一个部署后脚本 用于创建 sql 用户 如下所示 IF NOT EXISTS SELECT name FROM sy
  • 如何使用索引更改表的列?

    我想将带有某些索引的表中 a 列的列大小从 varchar 200 更改为 varchar 8000 我应该如何进行 既然是VARCHAR你正在增加尺寸 然后简单地ALTER TABLE ALTER COLUMN https learn m
  • 使用 dtexec 运行 SSIS 包

    我正在使用 dtexec 运行 SSIS 包 该软件包在我的系统上的 BIDS 中运行良好 当我创建 SQL Server 代理作业以按计划运行包时 包运行步骤被安排为 T SQL 任务 而不是 SSIS 包 该作业没有报告错误 但它甚至没
  • SQL 查询中的可选参数在检查 NULL 时非常慢

    我有许多已连接的表 最大行数约为 400 万条记录 我们正在存储过程中搜索该表 并且有一个默认值为 NULL 的可选参数 下面是我们正在运行的编辑示例 连接涉及更多表 但只有 1 个字段具有 WHERE 子句 DECLARE OwnerId
  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • SQL Server:删除具有外键约束的行:事务可以覆盖约束吗?

    我有一些添加了外键约束的表 它们与代码生成一起使用 以在生成的存储过程中设置特定的联接 是否可以通过在事务中调用多个删除来覆盖这些约束 特别是 C 中的 TransactionScope 或者绝对需要级联删除吗 不要使用级联删除 这样可能会

随机推荐

  • 更改 ListView 中 GridView 行的背景颜色

    我有一个列表视图如下
  • 为什么不使用抽象类而不是接口?

    我正在考虑使用带有所有抽象成员的抽象类而不是接口 以避免显式接口实现样板代码 所以而不是 type IMyInterface abstract Name string abstract Text string type MyClass me
  • 从具有多个结果的矩阵构建地图

    我有一个未知 n x m 维度的输入矩阵 由 1 和 0 填充 例如 5x4 矩阵 A array 1 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 1 0 1 1 Goal 我需要在之间创建 1 1 地图as many尽可能
  • VS 链接器失败,并出现 std::string 方法的“对象已存在”错误

    首先 我必须强调 我已经尝试了相当长的时间来解决它 但我不知道我错过了什么 或更准确地说 我不明白什么 任何帮助将不胜感激 我有一个名为 static tools 的项目 它编译为静态库 称为静态工具库并且它使用STL 我使用 MD 编译该
  • 查询 std::ostringstream 内容

    是否可以搜索内容std ostringstream不使用std ostringstream str 成员函数创建一个std string寻找 我有以下内容并希望避免构建std string每次调用时都会实例化flush include
  • 在android中将textview放在imageview之上

    我有一个listview 有一个单一的imageview这是 可垂直滚动 我正在尝试放置一个textview在之上Imageview 两个视图都必须可见 是否可以 如果是 如何以编程方式执行 我需要做出哪些改变 list view item
  • 发送 HTTP 标头后,服务器无法修改 cookie

    我正在用 C 创建一个 Web 应用程序 当我的页面加载时 我会触发一个异步线程来处理一些数据 此处理的一部分是更新 cookie 但是 当我将 cookie 保存到响应中时 System Web HttpContext Current R
  • 将单列拆分为四列并计算 R 中的重复模式

    该项目的目的是了解在观察物体时如何获取信息 想象一个对象有这样的元素a b c d e and f 一个人可能会看a并移至b等等 现在 我们希望绘制并了解该人如何浏览给定刺激的不同元素 我有在单列中捕获此运动的数据 但我需要将其分成几列才能
  • SQL随机数不起作用

    declare fieldForceCounter as int declare SaleDate as dateTime declare RandomNoSeed as decimal set fieldForceCounter 1 se
  • 如何从 .csv 文件读取字符串并拆分它?

    我有一个 csv 文件 我必须从中读取一个字符串并将其拆分为子字符串 例如 s1 s2 s3 然后我必须把它分成s1 s2 s3 根据 进行拆分 好吧 尝试以下 beanshell java 代码将提取的 subjects string 变
  • 从字节数组创建 IMFByteStream

    我正在尝试采用一种方法 该方法最初从 Microsoft 的 MediaFoundation 音频播放示例中获取 URL 改为从 const char 数组中获取源 问题是 CreateObjectFromByteStream 需要 IMF
  • 使用 Python 访问已经运行的进程

    问题 有没有一种方法 使用Python 访问正在运行的标准输出process 这个过程有not由Python启动 Context 有一个程序叫玛雅巴奇 从 3D Maya 场景文件渲染图像 如果我从命令行运行该程序 我会看到来自的进度消息玛
  • 拨打 tcp 127.0.0.1:5000: 连接:连接被拒绝

    我托管了一个 Flask Web 应用程序 当我尝试从 Firefox 浏览器打开它时 它显示 拨打 TCP 127 0 0 1 5000 连接 连接被拒绝 但是当我尝试在 Chrome 中打开 URI 时 它工作正常 可能的原因是什么 您
  • UICollectionView - 具有 pinterest 样式布局的自动布局

    我目前正在尝试构建 pinterest 样式布局 同时使用自动布局具有动态高度 试图远离手动计算单元格高度 我目前的目标是 iOS 9 及更高版本 我见过关于如何使用特定于每个索引的计算进行动态布局和 pinterest 布局的精彩示例 但
  • 如何处置我的 Excel 应用程序

    我的代码如下 Excel Application xlApp new Excel Application Excel Workbook xlWorkbook xlApp Workbooks Open file Excel Worksheet
  • 为什么我得到-2147483648和-1的乘法,负数,即-2147483648,而不应该是+2147483648 [重复]

    这个问题在这里已经有答案了 这是我写的代码片段this https leetcode com problems divide two integers Leetcode 中的问题 public static int quotient int
  • webkit 中奇怪的盒子阴影伪影

    有人知道是什么导致输入字段右侧出现蓝色框吗 过去几天这一直是我存在的祸根 仅间歇性出现 每个输入的标记如下所示 div class input text div
  • String.Format 类似于 T-SQL 中的功能吗?

    我正在寻找 T SQL 中的内置函数 扩展函数 用于类似于String Format NET 中的方法 如果您使用的是 SQL Server 2012 及以上版本 则可以使用FORMATMESSAGE eg DECLARE s NVARCH
  • 什么是符号张量,为什么它们会抛出“use `steps_per_epoch` argument”错误?

    注意 我已经解决了我的问题 但我发布这个问题是为了防止其他人也有这个问题 因为我不明白我是如何解决它的 我正在使用 Tensorflow 后端在 Keras 中构建命名实体分类器 序列标记模型 当我尝试拟合模型时 出现此错误 令人惊讶的是
  • 如何确定 SQL Server 中正在编译的内容

    在跟踪我的 SQL Server 2008 Std Edition 安装上的性能监视器时 我注意到每秒 SQL 编译数大约每五秒就会从 3 次激增到大约 50 次 我们每秒的编译与批处理请求的比率也相对较高 我知道理想情况下这应该是 1 1