摘要:
这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server。在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题来写这篇文章。缘由当使用SQL Server时,你到底需不需要像WinDbg这样的调试器?简单回答:... 阅读全文
摘要:
今天的文章,我想给你简单介绍下SQL Server里如何随机记录集。1 SELECT * FROM Person.Person2 ORDER BY NEWID()3 GO这会引入新的UNIQUEIDENTIFIER数据类型列,SQL Server会在那列上进行物理排序操作。但是在记录集里列本身没有返... 阅读全文
摘要:
在今天的文章里我想谈下基数计算里的一个特定问题:在查询谓语里相关列的基数计算。首先我们看下在SQL Server 7.0起的操作方法,最后我们详细看下SQL Server 2014里,在查询期间,处理相关列基数计算的全新实现方式。什么是相关列(Correlated Columns)在我们进入问题细节... 阅读全文
摘要:
如何选择聚集键值的最佳实践是什么?一个好的聚集键值应该有下列属性:范围小的(Narrow)静态的(Static)自增长的(Ever Increasing)我们来具体看下所有这3个属性,还有在SQL Server里为什么自增长值实际上是不会扩展的。范围小的(Narrow)聚集键值应该i越小越好。为什么... 阅读全文
摘要:
在今天的文章里我想谈下SQL Server里与索引相关的特殊性能问题。问题描述假设下列的简单查询,在你的日常SQL Server里,这样的查询你已经看到过几百遍了:1 -- Results in an Index Scan2 SELECT * FROM Sales.SalesOrderHeader3... 阅读全文
摘要:
在今天的文章里,我想专门详细谈下SQL Server 2014引入的可更新聚集列存储索引(Updateable Clustered ColumnStore Index)。在我们进入细节讨论前,我想先给你简单介绍下它在SQL Server 2012里出现时的情况,还有它们的局限性。SQL Server... 阅读全文
摘要:
传统的关系数据库服务引擎往往并不是对超大量数据进行分析计算的最佳平台,为此,SQLServer中开发了分析服务引擎去对大笔数据进行分析计算。当然,对于数据的存放平台SQLServer数据库引擎而言,也是需要强大的数据处理能力的。在SQLServer 2012时,SQL Server 引入了列存储索引... 阅读全文
摘要:
在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!!缓存池扩展(Buffer Pool Extensions)缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如SSD硬盘,用来扩展缓存池。缓存池扩展来得非常方便,如果你不能给你的数据库服务器物理上增加更多的内存,可以... 阅读全文
摘要:
在本文中,我们将来看看SQL Server 2014在资源调控器方面增加了哪些新的功能。资源调控器(Resource Governor)是从SQL Server 2008开始出现的一项功能。它是用于管理 SQL Server 工作负荷和系统资源使用情况的功能。 在SQL Server 2014之前,... 阅读全文
摘要:
对于SQL Server数据库来说,性能一直是一个绕不开的话题。而当我们去分析和研究性能问题时,执行计划又是一个我们一直关注的重点之一。我们知道,在进行编译时,SQL Server会根据当前的数据库里的统计信息,在一定的时间内,结合本机资源,挑选一个当前最佳的执行计划去执行该语句。那么数据库分析引擎... 阅读全文
摘要:
SQL Server 2014缓存池扩展 (Buffer Pool Extension)功能可以将缓存池扩展到较快的SSD存储上。为内存比较紧张的系统提供了新的扩展途径。Buffer Pool 扩展可以带来以下好处:提高随机I/O的吞吐量降低I/O延迟提高单位时间内处理事务的吞吐量显著地提高读性能以... 阅读全文
摘要:
大家好,欢迎回到性能调优培训。上个星期我们讨论在SQL Server里基数计算过程里的一些问题。今天我们继续详细谈下,SQL Server 2014里引入的新基数计算。新基数计算SQL Server 2014里一个增强是新的基数计算。上个星期你已经学到老基数计算有些限制,会生成错误的估计,这会导致不... 阅读全文
摘要:
在今天的文章里我想谈下SQL Server 2014里引入的缓存池扩展(Buffer Pool Extensions)。我们都知道,在SQL Server里,缓存池是主要的内存消耗者。当你从你存储里读取数据时,数据会在缓存池里缓存。SQL Server在计划缓存里缓存执行计划,也是缓存池的一部分。你... 阅读全文
摘要:
在今天的文章里,我想谈下SQL Server里锁升级(Lock Escalations)。锁升级是SQL Server使用的优化技术,用来控制在SQL Server锁管理里把持锁的数量。我们首先用SQL Server里所谓的锁层级(Lock Hierarchy)开始,因为那是在像SQL Server... 阅读全文
摘要:
今天我想谈下SQL Server里的一个特别话题——即时文件初始化(Instant File Initialization)。对于你的SQL Server实例,如果你启用了即时文件初始化,在特定情况下,你会获得巨大的性能提升。即时文件初始化定义了当在数据文件里分配新的空间时,SQL Server引擎... 阅读全文
摘要:
在今天的文章里,我想给你快速展示下当我们从表里删除记录时,在SQL Server里发生了什么。首先我们来创建一个简单的表,在8KB的页上刚好能插入4条记录。1 -- Create a simple table where 4 records fit onto 1 page2 CREATE TABLE... 阅读全文
摘要:
在今天的文章里我想谈下SQL Server里现存的各种事务隔离级别的神话和误解。主要我会谈谈下列话题:什么是事务隔离级别(Transaction Isolation Levels)?NOLOCK从不阻塞!?提交读(Read Committed)不会持锁!?Key Range Locks只针对可串行化... 阅读全文
摘要:
在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入,但提供的功能还是有所限制:你只能限制CPU时间(这个已经很棒了),还有你能限制查询(从每个独立的查... 阅读全文
摘要:
大家好,欢迎回到性能调优培训。在上2个星期,你已经学过了统计信息,它们为什么重要,还有在SQL Server里它们是什么样的。在这期性能调优培训里我想谈下当前基数预估含有的局限性,还有如何应用不同新技术来克服这些局限。基数预估错误上个星期你就看到,当执行计划被编译时,SQL Server使用直方图和... 阅读全文
摘要:
在这篇文章里,我想详细谈下为什么你要避免事务日志(Transaction Log)上的自动增长操作(Auto Growth operations)。很多运行的数据库服务器,对于事务日志,用的都是默认的日志文件大小和自动增长设置。人们有时会很依赖自动增长机制,因为它们刚好能正常工作。当然,如果它正常工... 阅读全文
摘要:
在今天的文章里,我想谈下在线索引重建操作(Online Index Rebuild operations),它们在SQL Server 2014里有怎样的提升。我们都知道,自SQL Server 2005开始引入了在线索引重建操作。但这些在线操作并非真正的在线操作,因为在操作开始时,SQL Serv... 阅读全文
摘要:
最近这段时间,我花了很多时间来更好的理解Hekaton——SQL Sever 2014里的全新内存表技术。我看了很多文章,了解了Haktaon的各种内部数据存储结构(主要是哈希索引和Bw-tree)。另外我也看了不少关于这方面的讲座。但不止一次,有很多的误报,神话和误解出现,人们对Hektaton的... 阅读全文
摘要:
这个周末我发现了SQL Server 2014里Hekaton的一个有趣副作用,很遗憾它会负面影响你数据库的目标恢复时间(Recovery Time Objective,RTO)。你已知道,对于每个本地编译表和存储过程,Hekaton都会创建一个DLL,这些都是以C语言代码实现的。这些DLL文件载入... 阅读全文
摘要:
今天我使用2048的桶数的哈希索引,往Hakaton里插入100万的记录,测试下在哈希桶数里,哈希冲突(Hash Collision)是如何影响Hekaton的工作量——结果非常非常有意思。首先我想介绍下什么是哈希冲突。你可能知道(非常希望),在SQL Server 2014里,Hakaton表是以... 阅读全文
摘要:
基数预估是SQL Server里一颗隐藏的宝石。一般而言,基数预估指的是,在查询编译期间,查询优化器尝试找出在执行计划里从各个运算符平均返回的行数。这个估计用来驱动计划本身生成并选择正确的计划运算符——例如像Nested Loop, Merge Join,还是Hash Join的物理连接。当这些估计... 阅读全文
摘要:
欢迎回到性能调优培训。今天我想详细谈下统计信息在SQL Server内部是如何呈现的。假设有这样的问题:执行计划里的某个运算符的估计行数是42,但你知道对于这个查询,42不是正确的答案。但是你怎么来解读统计信息来理解这个估计是从哪里来的?我们来谈论下直方图(Histogram)和密度向量(Densi... 阅读全文
摘要:
在SQL Server 2014里,微软引入了终极事务处理(Extreme Transaction Processing),即大家熟知的Hekaton。我在网上围观了一些文档,写这篇文章,希望可以让大家更好的理解Hekaton,它的局限性,还有它惊艳的全新内存数据库技术。这篇文章会通过下面几个方面来... 阅读全文
摘要:
在一些先决条件下,SQL Server可以缓存临时表(cache Temp Tables)。缓存临时表意味着当你创建反复创建同个临时表时,SQL Server就可以重用它们。这会从整体上大幅度提高你的工作量(性能),因为SQL Server不需要访问内存里的特定页(PFS,GAM,SGAM),经常访... 阅读全文
摘要:
从Paul White的推特上看到,在SQL Server 2014里,对于表变量(Table Variables),它是支持非唯一聚集索引(Non-Unique Clustered Indexes)和非聚集索引(Non-Clustered Indexes)的。看到这个,我决定在自己的虚拟机里尝试下... 阅读全文
摘要:
在这篇文章里,我想给出如何与终极事务处理(Extreme Transaction Processing (XTP))的第一次接触,即大家熟知的Hakaton。如果你想对XTP有个很好的概况认识,我推荐Kalen Delaney写的关于它的白皮书,中文版本点此下载,另外微软研究院也发布了题为“对于内存... 阅读全文