SQL Server 执行计划缓存

发表于:2015-8-26 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:pursuer.chen    来源:51Testing软件测试网采编

  测试索引更改对执行计划的影响
---清空制定数据库执行计划
DECLARE @DBID INT
SET @DBID=DB_ID()
DBCC FLUSHPROCINDB(@DBID);
GO
---创建测试数据库
CREATE TABLE TPlan
(ID INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(20) NOT NULL,
Istate INT NOT NULL,
Idate DATETIME DEFAULT(GETDATE())
)
GO
---创建索引
CREATE INDEX IX_TPlan_NAME ON TPlan
(Name
)
GO
INSERT INTO TPlan(Name,Istate)
VALUES('1',1),('2',2),('3',3)
GO
SELECT NAME FROM TPlan
GO
SELECT Cacheobjtype,objtype,dbid,objid,usecounts,pagesused,sql FROM sys.syscacheobjects
WHERE DBID=DB_ID()
  使用Profiler监控
  使用SQL:StmtRecompile监控,如果是监控存储过程则使用:SP:Recompile
  修改索引
  在索引中添加字段
  DROP INDEX [IX_TPlan_NAME] ON [dbo].[TPlan] WITH ( ONLINE = OFF )
  GO
  USE [Study]
  GO
  CREATE NONCLUSTERED INDEX [IX_TPlan_NAME] ON [dbo].[TPlan]
  (
  [Name] ASC
  )
  INCLUDE ( [Istate]) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
  GO
  再执行查询
  SELECT NAME FROM TPlan
  测试增加字段对执行计划的影响
  增加查询非相关字段
  ALTER TABLE [dbo].[TPlan]
  ADD Number INT
  删除查询有关的索引也同样会导致执行计划重编译,这里就不截图贴出来了。
  查看执行计划
  SELECT Cacheobjtype,objtype,dbid,objid,usecounts,pagesused,sql FROM sys.syscacheobjects
  WHERE DBID=DB_ID()
  执行计划中显示了该执行计划被调用了两次,在随机丛书中写的是会重新编译新的执行计划,如果是这样的话那这里的值应该是1才对。
  猜测:SQL Server在架构更改的时候通过检测执行计划已经对原先的执行计划进行了编译,所以在新的查询中还是使用了第一次查询的执行计划。
  如果有谁知道结果麻烦告知。
  总结
  如果文章对大家有帮助,希望大家能给个推荐,谢谢!!!
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号