简介
我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径。当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse)、绑定(Bind)、查询优化(Optimization,有时候也被称为简化)、执行(Execution)。除去执行步骤外,前三个步骤之后就生成了执行计划,也就是SQL Server按照该计划获取物理数据方式,最后执行步骤按照执行计划执行查询从而获得结果。但查询优化器不是本篇的重点,...
在上篇文章给大家介绍了SQL Server中的执行计划缓存(上),本文继续给大家介绍sqlserver执行计划缓存相关知识,小伙伴们一起学习吧。
简介
在上篇文章中我们谈到了查询优化器和执行计划缓存的关系,以及其二者之间的冲突。本篇文章中,我们会主要阐述执行计划缓存常见的问题以及一些解决办法。
将执行缓存考虑在内时的流程
上篇文章中提到了查询优化器解析语句的过程,当将计划缓存考虑在内时,首先需要查看计划缓存中是否已经有语...
TABLE TEST CREATE TABLE TEST (OBJECT_ID INT, NAME VARCHAR(32)); CREATE INDEX PK_TEST ON TEST(OBJECT_ID) DECLARE @Index INT =0; WHILE @Index < 500000BEGIN INSERT INTO TEST SELECT @Index, ‘kerry‘+CAST(@Index AS VARCHAR(6)); SET @Index = @Index +1;END UPDATE STATISTICS TEST WITH FULLSCAN
场景1:如下所示,并不是所有的OR条件都会导致SQL走全表扫描。具体情况具体分析,不要套用教条。SE...
TABLE TEST CREATE TABLE TEST (OBJECT_ID INT, NAME VARCHAR(32)); CREATE INDEX PK_TEST ON TEST(OBJECT_ID) DECLARE @Index INT =0; WHILE @Index < 500000BEGIN INSERT INTO TEST SELECT @Index, ‘kerry‘+CAST(@Index AS VARCHAR(6)); SET @Index = @Index +1;END UPDATE STATISTICS TEST WITH FULLSCAN
场景1:如下所示,并不是所有的OR条件都会导致SQL走全表扫描。具体情况具体分析,不要套用教条。SE...
开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种。它等同于 READUNCOMMITTED 。 具体的功能作用如下所示(摘自MSDN):
1: 指定允许脏读。不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻碍当前事务读取锁定数据。允许脏读可能产生较多的并发操作,但其代价是读取以后会被其他事务回滚的数据修改。这可能会使您的事务出错,向用户显示从未提交过的数...
开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种。它等同于 READUNCOMMITTED 。 具体的功能作用如下所示(摘自MSDN):
1: 指定允许脏读。不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻碍当前事务读取锁定数据。允许脏读可能产生较多的并发操作,但其代价是读取以后会被其他事务回滚的数据修改。这可能会使您的事务出错,向用户显示从未提交过的数...
@P0 nvarchar(4000),@P1 nvarchar(4000); SET @P0=‘1‘;SET @P1=‘K172‘; SELECT [recid],[machine_no] ,[stop_stime] ,[stop_etime] ,[status] ,[memo] ,[createddate] FROM machine_stop_alarm_msg t WHERE 1=1 AND t.status=@P0 AND t.machine_no in(@P1 ) ORDER BY machine_no, stop_stime ;
machine_stop_alarm_msg 表只有一个聚集索引PK_machine_stop_alarm_msg,字段为recid。 当时我优化的...
本文将为您描述SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析,教程操作方法:
今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(Linked Server)查询另外一台服务器数据(存储过程里面没有任何显性事务、UPDATE、DELETE操作,只有几个简单的SELECT查询,其中有两个查询使用了链接服务器Linked Server,由于生产环境,不好贴出SQL语句),在DPA监控工具里...
TABLE Test
(id int identity(1,1),name varchar(50)
)
GOINSERT INTO Test VALUES (NEWID())
GO 100SQL Server中有一个未公开的伪列“%%physloc%%”,也就是在查询的时候,对于任何一张表,可以加上这个字段,比如如下,就可以查到表中每一行的伪列。这个伪列的类型是binary(8),也就是有8个字节,参考上图的DATALENGTH(%%physloc%%) as Len,%%physloc%%返回的记录的物理地址,其中前四个字节表示页号,中间两个字节表示文件号,...
category_class ,--类别中项目类型:1=作业2=警报 3=操作员
category_type ,--类别中类型:=本地、=多服务器、=无
name --分类名称
FROMmsdb.dbo.syscategories有兴趣的可以研究一下存储过程msdb.dbo.sp_help_category
sp_help_category
2:添加作业分类
如下所示,添加一个叫"DBA_MONITORING"的作业分类Code SnippetEXEC msdb.dbo.sp_add_category
@class=N‘...
数据库中,如果应用程序正在执行一个事务的时候突然遭遇了网络异常,例如网络掉包,网络中断等,那么这个事务会怎么样? SQL Server数据库是通过什么机制来判断处理呢? 估计很多人跟我一样都有不少疑问, 我们下面构造一个测试实验来测试验证一下。如下所示: 步骤1:在客户端连使用SSMS工具连接到测试数据库,执行下面脚本,显性事务既不提交也不回滚。模拟事务正在执行当中。 USE AdventureWorks2012; GO SELECT @@SPID; ...
DPA可以监控到该函数每小时被调用的次数,如下截图所示: 那么第一个问题来了。 DPA如何监控获取这个函数每小时执行多少次呢? 其实这个很简单, sys.dm_exec_query_stats视图里面有个字段execution_count 统计SQL的执行次数,但是它记录的是计划自上次编译以来所执行的次数。那么,我整点执行两次结果的差值(execution_count的差值)就是一小时内的执行次数。 execution_count Number of times that the plan has bee...
table TestLock
(Id int,Name varchar(100)
)create clustered index idx_id on TestLock(id)insert into TestLock values (10,‘aaa‘)
insert into TestLock values (20,‘bbb‘)
insert into TestLock values (30,‘ccc‘)
insert into TestLock values (40,‘ddd‘)
insert into TestLock values (50,‘eee‘)1.2 测试表中的数据行存储位置分析
通过系统命令或者表查询测试表的page信息--查看数据页信息
dbcc ind(‘Test‘,‘...
table TestLock
(Id int,Name varchar(100)
)create clustered index idx_id on TestLock(id)insert into TestLock values (10,‘aaa‘)
insert into TestLock values (20,‘bbb‘)
insert into TestLock values (30,‘ccc‘)
insert into TestLock values (40,‘ddd‘)
insert into TestLock values (50,‘eee‘)1.2 测试表中的数据行存储位置分析
通过系统命令或者表查询测试表的page信息--查看数据页信息
dbcc ind(‘Test‘,‘...
在SQL Server中,我们要看懂执行计划和统计信息,我们可能需要深刻理解一些关键词,例如密度(Density)、选择性(Selectivity)、谓词(predicate)、基数(Cardinality)。前阵子,对密度和选择性的概念模糊了,刚好看了Query Tuning Fundamentals: Density, Predicates, Selectivity, and Cardinality这篇文章, 遂结合自己的理解、以及相关案例、分析总结一下这些专业名称。 谓词(predicate) 什么是谓词呢?谓词是取值为...