社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 1146阅读
  • 0回复

[分享]了解SQL系统检测与性能调试

楼层直达
z3960 
级别: FLY版主
发帖
795054
飞翔币
213206
威望
215737
飞扬币
2669633
信誉值
8

监视SQL活动对于数据库管理来说是很重要的,监视目的是为了发现SQL SERVER的性能问题。。
SQL性能优化就是保证计算机资源的使用尽可能的达到最平衡的状态,不要因为某处资源的瓶颈导致系统的整体性能运行。
计算机资源就是内存/处理器/磁盘/网络子系统.
过程是这样的,首先要排除因为事务死锁导致的问题,然而数据组织不合理导致硬盘i/o过多的问题,接着是考虑是否内存过小导致硬盘i/o过多的问题,下一步是排除不够优化的性能问题,然后排除CPU性能过低问题。。。

所以,一个DBA遇到数据库性能低下的时候,其工作过程一般是这样。。
(1)        手机问题发生的上下信息,包括做了什么操作,访问什么数据,什么时候做的,任务的紧急重要等级,需要解决到什么程度
(2)        通过sqlserver活动监视器判断活动有没有死锁而挂起状态。。。
(3)        通过系统默认的三个监视对象:内存访问速速pages/sec,磁盘访问平度avg.disk,cpu占用比例%process 来发现那方面的资源出现问题
(4)        判断的顺序是磁盘,内存,cpu.
(5)        根据任务访问的数据库,类型情况,添加更加细心的数据库,以监视可能的问题,使用sqlproiler来发现哪方面的资源出了问题
(6)        分析原因(可以借助数据库优化顾问),并调整系统配置,然后循环执行sqlserver活动监视器,监视在优化,知道完成性能优化


SQL活动性能监视器
对于新问题,首先查看活动监视器,确定活动当前状态是否阻塞,如果不是在看系统监视器和sqlprofiler跟踪监视系统的运行数据,并将其作为分析问题的基础数据。。。

        状态值                说明
        Running               进程当前处于运行状态
        Runnable               进程已连接到数据库,并运行完毕,当前没有任何工作
状态说明         Sleeping               进程正在运行,但是当前处于等待状态,可能因为资源正被别人使用,也可能在等待用户的输入
        Background     周期被唤醒运行的背景进程
        Susoended      进程运行中,但是因为等待资源已经挂起。通过等待类型,阻塞在可以看到等待原因
        Other               进程不属于任何状态





查看运行的指令
use  tariffsmall --使用数据库tariffsmall

在活动监视器进程详细信息就可以查看运行的指令

显示指定 的活动
如果只希望符合条件的信息被显示出来,就可以在筛选活动中设置

系统监视器
系统监视器也叫性能监视器不仅可以监视整个系统情况,如处理器,内存,磁盘,而且可以监视运行的sqlservere的运行情况。
性能监视器是针对监视的对象
计数器以sql server:{对象名称}的格式显示。命名计数器以MSSQL$${名}:{计数器名}的格式显示
常用的sqlserver对象
性能对象        描述
SQL Server:buffer Manager        提供有关SQL使用的内存缓冲区信息,如freemermory和buffer cache hit ratio
Sqlserver:databases        提供有关sql数据库的信系,如可用的日志空间量或数据哭中的活动事务数
Sqlserver:general statistics        提供有关服务器范围内的常规活动的信心,
Sqlserver:memory manager        提供有关sql内存使用量的信息,如连接到sql的用户数
Sqlserver:sqlerrors                        提供有关sql错误的信心如当前分配的锁结构的总数

系统性能对象
监视SQL性能还需要考虑系统方面一些关键因素,主要包括处理器,内存,磁盘。
常用CPU计数器
计数器:Processor-%processorTime        说明:监视CPU执行非闲置线程的所用时间     备注:持续在80%到90%状态就有可能表明需要升级cpu或许增加更多的处理器
计数器:Process-%processorTI,Mime[sqlservr instance]        说明:监视CPU执行sql server进程中的某个线程所用的时间        备注:查看sql server 在CPU中的使用率

磁盘
使用current disk queue length和%disktime 计数器的值来检测次盘子系统中的瓶颈。如果current disk queue length和%disktime 计数器的值一直很高,则考虑以下
        使用速度更快的磁盘驱动器
        将某些文件移植其他磁盘或服务器
        如果正在使用一个RAID一个整列,则在该整列中添加磁盘
常用的物理磁盘计数器
计数器:%disk time
说明:监视磁盘忙于读写活动所用时间的百分比
备注:如果physicaldisk:%disktime计数器的值较大{大于90%}应检查physicaidisk:current disk queue length 计数器,了解等待进行磁盘访问的系统请求的数量
计数器:AVG,disk
Queue length
说明:等待进行磁盘访问的平均系统请求的数量
备注:应该保持在不超过组成物理磁盘的轴数的两倍。大多数磁盘值有一个轴,但独立磁盘沉余整列(raid)设备通常有多个轴
        :Current disk queue length
              :等待运行磁盘访问的当前系统请求的数量
        :应该保持在不超过组成物理磁盘的轴数两倍

内存
常用的内存计数器
计数器                           说明                                      备 注
Memory –Available bytes        指示进程当前可用的内存字节数        如果此值低,表示计算机总内存不足或应用程序没有释放内存
Memory –pages/sec                        指示由于页错误而从磁盘取回的页数,或由于页数错误而写入磁盘以释放工作集的页数        
                                                                比率高表示分页过多
一般来说,只有当性能对象的值(平均值)长期处于高位状态时,才能说明该性能对象的对应资源出现瓶颈,偶尔出现高位不能说明系统系能问题,属于正常现象

设置监视器
大多数管理员往往是打开性能监视器,添加计数器,然后就开始分析。这样只能在实时模式下查看当前数据,事后数据就没有了。如果需要跟踪的时间较长且需要事后进行分析,应该捕捉系统性能对象的数据到日志中。
例:
使用性能监视器监视SQL server数据库TARIFFSMALLL的性能        
打开性能监视器添加计数器:
Sqlserver:databases data file{s}size tariffsmall
Sqlserver:databases log file{s} size tariffsmall
Sql server:buffer manager buffer cache hit ratio
添加后在执行指令查看


看来这硬盘OUT的行了,这机器基本上退伍。嘿嘿        
跟踪日志

停止跟踪,添加来源就可以看到跟踪结果


跟踪日志是以下程序

使用sql profiler 跟踪系统运行,优化。。。


嗯?、、
。。。。。。。。。。。。
1000次没完。。。。。。。
同志们。。。。。
卡巴死机了。。。。。。。。。。

Ok。关了重来
先查询call





 
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。