SQLServer2012cookbook
文章平均质量分 92
發糞塗牆
MVP, TOGAF, MCSE, Azure Solution Architect
展开
-
第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能
本文继续介绍使用DMO来监控,这次讲述的是监控索引性能。索引是提高查询性能的关键性手段。即使你的表上有合适的索引,你也要时时刻刻进行索引维护任务。 SQLServer有专门的DMO来显示索引相关统计信息。能帮助你分析现有索引的性能情况。通过这些DMO,可以做到:Ø 检查索引使用模式Ø 查找丢失索引Ø 查找无用索引Ø 查找索引碎片Ø 分析索引页分配明细本文将翻译 2013-03-04 17:17:36 · 5489 阅读 · 0 评论 -
第十三章——表和索引分区(2)——使用拆分删除和加载大数据
前言: 很多时候需要对大数据量进行归档或者删除,并周期性加载大数据量到一个大表中,现在来做个简单的例子,你经常需要删除大数据量表中的大量数据。同时,你想加载大量数据到这个表中,当表中数据有数十亿时,这个操作可能消耗几个小时,但是如果你的表有分区,那么执行起来会很有效。本文将模拟删除一个季度的数据,并加载整个季度到现有表,其中使用了拆分(splitting)、合并(merging)和切翻译 2013-04-03 23:37:01 · 5447 阅读 · 0 评论 -
第十二章——SQLServer统计信息(2)——非索引键上统计信息的影响
前言: 索引对性能方面总是扮演着一个重要的角色,实际上,查询优化器首先检查谓词上的统计信息,然后才决定用什么索引。一般情况下,默认会在创建索引时,索引列上均创建统计信息。但是不代表在非索引键上的统计信息对性能没有用。 如果表上的所有列都有索引,那么将会是数据库负担不起,同时也不是一个好想法,包括谓词中用到的所有列加索引同样也不是好方法。因为索引会带来负载。因为需要空间存翻译 2013-03-21 17:36:51 · 5151 阅读 · 0 评论 -
第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要返回的数据。 在创建列的统计信息后,在DML操作如insert、update、delete后,统计信息就会过时。因为这些操作更改了数据,影响了数据分布。此时需要更新统计信息。 在高活动的表中,统计信息可能几个小时就会过时。对于静态表,可翻译 2013-03-21 17:38:43 · 6129 阅读 · 0 评论 -
第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息
前言: 从2008开始,引入了一个增强非聚集索引的新功能——过滤索引(filter index),可以使用带有where条件的语句来创建非聚集索引,过滤掉不需要的数据,降低索引的维护开销和存储空间,提高查询性能。 准备工作:在AdventureWorks2012上,有一个Production.WorkOrder表,将使用这个表来做演示。 步骤:1、 创建一个非聚集索引在Produc翻译 2013-03-21 17:42:33 · 5145 阅读 · 0 评论 -
第十二章——SQLServer统计信息(1)——创建和更新统计信息
简介:查询的统计信息:目前为止,已经介绍了选择索引、维护索引。如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化。当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况。在创建索引的时候,SQLServer就会在索引列上创建统计信息翻译 2013-03-21 17:31:15 · 14460 阅读 · 0 评论 -
第十八章——基于策略的管理(1)——评估数据库属性
前言:本章包含:1、评估数据库属性2、限制数据库对象 介绍: 基于策略的管理(PBM)能帮助DBA管理一个或多个实例,并通过PBM管理数据库实体或其他SQLServer对象。PBM协助DBA应用或强制服务器对象和数据库按照策略来运作。下面的概念是需要牢记的:1、 策略:定义在PBM下的数据库或服务器对象的规则。2、 条件:条件是方面状态的布尔值。3、 方面:在PBM中,目标的行为模式翻译 2013-04-06 00:54:06 · 4744 阅读 · 0 评论 -
第十八章——基于策略的管理(2)——限制数据库对象
前言:在实际环境中,会有很多开发人员正在对一个项目编写SQL脚本,此时需要对对象的命名经行强制限定。完成这个任务可以使用强制的一些策略来实现。合理的命名对象并不仅仅是处于维护需要,有时候也能影响性能,限定数据库的命名对象将能避免一些性能问题。通常SP_是用于SQLServer系统存储过程,但是一些程序员会尝试将其作为自定义存储过程的命名。下面我们将演示如何使用策略,来限定SP_前缀,让其只属于SQ翻译 2013-04-06 01:02:04 · 5613 阅读 · 4 评论 -
第十章——维护索引(3)——通过重建索引提高性能
前言:重建一个索引只是在内部删除并重建索引,使得碎片消失、统计信息更新、物理顺序重新排列组织。它会压缩数据页,按照填充因子填充适当的数据。如果有需要,也会添加新的数据页。这些操作有利于提高数据查找的速度,但是这个工作如果发生在大表上面,将是非常耗时耗资源的。 准备工作:首先先要决定是否达到了重建索引的临界值。否则,重组索引会更好。当碎片超过30%,那么重建索引会比较好。重建索引有两种方式,在重建之翻译 2013-05-16 21:07:47 · 6458 阅读 · 0 评论 -
第十章——维护索引(5)——查找丢失索引
前言:在开发阶段,很难总是可以在合适的列上创建合适的索引。所以一开始创建的索引可能会无效,此时,需要找出这些无效的索引。一般来说,当一个查询执行的时候,SQLServer优化器会选择最适合的索引进行执行,当没有找到合适的索引话,优化器会产生一个次优执行计划,并且把丢失索引的信息存放到DMVs上。当SQLServer服务重启后,所以存储在DMVs上的信息都会丢失,所以最好在正常使用大概1周后收集这些翻译 2013-05-16 21:17:53 · 7873 阅读 · 0 评论 -
第十章——维护索引(6)——查找无用索引
前言:众所周知,索引对性能的提升有巨大作用。但是这是有代价的,索引需要磁盘空间来存放它的B-Tree,并且用于在每次DML执行后更新信息,所以应该在一定时期内检查有无无用索引。 准备工作:记住别在重启服务器之后进行信息收集,因为DMO将会清空,而数据会非常不准确甚至是错误的。所以应该在运行了一段时间后(业务周期)再做收集。业务周期根据实际情况而定。一些表和查询会每天频繁使用,但是一些类似报表功能翻译 2013-05-16 21:19:34 · 6658 阅读 · 1 评论 -
第十章——维护索引(7)——使用索引视图提高性能
前言:视图是一个包含了一个或多个表的数据列的虚拟表。通常情况下,它仅仅是存储了查询的对象,一个视图可以当作一个表,可以用于存储过程、JOIN、用户自定义函数等等。视图包含了下面两个主要特性:1、 提供了一个安全机制,用于限制用户只能访问特定的数据。2、 使得开发人员能定制用户的逻辑视图。 当你查询一个视图时,优化器会产生一个单一的执行计划给这个查询。在索引视图未出现之前,视图必须解决查询在执行期间翻译 2013-05-16 21:28:25 · 7410 阅读 · 0 评论 -
第十章——维护索引(8)——在计算列中创建索引提高性能
前言:在理解计算列上的索引之前,先了解计算列的基本知识。计算列由可以使用同一表中的其他列的表达式计算得来。表达式可以是非计算列的列名、常量、函数,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。默认情况下,计算列是一个虚拟的列,并且可以在调用时重新计算,直到在CREATE TABLE或者ALTER TABLE 命令中使用PERSISTED。如果列定义成PERSISTED,会翻译 2013-05-16 21:43:27 · 6611 阅读 · 3 评论 -
第十章——维护索引(1)——索引碎片
本系列包含:1、 查找碎片。2、 使用填充因子。3、 使用REBUILD来加索引性能。4、 使用REORGANIZE来加索引性能。5、 如何查找丢失索引。6、 如果查找无用索引。7、 通过创建索引视图提高性能。8、 通过创建索引在计算列增加性能。9、 计算索引消耗的磁盘空间。 前言:DBA的日常任务并不仅仅是创建需要的索引在对应的列上,实际上,DBA还要保持索引创建的高标准。周而复翻译 2013-05-07 18:06:55 · 5865 阅读 · 0 评论 -
第十章——维护索引(4)——通过重组索引提高性能
前言:如果碎片程度小于30%,建议使用重组而不是重建。因为重组不会锁住数据页或者数据表,并且降低CPU的资源。总得来说,重组会清空当前的B-TREE,特别是索引的叶子节点,重组数据页和消除碎片。和重建不同,重组不会添加任何新数据页。 准备工作:为了了解是否有必要重组索引,需要首先查看碎片程度,如果在10%以下,那一般没必要做什么维护,如果在10%~30%,就建议进行重组。 步骤:1、 以下各种重翻译 2013-05-16 21:15:22 · 6391 阅读 · 0 评论 -
第十章——维护索引(9)——监控索引消耗的空间
前言:性能优化是DBA的工作之一,但是同时,DBA还需要关心SQLServer实例、数据库消耗的空间、提供数据库用户高可用性、管理数据库备份策略等等。磁盘空间的管理是一件非常重要的事情,DBA需要关注磁盘空间和未使用索引的空间消耗情况,管理数据文件和日志文件的大小等等。在其他章节和本章都有提到,索引会消耗磁盘空间。所以,是时候去管理这部分的内容。 准备工作:在开始之前,先要确保:1、 用户具有VI翻译 2013-05-16 21:45:57 · 5308 阅读 · 0 评论 -
第十章——维护索引(2)——填充因子
前言: 在第九章中,已经介绍了如何使用索引,当一个索引创建时,以B-Tree格式存放数据,拥有根节点、中间节点、叶子节点。叶子节点是最底层的节点,在聚集索引中,包含了实际数据,而每个数据页有8KB。 当表中的数据的增删改发生时,会尝试把数据插入到合适的数据页中。比如有一个聚集索引在SSN上,当插入一个新的SSN数时。SQLServer会尝试把数据插入到合适的数据页,假设SSN翻译 2013-05-07 18:12:40 · 6765 阅读 · 0 评论 -
第十三章——表和索引分区(1)——使用Range Left进行表分区
前言:如果数据表的数据持续增长,并且表中的数据量已经达到数十亿甚至更多,数据的查询和操作将非常困难,面对非常庞大的表,几时简单的增删改操作都会花费非常多的时间,如删除某个数据然后重建索引这些操作,会很难实现。在这种情况下,管理和维护查询性能就成为了一种挑战。在过去的日子,也就是2005之前,你可能需要使用分区视图来处理大数据量的数据,从2005开始,微软引入了叫做表分区的新特性。允许水平分割数据成翻译 2013-04-03 23:26:51 · 6612 阅读 · 0 评论 -
第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器
前言: SQLServer提供了一个系统存储过程,SP_Configure,可以帮助你管理实例级别的配置。微软建议使用默认配置,但是基于不同的服务器、不同负载的系统和你的用法,更改配置可能会给你的性能带来好处。在32位和64位系统中,sp_configure会有一些差异。 我们经常见到SQLServer所在的服务器上还包含了如IIS、文件服务器或者域控制器这些服务或者功翻译 2013-04-04 01:42:12 · 10672 阅读 · 0 评论 -
第七章——DMVs和DMFs(3)——用DMV和DMF监控TempDB
前言: 我们都知道TempDB是SQLServer的系统数据库,且SQLServer的日常运作严重依赖这个库。因此,监控TempDB的性能问题尤为重要。在过去很长一段时间里面,很多人都忽略了TempDB的重要性并忽略了它的性能问题。这并不是一件好事,因为TempDB的性能会影响其他用户数据库的性能,所以需要时时刻刻注意TempDB的性能。 在一些查询的聚合、排序翻译 2013-03-04 17:27:24 · 5037 阅读 · 0 评论 -
第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO
前言: 本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题。SQLServer同样提供了一些列与I/O相关的DMO来做监控。 本文介绍如何使用DMO来监控I/O子系统的性能并找到I/O瓶颈。通过本文,可以区分不同数据库的I/O使用模式。一旦发现有数据库的I/O很高,可能需要考虑把数据库迁移到单独的磁盘,或者深入翻译 2013-03-04 17:34:12 · 5408 阅读 · 0 评论 -
第七章——DMVs和DMFs(1)
简介: 从SQLServer2005开始,微软引入了一个名叫DMO(动态管理对象)的新特性,DMO可以分为DMFs(Dynamic Manage Functions,动态管理函数)和DMVs(Dynamic Manage Views,动态管理视图)两部分。这些函数和视图用于查找SQLServer实例内部统计信息以供性能监控所用。它们提供实时的,关于SQLServer内部工作的翻译 2013-03-04 17:07:32 · 21434 阅读 · 3 评论 -
第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(1)
忘了说明:本系列文章出自《Microsoft SQL Server 2012 Performance Tuning Cookbook》,将会陆续推出译文,但是由于工作需要,没有按顺序贴出来。本系列文章包含三部分:1、 使用系统统计函数(system statistical functions)来监控系统健康程度。2、 使用系统存储过程来监控SQLServer进程和会话。3、翻译 2013-02-26 17:02:16 · 6001 阅读 · 1 评论 -
第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(3)
本文为这个系列最后一篇。将是如何使用DBCC命令来监控SQLServer日志空间的使用情况。 前言: 每个数据库都必须有事务日志。事务日志记录每个DML操作,并应用于SQLServer的数据库中,如果恢复模式为FULL并经常有DML操作,日志将增长得非常快。几时恢复模式为simple,当数据库处于事务复制或者合并复制时,日志通常会增长。如果日志不是经常备份且日志文件的翻译 2013-02-26 17:18:28 · 8269 阅读 · 0 评论 -
第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(2)
承接上文,本文讲述如何使用系统存储过程来监控系统。 SQLServer同样也提供了一系列系统存储过程用于监控SQLServer,获取当前进程、会话、请求以及锁定的详细信息。本文将演示系统存储过程来实现这些监控。 情景: 有时候你会发现应用程序突然变得很慢,经常需要等待数据库响应,此时你需要快速查看是否请求被阻塞或者挂起。 准备工作: 在本文中,将使翻译 2013-02-26 17:11:02 · 6801 阅读 · 0 评论 -
第四章——SQLServer2008-2012资源及性能监控(1)
性能优化的第一步是发现问题,而发现问题通常又有两类:突发问题的侦测和常规问题的侦测,对于常规问题的侦测,通常需要有一个长效的性能监控作为依据。 本系列文章介绍服务器性能监控CPU使用率监控内存使用率监控 前言: 当由于劣质的查询写法、缺失必要的索引或者数据库级别的其他情况所导致的性能问题时,可以通过使用执行计划、DMVs/DMFs、SQL Trace或者数据翻译 2013-02-26 17:44:44 · 21687 阅读 · 2 评论 -
第四章——SQLServer2008-2012资源及性能监控(3)
本文为本系列最后一章,监控内存使用。监控服务器的内存是非常重要的事情,有很多情况会引起内存消耗。所以要经常性地做检查。本文将使用可靠性和性能监视器来获取内存相关的统计。 准备工作:在开始之前,先来了解一下将要用到的计数器:Ø Memory: Available Mbytes:提供系统上可用内存的数量。Ø Memory: Pages/sec:显示有多少页被用于读或写入硬盘翻译 2013-03-01 17:06:26 · 13009 阅读 · 0 评论 -
第六章——根据执行计划优化性能(2)——查找表/索引扫描
前言: 在绝大部分情况下,特别是从一个大表中返回少量数据时,表扫描或者索引扫描并不是一种高效的方式。这些必须找出来并解决它们从而提高性能,因为扫描将遍历每一行,查找符合条件的数据,然后返回结果。这种处理是相当耗时耗资源的。在性能优化过程中,一般集中于:1、 CPU2、 Network3、 磁盘IO而扫描操作会增加这三种资源的开销。 准备工作:翻译 2013-03-18 17:03:21 · 8241 阅读 · 0 评论 -
第六章——根据执行计划优化性能(1)——理解哈希、合并、嵌套循环连接策略
前言:本系列文章包括:1、 理解Hash、Merge、Nested Loop关联策略。2、 在执行计划中发现并解决表/索引扫描。3、 介绍并在执行计划中发现键查找并解决它们。 对于性能优化,需要集中处理以下的问题:1、 为你的环境创建性能基线。2、 监控现在的性能并发现瓶颈。3、 解决瓶颈以便得到更好的性能。 一个预估执行计划是描述查询将会如何执行的一个翻译 2013-03-18 16:54:14 · 10212 阅读 · 0 评论 -
第六章——根据执行计划优化性能(3)——键值查找
前言: 本文为本系列最后一篇,介绍键值查找的相关知识。 键值查找是具有聚集索引的表上的一个书签查找,键值查找用于SQLServer查询一些非键值列的数据。使用非聚集索引的查询不会有键值查找,但是所有键值查找会伴随非聚集索引出现。这里特别提醒的是键值查找总是伴有嵌套循环关联。 准备工作: 下面将创建一个表,通过执行计划看看键值查找的不同效果。为了产翻译 2013-03-18 17:14:46 · 9345 阅读 · 0 评论 -
第十六章——处理锁、阻塞和死锁(2)——侦测阻塞和阻塞查询
前言:如果一个事务正在等待一些给其他事务锁定的资源。这个事务就被成为“被阻塞的事务”。反过来,引起阻塞的事务,也就是锁定资源并造成其他事务等待的事务叫做“正在阻塞的事务”。长时间运行事务会阻塞其他事务和查询,使他们等待长时间。在繁重的系统中,很多时候我们会遇到阻塞问题,如果一个事务因为阻塞未完成。会造成一些列的等待链。本文将介绍如何发现并马上解决这方面的问题。 准备工作:本翻译 2013-03-20 17:34:40 · 6853 阅读 · 2 评论 -
第十七章——配置SQLServer(3)——配置“对即时负载的优化”
前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中。在很多时候,我们会执行一些简单的程序,仅仅执行一次,而为这些查询创建存储过程是非常浪费内存资源的。由于内存不足,可能会导致你的缓存溢出,从而影响性能。在2005之前,这是一个大问题,为了纠正这个问题。微软在SQLServer 2008中引入了对即时查询负载的优化功能。这个功能在2012也翻译 2013-04-04 01:52:26 · 6664 阅读 · 1 评论 -
第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁
前言:作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用。此时,你需要尽快侦测和处理这类问题。死锁是当两个或者以上的事务互相阻塞引起的。在这种情况下两个事务会无限期地等待对方释放资源以便操作。下面是死锁的示意图:本文将使用SQLServer Profiler来跟踪死锁。 准备工作:为了侦测死锁,我们需要先模拟死锁。本例将使用两个不翻译 2013-03-20 17:54:08 · 15418 阅读 · 9 评论 -
第十七章——配置SQLServer(2)——32位和64位系统中的内存配置
前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE来限制内存。但是,在SQLServer2012以后,这个选项将被弃用,所以不能使用这种方式来控制32位实例的虚拟地址空间。如果你服务器上有很多内存,就只能升级到64位系统。下面是微软给出的内存限制: 虽然2012以后已经弃用AWE,但是了解一下32位系统翻译 2013-04-04 01:45:49 · 14990 阅读 · 0 评论 -
第十七章——配置SQLServer(4)——优化SQLServer实例的配置
前言:Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServer ManagementStudio的图形化界面实现。 准备工作:为了查看SQLServer当前实例的配置,也可以使用下列查询来实现:SELECT *FROM sys.configurationsORDER BY name下面是本机的结果: 步骤:1、 执行下面语句,以翻译 2013-04-04 01:55:59 · 7303 阅读 · 0 评论 -
第四章——SQLServer2008-2012资源及性能监控(2) .
本文接着上文继续,讲述如何监控CPU的使用情况前言:CPU是服务器中最重要的资源。在数据库服务器中,CPU的使用情况应该时刻监控以便SQLServer一直处于最佳状态。本文将会使用可靠性和性能监视器来获取CPU相关的使用统计信息可靠性和性能监视器是过去性能监视器工具的加强版。同时拥有性能监视器的全部功能。性能计数器提供对各种系统活动的统计功能。可以找到有数百种性能计数器翻译 2013-03-01 16:59:58 · 9932 阅读 · 0 评论