当前位置:  编程技术其它 iis7站长之家
本页文章导读:
    ▪2年SQL Server DBA调优方面总结      2年SQL Server DBA调优方面总结当2年dba 我觉得,有些东西需要和大家分享探讨,先书单。书单1.《深入解析SQL Server 2008 系列》 这个就是mssql 2005 的技术内幕系列。2012版的也出了有兴趣可以看看,.........
    ▪Sql: 請假跨月份問題,或跨年份問題 日期部分边界       1 ---請假跨月份問題,或跨年份問題 日期部分边界 2 declare @sart datetime,@end datetime,@d int,@s1 datetime,@e1 datetime,@s2 datetime,@e2 datetime,@t varchar(50),@t2 varchar(50),@I int 3 set @sart='2012-11-18 14:56:12' 4 set @end='20.........
    ▪在SQL SERVER 中通过ADSI接口查询活动目录AD信息!      活动目录或LDAP都是企业的基础架构,广泛应用于用户的组织和人员及权限,以此为基础可以实现SSO、统一身份认证等等。本文介绍一种通过SQL SERVER提供的ADSI接口查询AD,可以非常方便的查询A.........

[1]2年SQL Server DBA调优方面总结
    来源:    发布时间: 2013-10-29
2年SQL 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求生秘籍》和《Troubleshooting SQL Server A Guide for the Accidental DBA》是同一个作者,这本书主要是针对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 性能调优(io),SQL Server 性能调优(cpu),SQL Server 性能调优(内存)都有讲到。如何确认各个瓶颈。

 

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

 

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

 

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

 

那么如何确定使用内存比较多的语句呢,内存有点特别,sql server把数据放在buffer pool里面,

    
[2]Sql: 請假跨月份問題,或跨年份問題 日期部分边界
    来源:    发布时间: 2013-10-29
 1 ---請假跨月份問題,或跨年份問題 日期部分边界 2 declare @sart datetime,@end datetime,@d int,@s1 datetime,@e1 datetime,@s2 datetime,@e2 datetime,@t varchar(50),@t2 varchar(50),@I int 3 set @sart='2012-11-18 14:56:12' 4 set @end='2012-12-08 14:56:12' 5 --set @I=DATEDIFF(ms,@sart,@end) 6 set @I=DATEDIFF(ss,@sart,@end) 7 if(year(@sart)=year(@end) and month(@sart)=month(@end)) 8 begin 9     set @d=day(@end)-day(@sart)+110     --select @d=datediff(day,@sart,@end) 11         --set @d=@d*8 AS '小時'12        --select @d=datediff(hour,@sart,@end) AS '小時'13       --select @d=@I/8640000014     select @d=@I/86400    15 end16 else17 begin18 if(year(@sart)=year(@end) and month(@end)>month(@sart))19     set @t=cast(year(@sart) as varchar)+'-'+cast(month(@sart) as varchar)+'-'+cast(day(@sart) as varchar)+' '+cast(DATEPART(hour,@sart) as varchar)+':'+cast(DATEPART(minute,@sart) as varchar)+':'+cast(DATEPART(second,@sart) as varchar)20     select @s1=cast( @t as datetime)21 --月末22     select @e1=DATEADD(day,  -1, DATEADD(month, 1,DATEADD(day,-DATEPART(day, @sart)+1,@sart )))23 set @t2=cast(year(@end) as varchar)+'-'+cast(month(@end) as varchar)+'-      
    
[3]在SQL SERVER 中通过ADSI接口查询活动目录AD信息!
    来源:    发布时间: 2013-10-29

活动目录或LDAP都是企业的基础架构,广泛应用于用户的组织和人员及权限,以此为基础可以实现SSO、统一身份认证等等。本文介绍一种通过SQL SERVER提供的ADSI接口查询AD,可以非常方便的查询AD的相关信息,并且查询速度很快,并可以做一些扩展应用,如开放给外部系统调用等,但这种方式的局限性在于需要安装和部署SQL Server。

本文给出一个简单的查询AD用户信息的示例,其中sectionoffice为自定义的AD扩展属性,具体代码如下:

EXEC sp_addlinkedsrvlogin 'ADSI', 'false', '数据库用户名', 'ad用户名', 'ad用户名称'GOSELECT objectGUID,ObjectCategory,officeroom,sectionoffice,userPrincipalName,displayname,department FROM OPENQUERY(ADSI, 'SELECT objectGUID,ObjectCategory,officeroom,sectionoffice,userPrincipalName,displayname,department FROM ''LDAP://portal.contoso.uat/OU=部门,DC=portal,DC=contoso,DC=uat'' WHERE objectPerson'' AND objectUser''')GO

 执行结果如下:

 对于访问其他AD属性的方法也是如此,根据具体应用需求,都是可以直接通过SQL语句进行查询。

本文链接


    
最新技术文章:
▪Sql Server里删除数据表中重复记录的例子
▪如何查看SQLSERVER中某个查询用了多少TempDB空间...
▪在SQL Server中使用ISNULL执行空值判断查询
▪揭秘SQL Server 2014有哪些新特性(1)-内存数据库
▪揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buff...
▪揭秘SQL Server 2014有哪些新特性(3)-可更新列存...
▪揭秘SQL Server 2014有哪些新特性(4)-原生备份加...
▪解决SqlServer 各版本 sa帐户不能登录问题
▪浅析SQL Server中包含事务的存储过程
▪深入分析MSSQL数据库中事务隔离级别和锁机制
▪SQL优化技巧指南
▪人工智能自动sql优化工具--SQLTuning for SQL Server
▪使用 TOP 子句限制UPDATE 语句更新的数据
▪sql server动态存储过程按日期保存数据示例
▪SQLServer用存储过程实现插入更新数据示例
▪SqlServer中tempdb的日志机制原理解析及示例分享...
▪SqlServer数据库提示 “tempdb” 的日志已满 问题...
▪浅谈tempdb在SqlServer系统中的重要作用
▪SqlServer提示“列前缀tempdb.无效: 未指定表名”...
▪SQL命令优化需要记住的9点事项
▪教你如何看懂SQL Server查询计划
▪sql server 2000数据库备份还原的图文教程
▪SqlServer2012中First_Value函数简单分析
▪sql语句中单引号嵌套问题(一定要避免直接嵌...
▪谈谈sqlserver自定义函数与存储过程的区别
▪SQL SERVER使用REPLACE将某一列字段中的某个值替...
▪总结一周内学习的Sql经验(一)
▪sql存储过程详解
▪SQL Server UPDATE语句的用法详解
▪MSSQL事务的存储过程
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3