磁盘 I/O :

1 UNIX 资源监控( Windows 操作系统同理)中指标磁盘交换率( Disk rate ),如果该参数值一直很高,表明 I/O 有问题。可考虑更换更快的硬盘系统。

2 Windows 资源监控中,如果 Disk Time 和 Avg.Disk Queue Length 的值很高,而 Page Reads/sec 页面读取操作速率很低,则可能存在磁盘瓶径。

I/O 资源成为系统性能的瓶颈的征兆 :

*过高的磁盘利用率 (high disk utilization)

*太长的磁盘等待队列 (large disk queue length)

*等待磁盘 I/O 的时间所占的百分率太高 (large percentage of time waiting for disk I/O)

*太高的物理 I/O 速率 :large physical I/O rate(not sufficient in itself)

*过低的缓存命中率 (low buffer cache hit ratio(not sufficient in itself))

*太长的运行进程队列,但 CPU 却空闲 (large run queue with idle CPU)

4 .数据库服务器:

SQL Server 数据库:

1 SQLServer 资源监控中指标缓存点击率( Cache Hit Ratio ),该值越高越好。如果持续低于 80% ,应考虑增加内存。

2 如果 Full Scans/sec (全表扫描 / 秒)计数器显示的值比 1 或 2 高,则应分析你的查询以确定是否确实需要全表扫描,以及 SQL 查询是否可以被优化。

3 Number of Deadlocks/sec( 死锁的数量 / 秒 ) :死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为 0 。

4 Lock Requests/sec( 锁请求 / 秒 ) ,通过优化查询来减少读取次数,可以减少该计数器的值。

Oracle 数据库:

1 如果自由内存接近于 0 而且库快存或数据字典快存的命中率小于 0.90 ,那么需要增加 SHARED_POOL_SIZE 的大小。

快存(共享 SQL 区)和数据字典快存的命中率:

select(sum(pins-reloads))/sum(pins) from v$librarycache;

select(sum(gets-getmisses))/sum(gets) from v$rowcache;

自由内存: select * from v$sgastat where name= ’ free memory ’ ;

2 如果数据的缓存命中率小于 0.90 ,那么需要加大 DB_BLOCK_BUFFERS 参数的值(单位:块)。

缓冲区高速缓存命中率:

select name,value from v$sysstat where name in (’db block gets’,

‘ consistent gets’,'physical reads’) ;

Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))

3 如果日志缓冲区申请的值较大,则应加大 LOG_BUFFER 参数的值。

日志缓冲区的申请情况 :

select name,value from v$sysstat where name = ‘redo log space requests’ ;

4 如果内存排序命中率小于 0.95 ,则应加大 SORT_AREA_SIZE 以避免磁盘排序 。

内存排序命中率 :

select round((100*b.value)/decode((a.value+b.value), 0, 1, (a.value+b.value)), 2)from v$sysstat a, v$sysstat b where a.name=’sorts (disk)’ and b.name=’sorts (memory)’

注:上述 SQL Server 和 Oracle 数据库分析,只是一些简单、基本的分析,特别是 Oracle 数据库的分析和优化,是一门专门的技术,进一步的分析可查相关资料。
经验表明,瓶颈很容易发生在如下地方:数据库连接与队列中;应用服务器的程序代码中;应用服务器和Web服务器硬件上;网络和TCP配置中。实际中可以着力对这些环节进行监控。