SQL Server DBA
文章平均质量分 94
专注SQL SERVER DBA
發糞塗牆
MVP, TOGAF, MCSE, Azure Solution Architect
展开
-
SQL Server On Linux(25)——SQL on Linux 备份和还原(2)——还原
本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》接上文 SQL Server On Linux(24)——SQL on Linux 备份和还原(1)——备份, 本文演示“备份”的配套工作——还原。 还原操作在两个平台上都类似,可以使用SQL命令或者SSMS图形界面操作,比较常见的差异在于你需要还原的数据库来自于别的地方(如别的服务器或...原创 2020-03-07 17:39:41 · 725 阅读 · 0 评论 -
SQL Server On Linux(22)—— SQL Server On Linux性能(8)——性能进阶简介——分区(2)
本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》本篇开始专门对性能进行一系列讲解,这一系列不限于Linux平台,更多的是针对SQL Server本身。上一文简单介绍了一下分区的大概情况,本文把分区功能拆散细讲。分区函数说明 首先了解一下分区函数,分区函数是分区过程的第一步(当然调研才是实际第一步),它用于指定整个分区的逻辑层内容,...原创 2020-02-20 17:52:12 · 444 阅读 · 0 评论 -
T-SQL执行内幕(11)——Read Ahead
本文属于SQL Server T-SQL执行内幕系列 每当操作读取页的数据,意味着这些数据需要固定到缓存(buffer pool)中。这个时候可能会导致操作被阻塞,因为当所需要的数据不在内存时,需要把数据从磁盘载入内存,这个时候操作需要等待页从磁盘搜索并载入内存。如果由于系统负担很重或者载入的量很大,磁盘I/O响应不及时,那么此时操作就会被阻塞(stall),性能将会暴跌。 从现实生...原创 2018-03-31 15:52:53 · 1625 阅读 · 1 评论 -
T-SQL执行内幕(10)——读取数据
本文属于SQL Server T-SQL执行内幕系列 关系型数据库的数据访问操作总是从内存的缓存中读取数据而不是从磁盘中读取。这个缓存称为Buffer Pool。如果数据访问操作符未能在缓存中找到所需的数据,那么就需要从磁盘中加载,这就会产生一个磁盘I/O读(set statistics io on中的物理读),并且需要等待这个物理读完成(及从磁盘找到数据并加载到缓存为止)之后,才能进行操作...原创 2018-03-31 15:39:06 · 1102 阅读 · 0 评论 -
T-SQL执行内幕(9)——数据访问
本文属于SQL Server T-SQL执行内幕系列 在执行树的叶子端(通常就是图形化执行计划每个分支的最右端),一般是实际访问数据的操作符。当调用这些操作符上的next()方法时,会返回表或者索引上的实际数据。数据访问通常有三类可能的操作符:Scan: 各类扫描,扫描操作会在数据上循环访问所有的行。它永远不会定位一个特定的行,取而代之的是扫描整个数据集。在执行计划中常见的扫描操作符有...原创 2018-03-31 15:14:04 · 912 阅读 · 0 评论 -
T-SQL执行内幕(8)——数据存储
本文属于SQL Server T-SQL执行内幕系列 前面提到了数据访问,那么如何访问?访问什么?为此必须介绍一下数据存储的概念。SQL Server以三种方式存储和组织数据:均可从sys.partitions中查到Heaps:堆,指没有聚集索引(注意主键并非一定是聚集索引)的表。另外诸如select …into … from …语句生成的表也是堆表。SQL Server堆结构 在sy...原创 2018-03-31 11:16:37 · 950 阅读 · 0 评论 -
T-SQL执行内幕(7)——内存授予
本文属于SQL Server T-SQL执行内幕系列 前面提到,在执行过程中,很多操作符都需要内存来支持运作。比如Sort操作符,需要存储所有的输入以便进行排序,而Hash操作,为了创建大型的hash表,也需要申请资源来存储数据。 基于操作符的类型和预估的影响行数及列的大小(这些都可以从统计信息获得),执行计划可以知道这些操作符需要的大概内存。整个执行计划所需的内存总和称为内存授予(M...原创 2018-03-30 15:31:50 · 1010 阅读 · 0 评论 -
T-SQL执行内幕(6)——返回结果
本文属于SQL Server T-SQL执行内幕系列 在执行引擎按照执行计划的要求把数据成功检索之后,就需要把数据返回给客户端。这里的结果不是单纯的数据库引擎完成查询数据之后的结果,而是客户端(如SSMS)接收到数据的结果。一旦数据已经“填满”执行树的各个操作符,那么最顶端的根操作符就会负责把数据写入网络缓存(network buffer)并把这些数据发送给客户端。 结果集并不是直接...原创 2018-03-28 15:54:10 · 1034 阅读 · 0 评论 -
T-SQL执行内幕(5)——执行
本文属于SQL Server T-SQL执行内幕系列 一旦优化器选择了开销最低的预估执行计划之后,就会把预估执行计划转换成实际执行树(Actual Execution Tree)进行查询执行。树的每个节点都是一个操作符。操作符及一系列的有向箭头(代表数据流的方向及结果集的数据量(箭头粗细)) 组成了整个执行计划,这里指的是图形化执行计划。 所有的操作符都实现一个具有三个方法(open...原创 2018-03-28 15:19:38 · 1114 阅读 · 0 评论 -
T-SQL执行内幕(4)——优化
本文属于SQL Server T-SQL执行内幕系列 接上文,当解析和编译完成后,请求的生命周期就进入下一步——优化(Optimisation)。在SQL语言中,优化的本质就是找最好的路线。意思是在多种可能的候选数据访问方式中选择最佳一个。比如两表关联的简单查询语句,每个表有1个索引,那么就有4种可能的数据访问方式(AB两表的索引扫描、AB两表的索引查找,A扫描B查找、A查找B扫描)。随着表...原创 2018-03-28 14:30:48 · 1370 阅读 · 0 评论 -
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 · 1304 阅读 · 0 评论 -
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 · 2633 阅读 · 0 评论 -
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 · 1290 阅读 · 0 评论 -
什么东西导致了执行计划的严重错误——需要更新统计信息吗?
原文出处:What caused that plan to go horribly wrong – should you update statistics? 由于本人确实遇到过这类问题,但是基于水平和经历,不打算重复造轮子,所以把大牛的文章翻译一下以供大家参考。以下是译文:过去几年里,我(作者)遇到这类情景: 有一个存储过程在大部分时间里面都运行得很好,但是突然就不行了。其性...翻译 2018-03-12 11:08:23 · 1617 阅读 · 0 评论 -
管理SQL Server AlwaysOn(5)——常规监控(1)——常规监控
本文属于管理SQL Server AlwaysOn 系列文章前言: 前面几节提到了如何对AlwaysOn做常规管理,这一节和接下来的一节专门对“监控”进行解释和演示。管理和监控这两个词在很多时候是混淆的,但是我们大概也可以区分出来,比如我做备份原创 2017-03-14 16:31:31 · 9979 阅读 · 11 评论 -
管理SQL Server AlwaysOn(1)——基础维护
本文属于管理SQL Server AlwaysOn 系列文章 前言: 前面系列已经介绍了SQL Server AlwaysOn的知识点、安装演示及注意事项等。但是这并不是终点,更多的反而是起点。就像不能生了孩子就不管,你还得养(管理)。作为DBA,更原创 2017-03-06 22:43:20 · 9610 阅读 · 3 评论 -
从0开始部署基础的AlwaysOn
在这个快餐文化盛行的时代,应该没多少人真的会沉下心来看理论和具体步骤,加上我自己也需要一篇可以扩展的快速搭建环境的指引,所以特别写了这篇文章。 我们在这里要做的事情有以下几个:安装环境。包括虚拟机和网络配置等。安装Windows域、配置必要的账号密码及功能。搭建域环境并进行配置。安装配置Windows Server Failover Cluster(WSFC)。安装SQL Server。配置Alw原创 2017-02-14 10:22:21 · 7071 阅读 · 4 评论 -
基于SQL Alwayson的Windows Server 2012 WSFC搭建指南(1)——简介及AD搭建和配置
本文属于 基于SQL Alwayson的Windows Server 2012 WSFC搭建指南 系列文章前言: 作为SQL Server DBA,在搭建SQL Server AlwaysOn(从SQL 2012引入)时,需要涉及Windows Server Failover Cluster的知识。在过去,本人任职的公司有专门的系统管理员负责提供基础环境,但是到了今时今日,即使有这样的环境,为了提原创 2017-02-13 09:03:08 · 6062 阅读 · 0 评论 -
基于SQL Alwayson的Windows Server 2012 WSFC搭建指南(2)——Windows 2012 Cluster搭建
本文属于 基于SQL Alwayson的Windows Server 2012 WSFC搭建指南 系列文章前言: 上一节介绍了AD的配置,对于SQL Server AlwaysOn而言,首先我们要有一个WSFC(Windows Server Failover Cluster),而WSFC首先又需要有一个Windows 域,所以AD的配置是前提条件。在配置完AD之后,我们就可以搭建WSFC。 但是搭原创 2017-02-13 09:12:19 · 7133 阅读 · 0 评论 -
SQL Server AlwaysON从入门到进阶(4)——分析和部署Windows Server Failover Cluster
本文属于SQL Server AlwaysON从入门到进阶系列文章翻译 2017-02-13 09:00:48 · 12254 阅读 · 0 评论 -
SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group
本文属于SQL Server AlwaysON从入门到进阶系列文章前言: 本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQL Server实例和基于群集的SQL Server FCI的区别。上一节已经介绍了如何安装SQL Server Failover Cluster Instance(FCI)及其要求。 本节会深入AlwaysOn 可用组的内容,以演示翻译 2017-02-13 09:14:03 · 12868 阅读 · 3 评论 -
SQL Server AlwaysON从入门到进阶(3)——基础架构
本文属于SQL Server AlwaysON从入门到进阶系列文章翻译 2017-01-13 10:14:10 · 9057 阅读 · 1 评论 -
SQL Server 虚拟化(1)——虚拟化简介
本文属于SQL Server虚拟化系列前言: 现代系统中,虚拟化越来越普遍,如果缺乏对虚拟化工作原理的理解,那么DBA在解决性能问题比如降低资源争用、提高备份还原速度等操作时就会出现盲点。所以基于本人工作环境的情况和大时代的趋势,同时根据个人经验,绝大部分的IT人员都对虚拟化持有怀疑或者保留意见的态度。所以这里开始一个系列文章,介绍SQL Server虚拟化的内容,内容来自 Stairway to翻译 2016-12-23 17:46:46 · 19086 阅读 · 2 评论 -
SQL Server 虚拟化(2)——理想的SQL Server虚拟机架构
搭建SQL Server虚拟机,在各个组织之间都有自己的标准和最佳实践。从第一眼看去,光物理配置就有过百种,所有的这些细微差别都有可能为后续日常管理过程中故障侦测带来麻烦。如果创建一个合适的虚拟机模版,并用于后续新虚拟机的创建和部署,那么可以把很多部署问题最小化。 在本文中,会讨论“为什么”要针对当前SQL Server负载创建理想化的SQL Server虚拟机。下一章会演示对于目前主流的VMWa翻译 2016-12-30 11:57:27 · 5440 阅读 · 3 评论 -
SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?
本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章。根据工作需要在学习过程中顺带翻译以供参考。系列文章包含:SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?SQL Server AlwaysON从入门到进阶(2)——存储SQL Server AlwaysON从入门到进阶(3)——基础架构翻译 2017-01-06 16:37:11 · 45318 阅读 · 1 评论 -
SQL Server AlwaysON从入门到进阶(2)——存储
本文属于SQL Server AlwaysON从入门到进阶系列文章http://www.sqlservercentral.com/articles/always+on/107537/翻译 2017-01-10 10:57:34 · 9575 阅读 · 3 评论 -
SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列http://www.sqlservercentral.com/articles/Stairway+Series/145063/翻译 2016-12-20 11:52:04 · 6844 阅读 · 2 评论 -
SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 第一篇文章中提到了如何在Profiler中创建跟踪(trace),并以服务器端(server-side)跟踪方式运行以便在服务器上创建实际跟踪文件。接着把跟踪定义转换到扩展事件的CREATE EVENT SESSION脚本中。 上一篇文章可以成为你从SQL Trace通往扩展事件(Extented Eve翻译 2016-12-08 09:18:06 · 9563 阅读 · 0 评论 -
SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我决定先翻译这系列文章,后续在工作中的心得作为原创添加。原文地址:Stairway to SQL Server Extended Events翻译 2016-12-06 15:21:50 · 8424 阅读 · 1 评论 -
SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event
本文属于 SQL Server扩展事件(Extended Events)从入门到进阶 系列 对于接纳扩展事件,其中一个最大的障碍就是要对XML和XQuery有一定的了解以便分析数据。我们可以使用T-SQL来完成创建和运行会话,但是不管会话的存在目的是什么,数据都被编译成XML。但是从SQL 2012开始就去除了这种限制。我们通过上一文中介绍的,可以用GUI对扩展事件进行创建和管理,同样,在本文中,翻译 2016-12-13 23:29:55 · 7619 阅读 · 1 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列接上文:理解性能的奥秘——应用程序中慢,SSMS中快(5)——案例:如何应对参数嗅探翻译 2016-11-30 16:41:36 · 6471 阅读 · 1 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(5)——案例:如何应对参数嗅探
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息翻译 2016-11-28 15:42:31 · 6868 阅读 · 0 评论 -
全废话SQL Server统计信息(2)——统计信息基础
我想在大地上画满窗子,让所有习惯黑暗的眼睛习惯光明——顾城《我是一个任性的孩子》 这一节主要介绍一些理论层面的东西,主要针对SQL Server,为后面的做铺垫,如果从实操层面考虑可以跳过,但是我强烈建议还是要找时间看一下这节。本节的内容如下:SQL Server统计信息列级统计信息统计信息与执行计划统计信息与内存分配开销预估模型SQL Server统计信息 说到统计信息,就一定要提到查询优化器,原创 2016-11-01 23:18:49 · 11515 阅读 · 8 评论 -
全废话SQL Server统计信息(1)——统计信息简介
为什么要写这个内容? 随着工作经历的积累,越来越感觉到,大量的关系型数据库的性能问题,其根源在于统计信息。这里说的是根源,其实很多时候大家觉得的那些什么索引失效等都只是表象。当然,不能一概而论,还有很多问题如配置问题、设计问题等等,甚至电源也会影响性能。 之所以得出这个结论,因为在常规的开发和部署过程中,一般企业级系统已经大量使用较为高级的磁盘阵列甚至企业级SSD,IO方面的问题已经很少,而且关系原创 2016-11-01 23:17:19 · 6835 阅读 · 0 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(3)——不总是参数嗅探的错翻译 2016-11-22 11:50:01 · 5430 阅读 · 1 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(3)——不总是参数嗅探的错
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程 在我们开始深入研究如何处理参数嗅探相关的性能问题之前,由于这个课题过于广泛,所以首先先介绍一些跟参数嗅探没有直接关系的内容,但是又会导致语句在SSMS和应用程序中存在性能差异的情况。替换变量和参数: 前面已经接触过,但是在这里对其进行扩...翻译 2016-11-17 10:49:30 · 4870 阅读 · 1 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(1)——简介 本文介绍SQL Server如何编译存储过程并使用计划缓存。如果你的应用程序完全没有用到存储过程,而是直接使用SQL语句提交请求,那么本文大部分内容也是有效的。但是关于动态SQL的编译会在后面章节介绍,这里重点关注让人头痛的存储过程问题。什么是存储过程? 虽然这个问题有...翻译 2016-11-15 10:38:44 · 6868 阅读 · 0 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(1)——简介
在工作中发现有不少类似的现象,有幸看到国外大牛写的一篇文章,由于已经完善得不能再添油加醋,所以决定直接翻译,原文出处:http://www.sommarskog.se/query-plan-mysteries.html#defaultsettings 本人水平有限,如果读者觉得自己英语过得去,建议阅读原文。在翻译过程中,不排除会对某些部分进行修改,但不会影响最终效果。 由于内容较多,所以把文章拆翻译 2016-11-14 23:24:30 · 4487 阅读 · 0 评论 -
SQL Server 执行计划操作符详解(3)——计算标量(Compute Scalar)
接上文:SQL Server 执行计划操作符详解(2)——串联(Concatenation )原创 2016-01-06 17:27:42 · 7004 阅读 · 2 评论 -
SQL Server性能优化——等待——SLEEP_BPROOL_FLUSH
前言: 有一个用于历史归档的数据库(简称历史库),经过一定时间的积累,数据文件已经达到700多GB,后来决定某些数据可以不需要保留,就把这部分数据truncate了,空余出600多GB的空间,也就是说,经过收缩后,理论上数据库只有100多G。为此,我经过重建各个表(表数量不多,但单表数量还是有几千万)的聚集索引后,准备进行收缩。 但是当收缩开始时,即使把每次收缩的范围缩小到500MB,速度也极其慢原创 2016-01-04 14:07:28 · 6157 阅读 · 2 评论