随笔分类 - 06.性能监控与故障排除
Performance Monitoring & Troubleshooting
摘要:你用安装向导安装了全新的SQL Server,最后你点击了完成按钮。哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的。是的,你没看错:SQL Server的默认安装在很多方面的配置是错误的。在今天的文章里,我想给你展示下,为了更快的...
阅读全文
摘要:在进行数据库收缩时,我们有2个可用选项:NOTRUNCATE,TRUNCATEONLY。这篇文章我们会详细讨论下这2个选项的具体区别。NOTRUNCATE当你对数据库收缩命令提供NOTRUNCATE选项时,意味着SQL Server将你数据库末尾的页移到前面,那里可以找到一些空闲的未分配空间(将释放...
阅读全文
摘要:在今天的文章里,我想谈下使用内存中OLTP的内存优化文件组来获得持久性,还有如何配置它来获得高性能。在进入正题前,我想简单介绍下使用你数据库里这个特定文件组,内存OLTP是如何获得持久性的。内存中OLTP的持久性早些天对内存中OLTP(代号Hekaton)的一个大误解是,人们认为内存中OLTP是不具...
阅读全文
摘要:上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server。今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤。听起来很有意思?我们开始吧!假设在你面前有个简单的查询,你想在WinDbg里调试那个特定的查询。听起来很简单,但一旦你开...
阅读全文
摘要:这篇文章我想探究下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 2014引入各种惊艳性能提升!!缓存池扩展(Buffer Pool Extensions)缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如SSD硬盘,用来扩展缓存池。缓存池扩展来得非常方便,如果你不能给你的数据库服务器物理上增加更多的内存,可以...
阅读全文
摘要:在本文中,我们将来看看SQL Server 2014在资源调控器方面增加了哪些新的功能。资源调控器(Resource Governor)是从SQL Server 2008开始出现的一项功能。它是用于管理 SQL Server 工作负荷和系统资源使用情况的功能。 在SQL Server 2014之前,...
阅读全文
摘要:SQL Server 2014缓存池扩展 (Buffer Pool Extension)功能可以将缓存池扩展到较快的SSD存储上。为内存比较紧张的系统提供了新的扩展途径。Buffer Pool 扩展可以带来以下好处:提高随机I/O的吞吐量降低I/O延迟提高单位时间内处理事务的吞吐量显著地提高读性能以...
阅读全文
摘要:在今天的文章里我想谈下SQL Server 2014里引入的缓存池扩展(Buffer Pool Extensions)。我们都知道,在SQL Server里,缓存池是主要的内存消耗者。当你从你存储里读取数据时,数据会在缓存池里缓存。SQL Server在计划缓存里缓存执行计划,也是缓存池的一部分。你...
阅读全文
摘要:今天我想谈下SQL Server里的一个特别话题——即时文件初始化(Instant File Initialization)。对于你的SQL Server实例,如果你启用了即时文件初始化,在特定情况下,你会获得巨大的性能提升。即时文件初始化定义了当在数据文件里分配新的空间时,SQL Server引擎...
阅读全文
摘要:在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入,但提供的功能还是有所限制:你只能限制CPU时间(这个已经很棒了),还有你能限制查询(从每个独立的查...
阅读全文
摘要:在这篇文章里,我想详细谈下为什么你要避免事务日志(Transaction Log)上的自动增长操作(Auto Growth operations)。很多运行的数据库服务器,对于事务日志,用的都是默认的日志文件大小和自动增长设置。人们有时会很依赖自动增长机制,因为它们刚好能正常工作。当然,如果它正常工...
阅读全文
摘要:这个周末我发现了SQL Server 2014里Hekaton的一个有趣副作用,很遗憾它会负面影响你数据库的目标恢复时间(Recovery Time Objective,RTO)。你已知道,对于每个本地编译表和存储过程,Hekaton都会创建一个DLL,这些都是以C语言代码实现的。这些DLL文件载入...
阅读全文
摘要:在一些先决条件下,SQL Server可以缓存临时表(cache Temp Tables)。缓存临时表意味着当你创建反复创建同个临时表时,SQL Server就可以重用它们。这会从整体上大幅度提高你的工作量(性能),因为SQL Server不需要访问内存里的特定页(PFS,GAM,SGAM),经常访...
阅读全文
摘要:今天我想谈下一个特别的等待类型,这个等待可以说是有时很难进行故障排除:线程池(THREADPOOL)等待。这个等待类型是SQL Server内部线程调度机制特有的。或许你已经知道SQL Server内部使用自有的“操作系统”来实现线程调度和内存管理——SQLOS。SQLOS提供一系列的工作者线程,用...
阅读全文
摘要:在上3篇文章里,我们讨论了列出反映服务器当前状态的不同查询。初涉SQL Server性能问题(1/4):服务器概况初涉SQL Server性能问题(2/4):列出等待资源的会话初涉SQL Server性能问题(3/4):列出阻塞的会话这篇文章我们看下从计划缓存里列出执行状态。 1 /********...
阅读全文
摘要:在 初涉SQL Server性能问题(2/4)里,我们讨论了列出等待资源或正运行的会话脚本。这篇文章我们会看看如何列出包含具体信息的话阻塞会话清单。 1 /************************************************************************...
阅读全文
摘要:在初涉SQL Server性能问题(1/4)里,我们知道了如何快速检查服务器实例上正运行的任务数和IO等待的任务数。这个是轻量级的脚本,不会给服务器造成任何压力,即使服务器在高负荷下,也可以正常获得结果。问题检测的第2步是获取在进行任何资源等待的会话。下面的脚本会帮助我们获得这些信息。这个查询需要预...
阅读全文
摘要:当你作为DBA时,很多人会向你抱怨:“这个程序数据加载和蜗牛一样,你看看是不是服务器出问题了?”造成这个问题的原因有很多。可能是程序应用服务器问题,网络问题,程序实现方式问题,数据库服务器负荷过重。不管是哪个问题,数据库总是第一个被抱怨的。我们DBA的职责就是找出问题所在,并解决它们。问题解决第一步...
阅读全文