监视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