- 博客(19)
- 资源 (29)
- 收藏
- 关注
原创 T-SQL执行内幕(11)——Read Ahead
本文属于SQL Server T-SQL执行内幕系列 每当操作读取页的数据,意味着这些数据需要固定到缓存(buffer pool)中。这个时候可能会导致操作被阻塞,因为当所需要的数据不在内存时,需要把数据从磁盘载入内存,这个时候操作需要等待页从磁盘搜索并载入内存。如果由于系统负担很重或者载入的量很大,磁盘I/O响应不及时,那么此时操作就会被阻塞(stall),性能将会暴跌。 从现实生...
2018-03-31 15:52:53 1545 1
原创 T-SQL执行内幕(10)——读取数据
本文属于SQL Server T-SQL执行内幕系列 关系型数据库的数据访问操作总是从内存的缓存中读取数据而不是从磁盘中读取。这个缓存称为Buffer Pool。如果数据访问操作符未能在缓存中找到所需的数据,那么就需要从磁盘中加载,这就会产生一个磁盘I/O读(set statistics io on中的物理读),并且需要等待这个物理读完成(及从磁盘找到数据并加载到缓存为止)之后,才能进行操作...
2018-03-31 15:39:06 1084
原创 T-SQL执行内幕(9)——数据访问
本文属于SQL Server T-SQL执行内幕系列 在执行树的叶子端(通常就是图形化执行计划每个分支的最右端),一般是实际访问数据的操作符。当调用这些操作符上的next()方法时,会返回表或者索引上的实际数据。数据访问通常有三类可能的操作符:Scan: 各类扫描,扫描操作会在数据上循环访问所有的行。它永远不会定位一个特定的行,取而代之的是扫描整个数据集。在执行计划中常见的扫描操作符有...
2018-03-31 15:14:04 897
原创 T-SQL执行内幕(8)——数据存储
本文属于SQL Server T-SQL执行内幕系列 前面提到了数据访问,那么如何访问?访问什么?为此必须介绍一下数据存储的概念。SQL Server以三种方式存储和组织数据:均可从sys.partitions中查到Heaps:堆,指没有聚集索引(注意主键并非一定是聚集索引)的表。另外诸如select …into … from …语句生成的表也是堆表。SQL Server堆结构 在sy...
2018-03-31 11:16:37 918
原创 T-SQL执行内幕(7)——内存授予
本文属于SQL Server T-SQL执行内幕系列 前面提到,在执行过程中,很多操作符都需要内存来支持运作。比如Sort操作符,需要存储所有的输入以便进行排序,而Hash操作,为了创建大型的hash表,也需要申请资源来存储数据。 基于操作符的类型和预估的影响行数及列的大小(这些都可以从统计信息获得),执行计划可以知道这些操作符需要的大概内存。整个执行计划所需的内存总和称为内存授予(M...
2018-03-30 15:31:50 980
原创 T-SQL执行内幕(6)——返回结果
本文属于SQL Server T-SQL执行内幕系列 在执行引擎按照执行计划的要求把数据成功检索之后,就需要把数据返回给客户端。这里的结果不是单纯的数据库引擎完成查询数据之后的结果,而是客户端(如SSMS)接收到数据的结果。一旦数据已经“填满”执行树的各个操作符,那么最顶端的根操作符就会负责把数据写入网络缓存(network buffer)并把这些数据发送给客户端。 结果集并不是直接...
2018-03-28 15:54:10 1005
原创 T-SQL执行内幕(5)——执行
本文属于SQL Server T-SQL执行内幕系列 一旦优化器选择了开销最低的预估执行计划之后,就会把预估执行计划转换成实际执行树(Actual Execution Tree)进行查询执行。树的每个节点都是一个操作符。操作符及一系列的有向箭头(代表数据流的方向及结果集的数据量(箭头粗细)) 组成了整个执行计划,这里指的是图形化执行计划。 所有的操作符都实现一个具有三个方法(open...
2018-03-28 15:19:38 1079
原创 T-SQL执行内幕(4)——优化
本文属于SQL Server T-SQL执行内幕系列 接上文,当解析和编译完成后,请求的生命周期就进入下一步——优化(Optimisation)。在SQL语言中,优化的本质就是找最好的路线。意思是在多种可能的候选数据访问方式中选择最佳一个。比如两表关联的简单查询语句,每个表有1个索引,那么就有4种可能的数据访问方式(AB两表的索引扫描、AB两表的索引查找,A扫描B查找、A查找B扫描)。随着表...
2018-03-28 14:30:48 1335
原创 T-SQL执行内幕(3)——解析和编译
本文属于SQL Server T-SQL执行内幕系列 接上文,当请求被任务接收同时得到工作线程指派执行后,就开始在SQL Server内部进行运作。当请求被执行时,第一步就是要先解析(Parsing)请求,把TDS数据流转换成SQL Server可识别的格式。 从客户端发送的是T-SQL文本,然后转换成TDS数据流,到达SQL Server之后变回T-SQL文本。但是由于纯T-SQL文...
2018-03-23 16:53:32 1263
原创 T-SQL执行内幕(2)——Tasks、Workers、Threads、Scheduler、Sessions、Connections、Requests
本文属于SQL Server T-SQL执行内幕系列 接上文:T-SQL执行内幕(1)——简介 本节以介绍一些基础的但又容易混淆的概念。包括:Tasks、Workers、Threads、Scheduler、Sessions、Connections、RequestsScheduler:计划程序,特指SQL OS的Scheduler,用于管理SQL Server中的线程调度的对象,每个计划...
2018-03-23 14:57:08 1252
原创 T-SQL执行内幕(1)——简介
本文属于SQL Server T-SQL执行内幕系列前言: 本文主体内容来自于:http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/但是经常打不开,本人又在:https://www.codeproject.com/Articles/630346/Understanding-how-SQL-Ser...
2018-03-23 14:54:46 2590
原创 SQL Server新基数估量器
本系列属于 SQL Server性能优化案例分享 专题 当你使用SQL Server 2014及以上版本并且数据库的兼容级别为120或以上时,可能会有一个比较奇怪的现象,原本在SQL 2008/2012上运行正常的数据库,可能因为迁移到SQL Server 2014版本,在新环境突然变慢了。 一般来说,迁移/升级实例版本时,我们必不可少的工作有:备份、重建全库索引、全库更新统计信息。但...
2018-03-21 16:05:16 870
原创 SQL Server性能优化案例分享(1)——CPU持续过高——CPU高使用率的常见原因及处理方向
本系列属于 SQL Server性能优化案例分享 专题 部分内容借用《SQL Server 2012实施与管理实战指南》P592,如果SQL Server错误日志里面并没有17883/17884这类错误,但是SQL Server CPU很高,那一般就是工作负载太高导致的。意味着SQL Server并没有什么大问题,但是很辛苦地在完成用户发过来的请求。 由于CPU较于内存、阻塞、磁盘等资...
2018-03-12 17:23:14 6218
翻译 什么东西导致了执行计划的严重错误——需要更新统计信息吗?
原文出处:What caused that plan to go horribly wrong – should you update statistics? 由于本人确实遇到过这类问题,但是基于水平和经历,不打算重复造轮子,所以把大牛的文章翻译一下以供大家参考。以下是译文:过去几年里,我(作者)遇到这类情景: 有一个存储过程在大部分时间里面都运行得很好,但是突然就不行了。其性...
2018-03-12 11:08:23 1536
原创 SQL Server Hash Warning 优化
本系列属于 SQL Server性能优化案例分享 专题 最近遇到服务器CPU持续居高问题,通过计数器的检查,初步断定存在语句性能问题,然后有针对性地抓取问题语句(来龙去脉将会在另外一篇文章解释,本文关注Hash Warning),其执行计划如下: 因为这是生产环境,所以下面例子把表名替换成A/B/C/D等表。代码很简单,大概样子如下:SELECT bo.Scode ,d.PCode ,...
2018-03-08 14:50:59 1174
原创 SQL Server Table Spool优化
本系列属于 SQL Server性能优化案例分享 专题 在执行计划中出现的Spool操作符,往往都具有明显的性能问题,也意味着数据库的设计、编码等可能存在问题,所以本文专门介绍一下这个操作符。 Spool介绍 Spool是内存或者磁盘上的缓存(cache)或临时表。SQL Server用这个结构来提升在执行过程中需要多次执行的复杂的子表达式的性能。注意几个次:一次运行中多次执行、复...
2018-03-06 08:24:34 5226
原创 Securing Checklists
本文属于SQL Server安全专题系列 确保非授权用户不能非法进入系统环境。只安装所需的软件组件。最小化访问SQL Server的用户,强烈建议借助操作系统使用Windows身份验证或者SQL On Linux的集成身份验证来访问。 哪怕是DBA,也应该仅在需要时采用sysadmin登录,更安全的方式是使用Windows身份验证登录。SA帐号如果启用,应该设置强密码。但是依旧建议使用Win...
2018-03-05 10:49:28 648
原创 SQL Server性能优化案例分享专题
写了那么久的文章,觉得文章篇数很多,但是缺乏一定的管理,混乱无序的知识归档,对于一个专职DBA来说,有点“不称职”,所以为了自己后续快速查找,也为了方便读者查看,所以整理一个专题。这个专题可能会涉及过百篇文章,在本人工作过程陆续添加。 目前根据个人习惯,我偏向于以“主要现象”来做分类,比如CPU过高,连接失败等。这样在搜索时更加容易,同时从标题来看更加有针对性。但是作者不保证在编写了...
2018-03-02 14:29:47 1598 1
原创 SQL Server 安全篇——降低外围威胁(2)——禁用不安全功能
本文属于SQL Server安全专题系列 SQL Server默认禁用不安全的功能。如果需要启用,可以通过SSMS来实现,本文介绍手动配置外围应用配置器和使用策略管理来管理外围环境。手动配置外围应用配置器 右键实例,选择facts如下图,然后在【方面(F)】中选择“外围应用配置器”:可以看到下面的选项,通常我们会使用到“XPCmdShellEnabled”项,如果要用,则选择【True...
2018-03-01 11:11:07 1157
使用DMV对SQLServer进行性能调优
2013-05-02
SQLServer2008企业级平台管理实践01
2012-05-07
SQLServer2008企业级平台管理实践02
2012-05-07
Microsoft SQL Server 2005技术内幕:T-SQL查询.01
2012-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人