摘要: 从去年4月到现在的开博以来,我写了不少关于MS SQL的文章,感觉自己对MS SQL越来越了解,今天下午在一个SQL Server的技术群文档看到了一个文档,是黄钊吉上传的,我对他的印象,总觉得他是MS SQL的大牛,不管是从他的博客,还是出版的《 数据库技术丛书:SQL Server性能优化与管理 阅读全文
posted @ 2016-03-17 08:01 Woodytu 阅读(5211) 评论(31) 推荐(23) 编辑
摘要: 在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!!缓存池扩展(Buffer Pool Extensions)缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如SSD硬盘,用来扩展缓存池。缓存池扩展来得非常方便,如果你不能给你的数据库服务器物理上增加更多的内存,可以... 阅读全文
posted @ 2015-07-16 10:34 Woodytu 阅读(3586) 评论(0) 推荐(1) 编辑
摘要: 在帮助优化器选择正确的执行计划,统计信息是一个重要因素。因此,我们在处理性能问题时,要足够重视统计信息。可能是对统计信息知识及其相关机制的缺乏,忽略统计信息往往是造成性能问题的根源。查询优化器在每一步使用统计信息判断返回的行数。在执行计划里的预估行数信息是基于列上的可用统计信息计算而来的。统计信息会... 阅读全文
posted @ 2015-05-22 15:18 Woodytu 阅读(1253) 评论(0) 推荐(3) 编辑
摘要: 本篇是“索引深入浅出”的开篇,也是这个系列文章的聚集索引页,下面文章标题排列顺序将和对应文章发布顺序一致:索引简介:索引概述,通过现实生活实例理解聚集索引、非聚集索引还有键查找(Key Look up)。索引深入浅出(1/10):索引简介。堆表:没有聚集索引的表叫堆表。在堆表中的数据存储没有任何顺序... 阅读全文
posted @ 2015-05-12 09:56 Woodytu 阅读(2482) 评论(1) 推荐(6) 编辑
摘要: 我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行。也就是说,SQL Server 读取或写入所有数据页。页有不同的类型,像数据页,GAM,SGAM等。在这文章里,让我们一起来理解下数据页结构。SQL Server把数据记录存在数据页(... 阅读全文
posted @ 2015-05-07 14:03 Woodytu 阅读(12084) 评论(16) 推荐(17) 编辑
摘要: 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录。 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于是我通过网络找了各种MS SQL技术的相关文档,总觉得讲得比较干涩,没有一个系统性,今年3月底我无意... 阅读全文
posted @ 2015-04-29 10:42 Woodytu 阅读(8161) 评论(13) 推荐(37) 编辑
摘要: 在我查询调优期间,STATISTICS IO会话选项是我的朋友,因为对于指定的查询,它准确告诉你有多少页已读取。每次,SQL Server从缓存池骑牛一个8K的页,它通过STATISTICS IO的输出获得记录。 通常我会建议启用STATISTICS IO来更好的理解在给定的查询里,涉及的表上有多少 阅读全文
posted @ 2017-08-26 15:02 Woodytu 阅读(1488) 评论(2) 推荐(1) 编辑
摘要: 今天我想进一步谈下SQL Server里的计划缓存和它的副作用。我们都知道,每个提交到SQL Server的逻辑查询,会编译为物理执行计划。这个执行计划然后会缓存为所谓的计划缓存,用于后期重用。现在我们首先来谈下即席SQL语句和它的负作用,还有它们带来的性能问题。 即席SQL语句(Adhoc SQL 阅读全文
posted @ 2017-04-01 11:09 Woodytu 阅读(1344) 评论(1) 推荐(2) 编辑
摘要: 在我的博客上,以前我经常谈到SQL Serverl里的书签查找,还有它们带来的很多问题。在今天的文章里,我想从性能角度进一步谈下书签查找,还有它们如何拉低你整个SQL Server性能。 书签查找——反复循环 如果你的非聚集索引不是个覆盖非聚集索引,SQL Server的查询优化器会引入书签查找。对 阅读全文
posted @ 2017-03-20 19:18 Woodytu 阅读(1383) 评论(1) 推荐(4) 编辑
摘要: 在今天的文章里,我想谈下SQL Server里如何处理死锁。当2个查询彼此等待时会发生死锁,没有一个查询可以继续它们的操作。首先我想给你大致讲下SQL Server如何处理死锁。最后我会展示下SQL Sever里特定的死锁类型,还有你如何避免和解决它们。 死锁处理 死锁的好处是SQL Server自 阅读全文
posted @ 2017-02-24 14:30 Woodytu 阅读(5769) 评论(0) 推荐(5) 编辑
摘要: 列存储索引是好的!对于数据仓库和报表工作量,它们是真正的性能加速器。与聚集列存储结合,你会在常规行存储索引(聚集索引,非聚集索引)上获得巨大的压缩好处。而且创建聚集列存储索引非常简单: 但这是你对聚集列存储需要知道的一切?并不是,如你在这篇文章会看到的…… 什么是列存储段(ColumnStore S 阅读全文
posted @ 2017-02-08 14:32 Woodytu 阅读(1141) 评论(0) 推荐(2) 编辑
摘要: 我喜欢写死锁这个话题,因为在你写代码的时候,如果不考虑仔细,会有太多不同的方法和情况造成死锁。在今天的文章里,我想向你展示下,从同个表,用不同的顺序来读写记录时,会发生死锁的情况。 读/写死锁 下列代码展示了简单的表定义,这里我也插入2条记录。 现在假设下列情况:你有2个查询,用来读写访问记录,但你 阅读全文
posted @ 2016-12-20 14:30 Woodytu 阅读(1460) 评论(0) 推荐(5) 编辑
摘要: 我们知道,几个星期前,微软发布了在Linux上直接运行的SQL Server第一个公开CTP版本!因此,对我来说,是时候跨界在Linux上安装我的第一个SQL安装,这样的话,我就可以在Linux上折腾SQL Server。在这篇文章里,我想给你概括讲下在Linux上,SQL Server的起步是怎样 阅读全文
posted @ 2016-11-29 10:26 Woodytu 阅读(4997) 评论(4) 推荐(12) 编辑
摘要: 上周微软发布了SQL Server的历史性公告:SQL Server 标准版的SP1提供你和企业版一样得功能。你不信的话?可以点击这里。 这改变了整个关系数据库市场,重重打击了Oracle。在今天的文章里我想具体谈下这个令人激动的发布——标准版和企业版之间还是有区别的,在某些情况下还是需要企业版。 阅读全文
posted @ 2016-11-24 10:25 Woodytu 阅读(15978) 评论(3) 推荐(3) 编辑
摘要: 几个星期前一个网友问我,设置数据库恢复模式为简单是否是个好的做法,还有这个做法有什么缺点? 我不能特别强调,但对于OLTP工作负荷(典型读写操作)的数据库,使用简单恢复模式真的不是好主意。而且设置数据库模式为简单真的……(自己想象省略号是啥)。但我不想在这篇文章里说明这个事实,我只想向你展示下,在O 阅读全文
posted @ 2016-11-22 12:29 Woodytu 阅读(2164) 评论(0) 推荐(0) 编辑
摘要: 今天我想谈下SQL Server里另一个非常有趣的话题:在SQL Server里停用行和页层级锁。在SQL Server里,每次你重建一个索引,你可以使用ALLOW_ROW_LOCKS 和ALLOW_PAGE_LOCKS选项来指定,SQLServer在用读写访问你的数据时,应该获得行和页锁。我们从内 阅读全文
posted @ 2016-11-08 20:20 Woodytu 阅读(5102) 评论(0) 推荐(2) 编辑
摘要: 几年前,我写了篇关于闩锁和为什么SQL Server需要它们的文章。在今天的文章里,我想进一步谈下非缓存区闩锁(Non-Buffer Latches),还有在索引查找操作期间,SQL Server如何使用它们。在这里你会学到称为闩锁耦合(Latch Coupling)的概念。 索引查找操作(Inde 阅读全文
posted @ 2016-11-02 16:28 Woodytu 阅读(1230) 评论(0) 推荐(6) 编辑
摘要: 在SQL Server交流会,经常被问到的一个问题,SQL Server在几个NUMA节点上运行。因此,在今天的文章里,我想向你展示下几个方法和技术,找出你的SQL Server有几个NUMA节点。 需进一步了解NUMA,我推荐你看下NUMA Deep Dive Series from Frank 阅读全文
posted @ 2016-10-25 10:59 Woodytu 阅读(7156) 评论(0) 推荐(3) 编辑
摘要: 平常我不知道被问了几次这样的问题:“SQL Server里在文件组间如何移动数据?“你意识到这个问题:你只有一个主文件组的默认配置,后来围观了“SQL Server里的文件和文件组”后,你知道,有多个文件的自定义文件组会是个更好的主意。但你现在如何从主文件组里移动现有数据到新加的文件组? 这篇文章的 阅读全文
posted @ 2016-09-27 10:42 Woodytu 阅读(1601) 评论(1) 推荐(3) 编辑
摘要: 经常被问到的一个问题:对于SQL Server,我需要多少内存?这个问题还是有同样的典型的“看情况而定”答案。在今天的文章里,我们来详细看下“看情况而定的”的不同方面。 全新SQL Server安装 首先,对于全新的SQL Server安装,我想谈下你如何估计你需要的内存大小。然后我会详细谈下你如何 阅读全文
posted @ 2016-09-20 14:20 Woodytu 阅读(9128) 评论(1) 推荐(5) 编辑
摘要: 在今天的文章里,我想谈下SQL Server里非常重要的话题:SQL Server如何处理文件的文件组。当你用CREATE DATABASE命令创建一个简单的数据库时,SQL Server为你创建2个文件: 一个数据文件(.mdf) 一个事务日志文件(.ldf) 数据文件本身在有且只有一个主文件组里 阅读全文
posted @ 2016-08-30 19:23 Woodytu 阅读(9869) 评论(1) 推荐(4) 编辑
摘要: 在实际工作中,我经常看到——有时人们定期重启SQL Server!我们都希望接受,SQL Server的定期重启并不真的是一个好主意。但在今天的文章里,我想进一步讨论下,当你定期重启你的SQL Server时,有哪些副作用。 缓冲池(Buffer Pool) 一旦你重启你的SQL Server,你会 阅读全文
posted @ 2016-08-09 16:06 Woodytu 阅读(2076) 评论(1) 推荐(1) 编辑
摘要: 几个星期前,有个网友问我一个非常有趣的问题:RECONFIGURE语句会清空计划缓存么?通常我对这个问题的答案是简单的是,但慢慢的我找出了真正的答案是“看情况啦”。我们来看下它,为什么“它看情况”。 看情况而论…… 通常你会期望RECONFIGURE语句会清空执行计划,但遗憾的是这不是真相。执行计划 阅读全文
posted @ 2016-07-26 15:37 Woodytu 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 我被反复问到的一个问题是,通过各个DMV和DMF返回的数据,SQL Server在哪里存放? 很多人认为这类数据会存放在像mater这样的系统数据库里。但事实并非如此。各个系统数据库(master和msdb)只存储配置数据。那么现在的问题是:DMV或DMF的数据存放在哪里呢? 这个问题的答案非常简单 阅读全文
posted @ 2016-07-19 10:45 Woodytu 阅读(813) 评论(0) 推荐(2) 编辑
摘要: 对于设计和创建数据库完全是个新手?没关系,Joe Celko, 世界上读者数量最多的SQL作者之一,会告诉你这些基础。和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜。Joe是DMBS杂志是多年来最受 读者喜爱的作者。他在美国、英国,北欧,南美及非洲传授SQL知识。他在ANSI / ISO 阅读全文
posted @ 2016-07-11 08:04 Woodytu 阅读(3295) 评论(1) 推荐(3) 编辑
摘要: 对于设计和创建数据库完全是个新手?没关系,Joe Celko, 世界上读者数量最多的SQL作者之一,会告诉你这些基础。和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜。Joe是DMBS杂志是多年来最受 读者喜爱的作者。他在美国、英国,北欧,南美及非洲传授SQL知识。他在ANSI / ISO 阅读全文
posted @ 2016-07-02 11:10 Woodytu 阅读(1388) 评论(0) 推荐(2) 编辑
摘要: 当我谈论索引时,大家经常会问我在复合非聚集索引里,列的顺序是否重要?简单来说:“看情况”。我们来具体看下为啥“看情况”…… 单例查找(Singleton Lookups) 当在你的表上有进行单例查找的查询时,在复合非聚集索引里列的顺序真的不重要。假设下列查询: 现在你可以在StateProvince 阅读全文
posted @ 2016-06-28 16:09 Woodytu 阅读(2452) 评论(3) 推荐(7) 编辑
摘要: 对于设计和创建数据库完全是个新手?没关系,Joe Celko, 世界上读者数量最多的SQL作者之一,会告诉你这些基础。和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜。Joe是DMBS杂志是多年来最受 读者喜爱的作者。他在美国、英国,北欧,南美及非洲传授SQL知识。他在ANSI / ISO 阅读全文
posted @ 2016-06-27 10:44 Woodytu 阅读(2985) 评论(4) 推荐(16) 编辑
摘要: 对于数据获取,如果查询优化器在执行计划里选择了索引,那么SQL Server里的每个索引可以提高你的查询性能。但在另一方面,每个索引也会伤及你的性能,因为在INSERT,UPDATE和DELETE期间,每个索引需要被维护。因此对于你的工作量,尽可能创建少的索引非常重要——不然在写操作期间,你会有巨大 阅读全文
posted @ 2016-06-21 16:18 Woodytu 阅读(1506) 评论(3) 推荐(6) 编辑
摘要: 对于设计和创建数据库完全是个新手?没关系,Joe Celko, 世界上读者数量最多的SQL作者之一,会告诉你这些基础。和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜。Joe是DMBS杂志是多年来最受 读者喜爱的作者。他在美国、英国,北欧,南美及非洲传授SQL知识。他在ANSI / ISO 阅读全文
posted @ 2016-06-20 09:28 Woodytu 阅读(2200) 评论(0) 推荐(8) 编辑
摘要: 对于设计和创建数据库完全是个新手?没关系,Joe Celko, 世界上读者数量最多的SQL作者之一,会告诉你这些基础。和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜。Joe是DMBS杂志是多年来最受 读者喜爱的作者。他在美国、英国,北欧,南美及非洲传授SQL知识。他在ANSI / ISO 阅读全文
posted @ 2016-06-17 15:43 Woodytu 阅读(1724) 评论(0) 推荐(5) 编辑
摘要: 大家可能都听说了,微软在几个星期前宣布发布可以在Linux上完整运行的SQL Server!如果你想看下在Linux上SQL Server如何运行,进行查询是什么样的体验,可以看下下面的视频。 阅读全文
posted @ 2016-06-14 09:28 Woodytu 阅读(794) 评论(0) 推荐(1) 编辑
摘要: 我已经写了好几次内存中OLTP的文章和”为什么我还不推荐内存中OLTP给用户”。今天我想进一步谈下内存中OLTP背后的内存需求,还有如果你内存不够的话会发生什么。 一切都与内存有关! 我们都知道很久之前有个名人说过对于任何人,640K的内存应该足够了。他错了!对于内存中OLTP,内存需求非常高: 哈 阅读全文
posted @ 2016-06-01 10:13 Woodytu 阅读(1290) 评论(2) 推荐(2) 编辑
摘要: 数据库的恢复模型是否影响故障恢复,在简单恢复模式里,你是否会丢失事务?在今天的文章里我想谈下这点,详细讨论下。 恢复模式(Recovery Models) 对于这个问题的最简单的答案是不会:恢复模型不会影响故障恢复,只用简单恢复模式你不会丢失事务。那数据库恢复模型的目的是什么? 你用恢复模型你只告诉 阅读全文
posted @ 2016-05-24 11:03 Woodytu 阅读(3253) 评论(0) 推荐(1) 编辑
摘要: 在1年前,我写了篇在SQL Server里为什么我们需要更新锁。今天我想继续这个讨论,谈下SQL Server里的意向锁,还有为什么需要它们。 SQL Server里的锁层级 当我讨论SQL Server里的锁升级时,我从SQL Server使用的锁层级开始题,在你读或修改你的数据的时候。 当你读取 阅读全文
posted @ 2016-05-17 09:57 Woodytu 阅读(3068) 评论(1) 推荐(5) 编辑
摘要: 前段时间,我写了一些SQL Server里锁升级的基础知识,还有它是如何影响执行计划的。今天,我想进一步谈下锁升级: 锁升级什么时候发生? 通常在SQL Server里如果在SQL语句里你请求的行数超过5000(SELECT,INSERT,UPDATE,DELETE)会发生锁升级。例如当你再可重复读 阅读全文
posted @ 2016-05-13 11:35 Woodytu 阅读(2109) 评论(0) 推荐(2) 编辑