sql 获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件)
--获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件)
SET NOCOUNT ON;
DBCC FREEPROCCACHE;
--清空过程缓存
GO
--使用tempdb..Optstats表来捕获执行几次
IF ( OBJECT_ID('dbo.tempdb..Optstats') IS NOT NULL )
DROP TABLE tempdb..Optstats;
GO
--创建临时表tempdb..Optstats
SELECT 0 Run ,
*
INTO tempdb..Optstats
FROM sys.dm_exec_query_optimizer_info;
GO
--该语句的计划将被保存到过程缓存
--这样下一次执行时不会产生任何优化器事件
--后面的Go用于确保下次执行这段脚本时可以重用Insert计划
GO
INSERT INTO tempdb..Optstats
SELECT 2 Run ,
*
FROM sys.dm_exec_query_optimizer_info;
GO
--清空临时列表
TRUNCATE TABLE tempdb..Optstats;
GO
--存储运行前的信息
GO
INSERT INTO tempdb..Optstats
SELECT 1 Run ,
*
FROM sys.dm_exec_query_optimizer_info;
GO
--执行批处理语句
SELECT C.CustomerID ,
COUNT(O.OrderID) NumOrders
FROM dbo.Customers C
LEFT JOIN dbo.Orders O ON O.CustomerID = C.CustomerID
WHERE C.City = 'London'
GROUP BY C.CustomerID
HAVING COUNT(O.OrderID) > 5
ORDER BY NumOrders;
GO
--保存到临时表
INSERT INTO tempdb..Optstats
SELECT 2 Run ,
*
FROM sys.dm_exec_query_optimizer_info;
GO
/*从临时表中取出Run1和Run2之间Occurrence或Value值发生改变的所有事件
然后显示执行批处理或查询之前(Run1Occurrence和Run1Value)和之后所有这些事件(Run2Occurrence和Run2Value)的Occurrence和Value*/
WITH X ( Run, Counter, Occurrence, Value )
AS ( SELECT *
FROM tempdb..Optstats
WHERE Run = 1
),
Y ( Run, Counter, Occurrence, Value )
AS ( SELECT *
FROM tempdb..Optstats
WHERE Run = 2
)
SELECT X.Counter ,
Y.Occurrence - X.Occurrence Occurrence ,
CASE Y.Occurrence - X.Occurrence
WHEN 0 THEN Y.Value * Y.Occurrence - X.Value * X.Occurrence
ELSE ( Y.Value * Y.Occurrence - X.Value * X.Occurrence )
/ ( Y.Occurrence - X.Occurrence )
END Value
FROM X
JOIN Y ON X.Counter = Y.Counter
AND ( X.Occurrence <> Y.Occurrence
OR X.Value <> Y.Value
);
GO
--删除临时表
DROP TABLE tempdb..Optstats;
GO
sql 获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件)的更多相关文章
- 将SQL获取的信息传递到Email中
将SQL获取的信息传递到Email中 最近在为公司财务开发一个邮件通知时遇到了一个技术问题.原来我设计SSIS的是每天将ERP系统支付数据导出到财务支付平台后 Email 通知财务,然后财务到支付平台 ...
- SSIS 实例——将SQL获取的信息传递到Email中
最近在为公司财务开发一个邮件通知时遇到了一个技术问题.原来我设计SSIS的是每天将ERP系统支付数据导出到财务支付平台后 Email 通知财务,然后财务到支付平台上进行支付操作.由于那个时候开发时间很 ...
- linux下获取服务器硬件信息的脚本
这是个简单的脚本,便于查询服务器的硬件信息: #!/bin/bash # # Description: # Used to get the hardware config information. # ...
- SQL Server 监控统计阻塞脚本信息
数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大.阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象. 但是阻塞的 ...
- 使用ttXactAdmin、ttSQLCmdCacheInfo、ttSQLCmdQueryPlan获取SQL相关具体信息[TimesTen运维]
使用ttXactAdmin.ttSQLCmdCacheInfo.ttSQLCmdQueryPlan获取SQL相关具体信息,适合于tt11以上版本号. $ ttversion TimesTen Rele ...
- SQL Server 获取服务器信息
最近做了一个小工具,里面涉及到一些取SQL Server 服务器信息的一些东西,找了好久,找到一个不错的,贴出来分享. 系统函数 SERVERPROPERTY ( propertyname ) 包含要 ...
- C# 脚本代码自动登录淘宝获取用户信息
C# 脚本代码自动登录淘宝获取用户信息 最近遇到的一个需求是如何让程序自动登录淘宝, 获取用户名称等信息. 其实这个利用SS (SpiderStudio的简称) 实现起来非常简单. 十数行代码就可 ...
- 通过kfed自动获取磁盘信息的小脚本
通过kfed自动获取磁盘信息的小脚本 编译KFED [oracle@rac lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac lib]$ pwd /u01/app/ ...
- linux通过脚本获取内存信息
1 原理 脚本中通过执行free获取内存信息,然后将文本信息通过“空格”分隔符分割成字符串数组将不同信息提取出来,最后通过bc计算出百分比 2 脚本 #!/bin/shHOSTNAME=`hostna ...
随机推荐
- flask-Datatables
我先给大家推荐一个jQuery开源库网址 http://www.jq22.com/ Datatables 是一款jquery表格插件.他是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能 ...
- JPA-style positional param was not an integral ordinal
参数错误 多为SQL语句问题 例如SQL拼装中的空格,换行时首位应多加空格保持语句效果
- 设置多台机器linux服务器ssh相互无密码访问
在每台服务器上都执行ssh-keygen -t rsa生成密钥对: $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter ...
- opencv2函数学习之threshold:实现图像阈值化
在opencv2中,threshold函数可以进行阈值化操作. double threshold( const Mat& src, Mat& dst, double thresh,do ...
- Nutch的nutch-default.xml和regex-urlfilter.txt的中文解释
nutch-default解释.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl&qu ...
- ES6箭头函数this指向
普通函数中的this: 1. this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,那么func中的this就是obj 2.在默认情况(非严格模式下,未使用 'us ...
- j2ee高级开发技术课程第五周
pplet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序. 如下所示是独立的 J ...
- SSO - 开篇引例
进公司以来, 所做的产品中, 下面的子系统就没有少于10个的, 其中有的是.net做的, 有的是java做的, 还有安卓端, ios端. 那么这么多子系统, 我可能需要访问其中的多个(同一平台), 我 ...
- 类的静态(Static)成员——字段
定义一个雇员类: namespace StaticFieldTest1 { class Employee { public int Id { get; set; } public string Fir ...
- MFC RichText 滚动条问题
一共涉及两个问题: 1.如何更加轻快的在RichText不覆盖之前的文本而添加新的文本 CString text("add text\n"); //想插入的文本,为了使下次输入我们 ...