2年SQL Server DBA调优方面总结

原文:2年SQL Server DBA调优方面总结

2SQL Server DBA调优方面总结

当2年dba 我觉得,有些东西需要和大家分享探讨,先书单。

书单

1.《深入解析SQL Server 2008 系列》 这个就是mssql 2005 的技术内幕系列。2012版的也出了有兴趣可以看看,技术内幕系列是我接触最早的书,里面内容涵盖量很大,但是都是点到为止。所以很多都是可以细细品味,回头再看的。

2.《Troubleshooting SQL Server A Guide for the Accidental DBA》 这本书是我接触最早的关于性能调优的书。链接已经给出可以去下载,不过需要注册SQLServerCenter ,这个网站是SQL Server 方面比较出名的网站。很多国外大牛。

3.《联机文档》也就是sql server 装机后自带的帮助文档,内容全面的吓人,几乎包含了技术内幕系列的所有内容。

4.《The.Gurus.Guide.To.SQL.Server.Architecture.And.Internals》这本书是将sql server 2000的内核,从软件开发的角度来看SQL Server 2000,很深入作者也十分的出名,可惜死的太早。对sql server框架理解主要来源于这本书,可惜没有中文版。

5.《SQL Server 2008 内核剖析和故障排除》接触的第二本关于性能调优的书,真本书比较绝的地方时,先将原理再讲调优。全书分为2部分第一部分就是原理,第二部分是性能调优。也是不错的一本,书中对扩展事件的功能做了比较详细的解释。我在其他书上是没看到过的。

该书的2012英文原版已经出了。

6.《Microsoft SQL Server企业级平台管理实践》是一本少见的国产好书,书的编写很符合中国人心理,直指问题本身,很适合当工具书。其中有关于性能跟踪调整,从捕获到处理讲的很实际。

7.《SQLSERVER求生秘籍》和《The.Gurus.Guide.To.SQL.Server.Architecture.And.Internals》是同一个作者,这本书主要是针对SQL Server 2005和上一本一样对个别点讲的很深入,缺点讲到的东西太少。

8.《SQL Server 2008查询性能调优》这本书比较实用的一本书,讲了各个瓶颈的发现,性能基线的简历,从查询,存储过程角度出发,分析性能,讲解可能出现性能问题的点。

9.《Pro SQL Server 2008 Service Broker》 讲解关于Service Broker,异步消息处理程序,很多比较大的公司会使用,我知道的是新蛋是使用这个的,全书围绕一个大例子比较清晰,容易接受。

10.《Pro SQL Server 2008 Policy-Based Management》关于策略管理方面的知识,个人觉得比较鸡肋。

 

安全性

楼主是小公司的DBA所以关于安全性使用的比较少,就管理一些权限和密码

可用性

到SQL Server 2012实现了多种可用性方案,1.日志传送,2.数据库复制,3.数据库镜像,4.alwaysonline。

1.日志传送,楼主觉得是数据库镜像的雏形。没有数据库镜像那样试试的传送和redo日志

2.数据库复制,数据库复制有比较多的分类:快照,事务,合并。事务复制是被应用最广的,从sql server 2000到sql server 2005事务复制被改进了很对具体可以看联机文档。

3.数据库镜像,我对于不需要读写分离的数据库中,数据库镜像是被应用最广的可用性方案,数据库镜像和其他的比最突出的优点是切换方便。

高性能

DBA的大头应该是性能调优。性能的调优大头是索引,最求更高的性能索引是必不可少的。一个性能主要体现的执行时间上,执行时间= 运行时间+等待时间。这个公式我觉得很经典。当你没有头绪的时候能帮你梳理清楚应该怎么排查问题。做性能调优一定要对性能的指标十分熟悉。

 

性能基线

当你刚刚入职一家公司,对公司数据库现在的负载一无所知,那么一开始要做的事情就是创建一个数据库性能基线。有人会问基线能用来干什么,很多人感觉没用,我刚入职时我也觉得没用。但是性能基线是一个性能调优,监控的开始。

 

一般比较正规的公司,一个业务上线前会通过压力测试预计这个服务器的性能边境在哪里,到达性能边境之后各个性能指标的表现是如何的。如果如果性能基线接近了性能边界,到了这个时候,那么就要考虑换服务器或者加服务器了。这个是性能基线的一个用处。

 

拿到一个服务器我先会做一下性能基线,性能基线也就是服务器在正常运转的时候数据库的性能指标的表现。我会抓取24小时的性能指标作为性能基线(可以看我相关的文章:SQL Server 性能基线和监控SQL Server 性能调优(性能基线))。

 

以下是我使用的抓取的指标

cpu:

    \Processor(_Total)\% Processor Time
    \Processor(_Total)\% Privileged Time

    \SQLServer:SQL
Statistics\Batch Requests/sec
    \SQLServer:SQL Statistics\SQL Compilations/sec
    \SQLServer:SQL Statistics\SQL Re-Compilations/sec
    \System\Processor Queue Length
    \System\Context Switches/sec

  Memory:

    \Memory\Available
Bytes
    \Memory\Pages/sec
    \Memory\Page Faults/sec
    \Memory\Pages Input/sec
    \Memory\Pages Output/sec
    \Process(sqlservr)\Private Bytes
    \SQLServer:Buffer Manager\Buffer cache hit ratio
    \SQLServer:Buffer Manager\Page life expectancy
    \SQLServer:Buffer Manager\Lazy writes/sec
    \SQLServer:Memory Manager\Memory Grants Pending
    \SQLServer:Memory Manager\Target Server Memory (KB)
    \SQLServer:Memory Manager\Total Server Memory (KB)

  Disk:

    \PhysicalDisk(_Total)\%
Disk Time
    \PhysicalDisk(_Total)\Current Disk Queue Length
    \PhysicalDisk(_Total)\Avg. Disk Queue Length
    \PhysicalDisk(_Total)\Disk Transfers/sec
    \PhysicalDisk(_Total)\Disk Bytes/sec
    \PhysicalDisk(_Total)\Avg. Disk sec/Read
    \PhysicalDisk(_Total)\Avg. Disk sec/Write

  SQL Server:

    \SQLServer:Access
Methods\FreeSpace Scans/sec
    \SQLServer:Access Methods\Full Scans/sec
    \SQLServer:Access Methods\Table Lock Escalations/sec
    \SQLServer:Access Methods\Worktables Created/sec
    \SQLServer:General Statistics\Processes blocked
    \SQLServer:General Statistics\User Connections
    \SQLServer:Latches\Total Latch Wait Time (ms)
    \SQLServer:Locks(_Total)\Lock Timeouts (timeout > 0)/sec
    \SQLServer:Locks(_Total)\Lock Wait Time (ms)
    \SQLServer:Locks(_Total)\Number of Deadlocks/sec
    \SQLServer:SQL Statistics\Batch Requests/sec
    \SQLServer:SQL Statistics\SQL Re-Compilations/sec

指标代表啥意思我就不解释了,你可以开perfmon,挨个看说明。

假设你现在已经有了性能指标了,那么你就可以根据性能基线简历告警了,以前的文章(SQL Server 性能基线和监控)中我已经提供了使用powershell如何监控性能。

 

性能运行性能问题分析:

基线建好了监控也建好了,出现告警了。按讲关于调优的书上就会开始分开,分为CPU瓶颈,IO瓶颈,还是内存瓶颈讲。关于这些瓶颈的确认我这里就没必要说了,在以前的文章SQL Server 性能调优(ioSQL Server 性能调优(cpuSQL Server 性能调优(内存)都有讲到。如何确认各个瓶颈。

 

其实这些辨认瓶颈的方法都是不够全面的,瓶颈确认需要经验,因为往往出现性能问题了,不是一个指标,而是一批指标都有问题,比如当你索引没建好,导致了全表扫描,io变大,cpu飙高,内存出现分页,所以有时候十分难判断。

 

如果已经确定是那部分照成的性能问题如IO,CPU,内存。归根结底就只有2中方法,1.调整。2.硬件升级。

 

如果问题出现了,要急着解决问题1.使用top 10 io,top 10 cpu,来查看需要优化的语句根据执行计划进行调优。还有就是通过profiler,前提是当前服务器还能允许你使用profiler。2008之后出现了扩展事件,可能可以通过这个来处理,但是关于扩展事件做跟踪我还没有涉及,相关资料也不是很多。

 

那么如何确定使用内存比较多的语句呢,内存有点特别,sql server把数据放在buffer pool里面,大家都能用,内存压力分为内部和外部,内部是sql server 自身引起的内存压力,外部是其他进程照成的内存压力(相关的只是可以查看sql server 2005 troubleshooting 白皮书)。

出现内存瓶颈也就是buffer pool满了,要清除原先的buffer pool数据才能把新读入的数据存放在里面,那么就简单了,那个语句读取的最多那么哪个语句使用内存最多(详细内容可以查看《Microsoft SQL Server企业级平台管理实践》)。

 

那么假设已经定位到了一个出问题的SQL语句,那么接下来就是要优化它,里面使用到的最关键的就是执行计划。如何根据执行计划优化SQL语句不同的人想法都不太一样。优化方法和各有特色。所以不再升入以免以偏概全。但是运行时间主要还是这样几点:执行计划,统计信息,索引。

性能等待问题分析:

等待时间:锁等待,闩锁等待。

关于资源等待,这里有三篇文章,《SQL Server 性能调优 Wait Event》,《SQL Server 性能调优 Wait Event (二)》,《SQL Server 2008 性能调优 session级别 wait event》作者是同一个人。通过WaitEvent的角度来调整。所以在此之前需要先了解关于sys.dm_os_wait_stats 中相关指标主要指的是什么意思,关于这个SQL
Server出了一个《SQL Server 2005 Waits and Queues》很详细的介绍了各个指标的意思。《SQL Server 2008查询性能调优》中有个很好的关于收集堵塞情况的SQL语句。

 

当收集到堵塞如果是出现在锁级别上的,那么没有其他办法,用索引或者在select 语句上面加nolock,或者开带快照的隔离级别,但是个人比较不赞成快照隔离级别,有朋友已经测试过,一开快照隔离级别,tempdb的负载增加十分明显,一个问题解决导致了另外一个更棘手的问题。若是select语句,尽量使用覆盖索引,来减少因为引用多个索引导致和update死锁的情况。当然这个也看具体的系统运行环境而定。

 

如果是出现在闩上,一般比较大的指标是PAGEIOLATCH_x系列的,WRITELOG,PAGELATCH_x,tempdb上的PAGELATCH_x。

 

PAGEIOLATCH_x是在等待磁盘io时产生的,会产生磁盘io的原因也就是内存中没有数据,就是内存不够才会出现这种状况,那么就加内存吧。或者优化一下业务规则。

 

WRITELOG 是写入日志的时候出现了等待,日志是顺序写的,本质就是事务多写入时磁盘速度不够快出现了等待,如果有问题建议1.把日志和数据文件分开,放到2个独立的盘或者raid,2.换成速度更快的盘。

 

PAGELATCH_x是操作buffer pool数据页产生的闩。如果等待过大,很简单就是调用这个页的session过多,那么就减少对页面的访问。1.通过索引优化语句,尽量减少sql读取的页面数量。2.想办法把页面的数据分散多个页面。3.考虑读写分离。

 

tempdb上的PAGELATCH_x主要发生在GAM,SGAM,PFS几个页面,因为order by,group by,临时表,表变量,lazy操作符。都会使用到tempdb,会开辟一个空间。如果并发量大。那么tempdb上的PAGELATCH_x的等待将会很大。1.减少执行计划中sort操作符,减少lazy操作符。2.把tempdb的数据文件扩展,上限是cpu个数(有个条件是tempdb容量要平衡)。

时间: 2024-09-09 00:08:26

2年SQL Server DBA调优方面总结的相关文章

SQL Server DBA:那些年,我们一起用过的工具

作为SQL Server DBA,我们常常抱怨微软自带工具的种种不好,但能做到开箱 即用已经很难得.SQL Server 2012中包含了以下三种单独的GUI工具,供SQL Server DBA与开发者使用. 1.2005年推出的SQL Server Management Studio 2.同样于2005年推出的SQL Server Business Intelligence Development Studio 3.2012年全新推出的SQL Server Data Tools SQL Ser

SQL Server DBA需要知道的三件事

TechTarget记者有幸在六月采访了SQL Server顾问和热门博客写手Denny Cherry.他谈到了对于SQL Server DBA需要知道的三件事,并请介绍了SQL Server的发展趋势. 1.SQL Server 2012已经发布.Cherry说:"我遇到 很多人问我,SQL Server 2012什么时间发布.实际上它已经发布了."为什么还 会有这种困惑呢?微软近期发布的新产品太多了,包括Window Server 2012和 Digital Studio 2012

一名小小的SQL Server DBA想谈一下SQL Server的能力

原文:一名小小的SQL Server DBA想谈一下SQL Server的能力 一名小小的SQL Server DBA想谈一下SQL Server的能力 百度上暂时还没有搜索到相关的个人写的比较有价值的文章至少在中文网络的世界里面没有 但是在微软的网站有这样一篇文章<比较 SQL Server 与 IBM DB2> 文章从下面几个方面进行了对比 1.TCO和ROI2.性能和可扩展性3.高可用性4.安全5.管理6.开发效率7.商业智能和数据仓库8.OLTP9.SAP集成 文章介绍得比较牛逼 性能

SQL Server 性能调优培训引言

原文:SQL Server 性能调优培训引言      大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录.       作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于是我通过网络找了各种MS SQL技术的相关文档,总觉得讲得比较干涩,没有一个系统性,今年3月底我无意浏览到一个网站提供免费的性能调优的半年培训(http://www.sqlpassion.at/academy/performance

SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈

原文:SQL Server 性能调优(一)--从等待状态判断系统资源瓶颈 通过DMV查看当时SQL SERVER所有任务的状态(sleeping.runnable或running) 2005.2008提供了以下三个视图工详细查询: DMV 用处 Sys.dm_exec_requests 返回有关在SQL Server中执行的每个请求的信息,包括当前的等待状态 Sys.dm_exec_sessions 对于每个通过身份验证的会话都返回相应的一行.此时图是服务器范围的视图.此视图首先可以查到服务器负

SQL Server 性能调优之查询从20秒至2秒的处理方法

一.需求 需求很简单,就是需要查询一个报表,只有1个表,数据量大约60万左右,但是中间有些逻辑. 先说明一下服务器配置情况:1核CPU.2GB内存.机械硬盘.Sqlserver 2008 R2.Windows Server2008 R2 SP1和阿里云的服务器,简单说就是阿里云最差的服务器. 1.原始表结构 非常简单的一张表,这次不讨论数据冗余和表字段的设计,如是否可以把Project和Baojian提出成一个表等等,这个是原始表结构,这个目前是没有办法改变的. 2.查询的sql语句为 sele

SQL Server DBA工作内容详解

在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色.DBA的工作目标就是确保Microsoft SQL Server 2008系统正常高效地运行.DBA的工作也是最繁忙的工作,无论是性能调整,还是灾难恢复,都离不开DBA的支持. 一般地,作为一个DBA,至少应该做好以下12项任务: 任务一:安装和配置; 任务二:容量规划; 任务三:应用架构设计; 任务四:管理数据库对象; 任务五:存储空间管理;

SQL Server性能调优之缓存

在执行任何查询时,SQL Server都会将数据读取到内存,数据使用之后,不会立即释放,而是会缓存在内存Buffer中,当再次执行相同的查询时,如果所需数据全部缓存在内存中,那么SQL Server不会产生Disk IO操作,立即返回查询结果,这是SQL Server的性能优化机制. 一,主要的内存消费者(Memory Consumer) 1,数据缓存(Data Cache) Data Cache是存储数据页(Data Page)的缓冲区,当SQL Server需要读取数据文件(File)中的数

SQL Server DBA日常检查常用SQL_MsSql

1.数据库 复制代码 代码如下: --所有数据库的大小  exec sp_helpdb    --所有数据库的状态  select name,         user_access_desc,           --用户访问模式         state_desc,                 --数据库状态         recovery_model_desc,        --恢复模式         page_verify_option_desc,    --页检测选项