Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120449
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 205
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-12 15:22
个人简介

没有挫败,只有暂未成功而已。

文章分类

全部博文(28)

文章存档

2018年(28)

我的朋友

分类: 系统运维

2018-09-29 22:55:08

UNIX/Linux通用性能优化方法

优化方法总结:做系统性能优化,要遵循一些思想方法论。没有思想指导而茫然的动手操作,就如同黑夜里没有路灯而前进一样。针对一个应用系统的优化,有一些比较标准的流程,具体如下:

1. 获取基准数据

2. 压力测试和性能监视

3. 发现瓶颈所在

4. 优化,解决问题所在。

5. 重复(从第二个步骤开始)

 

UNIX/Linux通用性能监控:vmstat

接下来将讨论在所有UNIX分发版本(SolarisHP-UXLinuxAIX)上可用的UNIX通用工具。虽然有些输出内容根据分发版本不同而有所变化,但大多数标志适用于所有UNIX系统。这些标志可帮助动态地收集信息。

首先讨论vmstatvmstat报告关于进程、内存、分页、被阻塞的I/O及总体CPU活动的信息。虽然这个工具与虚拟内存相关(vmstat中的vm),但在主机上运行vmstat可以快速而准确地确定服务器上发生的情况。

在遇到“为什么系统这么慢?”这种情况时,需要快速进行分析,以确定可能的瓶颈位置。vmstat是开始进行此工作的最好工具。

使用以下语法运行vmstat工具:

usage: vmstat [interval(s) [count]]

 

[root@dbsnc ~]# vmstat 1 10

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 2  0   9456 178272      0 1115180    0    0    88    25  153  200  1  0 98  1  0

 1  0   9456 178260      0 1115212    0    0     0     0  280  425  0  0 100  0  0

 0  0   9456 178228      0 1115272    0    0     0     0  427  610  1  0 99  0  0

 0  0   9456 178228      0 1115272    0    0     0    44  229  358  0  0 100  0  0

 1  0   9452 177980      0 1115276   32    0    32    14  538  898  0  1 99  0  0

 1  0   9452 177980      0 1115276    0    0     0     0  228  357  0  0 100  0  0

 1  0   9452 177980      0 1115276    0    0     0    32  340  531  0  0 100  0  0

 1  0   9452 177732      0 1115276    0    0     0     0  380  542  1  0 99  0  0

 0  0   9452 177732      0 1115276    0    0     0     0  438  637  0  0 100  0  0

 1  0   9452 177732      0 1115276    0    0     0    32  467  658  0  0 100  0  0

 

procs 部分

r 表示运行队列(就是说多少个进程真的分配到CPU),上面测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程。

 

memory 部分

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free 空闲的物理内存的大小。

buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存。

cache 直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

 

swap 部分

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)   的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0bibo一般都要接近0,不然就是IO过于频繁,需要调整。

 

system 部分

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apachenginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

 

cpu 部分

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

 

 

Linux通用性能监控:

sarUNIX System Activity Reporting工具。此命令已经成为了UNIX世界中永远存在的一员。此命令实际上就是将选择作为其标志的积累活动的内容写入到标准输出。例如使用-u标志报告CPU统计数据。

此命令的语法为:

[root@dbsnc ~]# sar --help

用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]

选项:

[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]

[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]

[ -I { <中断> [,...] | SUM | ALL | XALL } ] [ -P { [,...] | ALL } ]

[ -m { <关键词> [,...] | ALL } ] [ -n { <关键词> [,...] | ALL } ]

[ -j { ID | LABEL | PATH | UUID | ... } ]

[ -f [ <文件名> ] | -o [ <文件名> ] | -[0-9]+ ]

[ -i <间隔> ] [ -s [ <::> ] ] [ -e [ <::> ] ]

 

 

sar命令的选项很多,下面只列出常用选项:

? -uCPU利用率

? -d:硬盘使用报告

? -b:缓冲区使用情况

? -w:系统交换活动。

 

[root@dbsnc ~]# sar -u

Linux 3.10.0-327.el7.x86_64 (dbsnc.local)     2018年0929 _x86_64_ (4 CPU)

 

14时1833       LINUX RESTART

 

14时2001     CPU     %user     %nice   %system   %iowait    %steal     %idle

14时3001     all      5.50      0.00      0.66      4.16      0.00     89.68

14时4001     all      0.71      0.00      0.19      0.13      0.00     98.97

14时5001     all      0.69      0.00      0.17      0.02      0.00     99.11

15时0001     all      0.63      0.00      0.17      0.01      0.00     99.19

15时1001     all      0.62      0.00      0.16      0.01      0.00     99.20

15时2001     all      0.87      0.01      0.24      0.09      0.00     98.79

 

? %usr cpu处在用户模式下时间

? %sys cpu处在系统模式下时间

? %wio cpu等待输入,输出完成时间

? %idle cpu空闲时间

 

 

[root@dbsnc ~]# sar -d 5

Linux 3.10.0-327.el7.x86_64 (dbsnc.local)   2018年0929     _x86_64_  (4 CPU)

 

17时3453       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util

17时3458    dev8-0      1.59      0.00     25.50     16.00      0.00      0.12      0.12      0.02

17时3458   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

17时3458  dev253-0      1.59      0.00     25.50     16.00      0.00      0.12      0.12      0.02

17时3458  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

? tps:平均每秒的读写请求合计次数

? rtps:平均每秒的读请求合计次数

? wtps:平均每秒的写请求合计次数

? bread/s:平均每秒从磁盘(或其它块设备)向系统buffer读的物理块数

? bwrtn/s:平均每秒从系统buffer向磁盘(或其它块设备)写的物理块数

 

[root@dbsnc ~]# sar -b

Linux 3.10.0-327.el7.x86_64 (dbsnc.local)     2018年0929 _x86_64_ (4 CPU)

 

14时1833       LINUX RESTART

 

14时2001       tps      rtps      wtps   bread/s   bwrtn/s

14时3001    168.97     91.24     77.73   7753.75   1047.43

14时4001      8.23      2.29      5.93    170.22    203.92

14时5001      4.34      0.57      3.77     40.42     52.12

15时0001      2.71      0.07      2.64      1.11     35.46

15时1001      2.93      0.31      2.62     24.83     34.95

15时2001     16.41     11.96      4.45    457.27    243.47

 

? rd_sec/s:每秒读的块数。每块512个字节

? wr_sec/s:每秒写的块数。每块512个字节

? avgrq-sz:平均每次读写操作的数量大小

? avgqu-szI/O队列的平均等待时间长度,单位毫秒

? %util:设备控制器繁忙百分比

 

 

CPU瓶颈表现在几个方面:

? 所有CPU都饱和

系统所有处理器都繁忙。根据vmstatsar的报告,一般计算用户CPU时间和系统CPU时间。CPU利用率持续高于80%~85%之上就认为该环境的CPU资源使用过高

? 单个CPU饱和

系统在一个处理器上的负载达到了饱和,但其它处理器却部分或完全空闲。这通常发生在系统中只有一个很忙的应用程序在运行。虽然还有可用的CPU处理能力,

系统却无法使用,应用程序或语句的速度取决于这一个处理器内核的处理能力

? CPU异常空闲

如果运行环境的CPU资源突然出现使用率过低的情况(相比较正常情况而言),说明运行的应用可能也有性能问题,导致不能充分利用CPU资源

 

 

Linux通用性能监控:内存不足

内存引起的性能问题,一般来说,现象比较明显,处理起来也比较简单。内存资源常见的问题为内存资源不足。内存资源不足有两种,一是整体操作系统内存资源不足,无法满足新的内存分配需求;二是已分配给进程的内存资源不足,无法有效缓存数据降低I/O。当操作系统内存资源不足时,会发生Paging Space(Swap空间)使用率过高的现象。UNIX使用虚拟内存技术,来分配和管理操作系统内存。这种管理方式

将虚拟内存分为Page。虚拟内存包括两部分,一部分是物理内存Page,另一部分是存储硬盘的映射Page。这两种类型Page的访问和运行速度是完全不一样的,相当于内存和硬盘的响应差别。简而言之,当进程使用的大量内存Page是存储硬盘映射时,运行速度会显著地变慢。观察内存资源的命令有vmstatpssvmon等等。目的是观察系统内存资源是否有足够剩余,观察进程使用的内存资源统计数据。

 

vmstat输出关注:fre-表示当前页面可用数量,pi/po(si/so)-页面换入换出的数量。内存资源足够的一个现象是:fre列为较合理值并且pi/po(si/sw)的值很小或者为0

 

Vmstat如果发现系统内存异常,可以通过pssvmon(特定于AIX)查看内存:

 

 

可以用ps v选项或svmon -p选项查看特定进程的内存占用:

[root@dbsnc ~]# ps v

  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND

 1264 tty1     Ss+    0:00      1    30 109997  840  0.0 /sbin/agetty --noclear tty1 linux

 3870 pts/0    Ss     0:00      1   882 115281 2812  0.1 -bash

 5010 pts/0    R+     0:00      0    89 137282 1280  0.0 ps v

 

ORACLE进程内存文本段,数据段和RSS内存等构成。并且,多次运行命令查看进程会随着工作量负载内存分配量会变化:

 

 

Linux通用性能监控:I/O瓶颈

操作系统磁盘I/O的一些性能指标包括:

? 吞吐量

硬盘传输数据流的速度,传输数据为读出和写入数据的和。单位一般为Kbps, MB/s等。

? 每秒I/O(IOPS)

一次磁盘的连续读或者连续写,称为一次I/O。那么磁盘的IOPS就是每秒中磁盘连续读和连续写的和。

? 等待时间

指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果I/O请求持续超出磁盘的处理能力,那么来不及处理的请求将在队列中排队等候。

注:一个内存地址的操作大概会消耗500~600CPU时钟周期;一个磁盘地址操作,大概需要20,000,000CPU时钟周期,相当于40,000次内存操作。很多时候,数据库系统的瓶颈,往往出现在I/O层面。传统的基于磁盘的RDBMS中如何识别I/O的问题,就变得很重要。

 

主要关注sar -d命令几个列的数值即可,分别是:

? %busy:如果磁盘使用率长时间达到75%80%, 说明该磁盘较忙

? avwait:磁盘读或写操作等待执行的平均时间(单位为毫秒)

? avserv:磁盘读或写操作所执行的平均时间(单位为毫秒)

avque数值过高时,可能表示多个进程正在竞争使用该磁盘。高avserv值表示磁盘的速度较慢。

解决I/O性能问题需要磁盘、存储等方面的性能优化。主要考虑以下事项:

? 尽可能减少不必要的I/O操作

在保证完成业务操作的前提下,尽可能将应用的I/O操作降低到最低水平,如合理使用索引技术

? I/O分布均衡

尽量将I/O的请求合理地分布在所用到的所有物理磁盘上。

? RAID

使用RAID时,尽量使应用程序I/O等于条带尺寸或者为条带尺寸的倍数。并选取合适的RAID方式,如RAID10RAID5等等。

? I/O缓存

应用I/O缓存技术,减少直接对磁盘的I/O数量。可以在应用程序层面进行缓存处理,也可以在文件系统层面进行缓存设置(参考vmtune说明)。

? 数据CACHE

利用内存读写访问比磁盘访问优越的特点,将应用程序读写频繁的文件或者数据,放置在内存中进行cache,减少磁盘I/O操作,提高整体性能。

 

 

Linux通用性能监控:网络问题

在一些基于网络通信的客户机/服务器系统场景下,需要注意网络引起的性能问题。常见的网络性能问题主要表现在传输不稳定、丢包或者网卡传输速率达到饱和,造成网络消息排队等等。

UNIX/Linux系统上提供了工具来进行网络监控。一些用来实时诊断,另外一些可以显示网络数据的历史趋势和分析数据。常用的判断网络性能问题的命令有pingnetstat

? ping命令主要用来检查网络的连通性

ping的结果可以检查网络的质量、丢包率等。time值可以用来判断网络传送延时情况,局域网中(大多数为万兆卡光纤连接),time值应该为0

通常在UNIXLinuxping加选项-s,指定包大小,通常建议65500

通常在Windowsping加选项-l,指定包大小,通常建议65500

 

UNIXLinux指定大包ping

[root@dbsnc ~]# ping 192.168.10.65 -s 65500

PING 192.168.10.65 (192.168.10.65) 65500(65528) bytes of data.

65508 bytes from 192.168.10.65: icmp_seq=1 ttl=128 time=2.86 ms

65508 bytes from 192.168.10.65: icmp_seq=2 ttl=128 time=2.29 ms

65508 bytes from 192.168.10.65: icmp_seq=3 ttl=128 time=2.98 ms

65508 bytes from 192.168.10.65: icmp_seq=4 ttl=128 time=3.30 ms

 

Windows指定大包ping

C:\Users\weiju>ping -l 65500 192.168.10.222

 

正在 Ping 192.168.10.222 具有 65500 字节的数据:

来自 192.168.10.222 的回复: 字节=65500 时间=1ms TTL=64

来自 192.168.10.222 的回复: 字节=65500 时间=2ms TTL=64

来自 192.168.10.222 的回复: 字节=65500 时间=4ms TTL=64

来自 192.168.10.222 的回复: 字节=65500 时间=2ms TTL=64

 

 

netstat对网络运行进行统计观察。netstat常用的参数有-in/-an/等等。

使用-in选项时

? Ierrs表示接收失败的总包数

? Oerrs表示发送失败的总包数

? 检查Ierrs/Ipkts超过1%Oerrs/Opkts超过1%时,可能网络不稳定当使用-an选项时

? Recv-Q表示接收网卡队列的排队情况

? Send-Q表示网卡发送队列的排队情况

? state表示网络连接的状态,一般为LISTENESTABLISH。出现类似LAST_ACKFIN_WAIT之类的状态时说明TCP连接质量比较差,如果该TCP连接是应用程序所使用,那么需要引起注意

 

 

Linux通用性能监控:nmon

nmon工具可以为AIXLinux性能专家提供监视和分析性能数据的功能,其中包括:

? CPU使用率

? 内存使用情况

? 内核统计信息和运行队列信息

? 磁盘I/O速度、传输和读/写比率

? 文件系统中的可用空间

? 网络I/O速度、传输和读/写比率

? 页面空间和页面速度

? 消耗资源最多的进程

? 计算机详细信息和资源

? 异步I/O,仅适用于AIX

? 网络文件系统(NFS)

 

? 交互式的方式运行

运行该工具,阅读该文件前页中的相关提示。并使用单键命令来查看所需要的数据。例如,

要获取CPU、内存和磁盘统计信息,启动nmon并输入:cmd

? 附加帮助信息

要获取附加的帮助信息,可以尝试下列方法:

– 输入nmon -?命令以获取简短的详细信息。

– 输入nmon -h命令以获取完整的详细信息。

– 阅读自述文件。

? 将数据捕获到文件

运行带-f标志的nmon命令按时间间隔捕获数据快照:

-T标志的命令捕获消耗资源最多的进程。这两行命令都将在-m指定的目录中创建输出文件,其名称为:_date_time.nmon

 

nmon_analyser工具可以帮助对通过nmon性能工具捕获的性能数据进行分析。将输出中的每个主要部分自动地生成相应的图形。完成下列任务:

? 以电子表格的形式查看相应的数据

? 消除错误的数据

? 生成向客户进行演示的图形

工具将对nmon数据进行分析以生成下列信息:

? 热点分析维度的加权平均值的计算

? 用处理器与收集间隔的比值表示的CPU使用率的分布情况

? 每日各时段的系统总数据速率,识别I/O子系统和SAN(存储局域网络)瓶颈

? 分析内存使用率,以显示计算性和非计算性页面之间的差异

? 每个网络适配器的每日各时段总数据速率

? 显示平均CPU和内存使用率的TOP进程部分汇总数据

 

获取该工具nmon_analyzer

https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon_analyser

获取nmon for AIX

https://www.ibm.com/developerworks/community/wikis/home?lang=en#/wiki/Power%20Systems/page/nmon

获取nmon for Linuxnmon.sourceforge.net

 

 

ORACLE性能:AWR 报表

必需阅读的AWR报表重要内容列表:

? AWR报表概览

? 主机和实例的CPU使用情况

? 主机内存使用情况

? 主机I/O性能情况

? 操作性能统计信息

? 分析Top 5 Timed Events

? 查看和顶级等待事件有关的Load profile内容

 

 

AWR 报表:报告概览

? 数据库信息:数据库名,DBID,实例名,实例号,版本信息,是否为RAC

? 主机环境:数据库运行的主机环境信息

? AWR报告快照信息:包括报告的快照跨度,挂钟时间和数据库时间,会话数等

数据库负载:平均活动会话数 =DB time/Elapsed=1695.61/30.14=56.27

1,695.61/30.14

DB Name

DB Id

Instance

Inst num

Startup Time

Release

RAC

DBSVC

XXXXXXXCCC

DBSVC1

3

28-Mar-18 23:03

11.2.0.4.0

YES

Host Name

Platform

CPUs

Cores

Sockets

Memory (GB)

SVC1

Linux x86 64-bit

240

120

8

2019.48

Snap Id

Snap Time

Sessions

Cursors/Session

Instances

Begin Snap:

45483

19-Sep-18 02:00:21

14007

2.2

3

End Snap:

45484

19-Sep-18 02:30:29

14008

2.2

3

Elapsed:

 

30.14 (mins)

 

 

 

DB Time:

 

1,695.61 (mins)

 

 

 

 

 

 

AWR 报表:主机和实例的CPU

? 从操作系统维度统计CPU的时间片统计信息

– 用户占用

– 系统占用

I/O等待

– 空闲

? 从实例维度统计CPU使用率

– 实例消耗所有CPU比例,占OS维度消CPU比例和DB Time中等待CPU资源时间比例

Host CPU

CPUs

Cores

Sockets

Load Average Begin

Load Average End

%User

%System

%WIO

%Idle

240

120

8

19.69

27.13

5.7

3.3

1.5

90.4

Instance CPU

%Total CPU

%Busy CPU

%DB time waiting for CPU (Resource Manager)

6.9

72.1

0.0

 

 

AWR 报表:主机内存使用

实例已分配内存,包括系统全局区,程序全局区(SQL工作区和堆栈空间、用户全局区等);实例已分配系统内存所占比例。

注:程序全局区中并不包括创建服务器进程数据段之外的其他内存段

Memory Statistics

Begin

End

Host Mem (MB):

2,067,942.6

2,067,942.6

SGA use (MB):

805,858.3

805,858.3

PGA use (MB):

48,756.5

52,354.2

% Host Mem used for SGA+PGA:

41.33

41.50

Cache Sizes

Begin

End

Buffer Cache:

604,160M

604,160M

Std Block Size:

8K

Shared Pool Size:

93,697M

93,701M

Log Buffer:

556,692K

 

 

 AWR 报表:主机I/O性能

读,写(readsWrites)频繁的表空间的Av Rd(ms)Av Buf Wt(ms)小于20ms说明I/O设备性能良好。超过此阀值数据库整体性能可能产生明下降。

Tablespace IO Stats

  • ordered by IOs (Reads + Writes) desc

Tablespace

Reads

Av Rds/s

Av Rd(ms)

Av Blks/Rd

1-bk Rds/s

Av 1-bk Rd(ms)

Writes

Writes avg/s

Av Writes(ms)

Buffer Waits

Av Buf Wt(ms)

DDD_SVC_02

5,406,702

2,990

0.91

1.93

1,384,091

1958.53

1

765

2.98

9,329,239

0.89

DDD_SVC_01

620,657

343

0.83

1.75

1,198

323.42

1

1

0.29

2,277

67.51

DDD_SSD_LOCAL

254,168

141

1.25

1.00

709

140.55

1

0

0.92

1,041

2.78

UNDOTBS3

279

0

1.04

1.00

27,783

0.15

1

15

1.30

738

28.94

TEMP_SVC

6,151

3

0.00

16.58

11,624

0.01

0

6

0.00

0

0.00

DDD_PARA

1,993

1

1.18

1.05

8,322

1.09

1

5

0.90

1,535

17.53

SYSTEM

1,807

1

1.43

2.40

183

0.34

2

0

0.60

1

0.00

SYSAUX

717

0

2.05

1.00

673

0.40

2

0

0.94

0

0.00

WORK_A

140

0

0.00

1.00

838

0.08

0

0

0.78

0

0.00

UNDOTBS1

284

0

1.37

1.00

24

0.16

1

0

0.00

5

0.00

 

 

AWR 报表:操作性能统计信息

按统计信息类型排序(CPU使用,虚拟内存,硬件配置)用于回顾快照期间操作系统的性能数据概况

Operating System Statistics

·        *TIME statistic values are diffed. All others display actual values. End Value is displayed if different

·        ordered by statistic type (CPU Use, Virtual Memory, Hardware Config), Name

Statistic

Value

End Value

BUSY_TIME

4,110,054

 

IDLE_TIME

38,649,973

 

IOWAIT_TIME

634,433

 

NICE_TIME

0

 

SYS_TIME

1,405,709

 

USER_TIME

2,448,816

 

LOAD

20

27

PHYSICAL_MEMORY_BYTES

2,168,394,989,568

 

NUM_CPUS

240

 

NUM_CPU_CORES

120

 

NUM_CPU_SOCKETS

8

 

GLOBAL_RECEIVE_SIZE_MAX

4,194,304

 

GLOBAL_SEND_SIZE_MAX

1,048,576

 

TCP_RECEIVE_SIZE_DEFAULT

87,380

 

TCP_RECEIVE_SIZE_MAX

4,194,304

 

TCP_RECEIVE_SIZE_MIN

4,096

 

TCP_SEND_SIZE_DEFAULT

16,384

 

TCP_SEND_SIZE_MAX

4,194,304

 

TCP_SEND_SIZE_MIN

4,096

 

 

 

 

 AWR 报表: Top 10 Foreground Events by Total Wait Time

分析Top 10 Foreground Events by Total Wait Time的意义:

? 评估等待事件(包括DB CPUCPU Time部分)对性能产生的影响程度

? 评估已定义的问题域发生在数据库环境内部(整个服务器环境)或外部(服务器环境之外)

如确定问题域在数据库环境内部,通过分析等待事件快速定位问题诊断方向:

? DB CPUCPU Time评估主机的CPU使用率

? 确定等待事件优先域,结合My Oracle Support给出的诊断方法进一步分析

阅读AWR报告首先关注Wait Class,优先确认是否有”Concurrency”类型的等待事件。如果有类型为“Concurrency”的等待事件,并且数据库不空闲时通常就可以直接确定数据库有性能问题。否则,按Wait Class进行分类分析,使确定数据库是否存在性能问题变得相对容易,此例中,存在着ClusterCommitApplication这三类资源的等待事件。

Top 10 Foreground Events by Total Wait Time

Event

Waits

Total Wait Time (sec)

Wait Avg(ms)

% DB time

Wait Class

DB CPU

 

25.7K

 

25.3

 

gc buffer busy acquire

7,132,439

6762.1

1

6.6

Cluster

log file sync

600,395

6076

10

6.0

Commit

db file sequential read

3,941,975

4426.1

1

4.4

User I/O

gc cr multi block request

2,122,604

2110.4

1

2.1

Cluster

gc cr grant 2-way

2,317,902

1618.3

1

1.6

Cluster

read by other session

1,219,631

1347.9

1

1.3

User I/O

db file scattered read

1,902,151

1337.9

1

1.3

User I/O

gc current block 2-way

1,233,737

967

1

1.0

Cluster

library cache: mutex X

1,001,569

707.8

1

.7

Concurrency

 

 

接下来还要结合系统负载情况分析。单纯分析等待事件是没有太大意义的。首先,通过平均活动会话数为:DB Time/Elapsed,说明一小时内约为56进程一直在忙,说明数据库不空闲。从Wait Class中有”Concurrency”类型的等待事件。可以直接确定数据库有性能问题。顺理成章地,减少latch: cache buffers chains等事件的时间就成了优化要解决的重点方向。

注:在并行指令流水CPU的环境中,平均活动会话数可能大大超过物理CPU数量。

 

 

AWR报表:确定问题域分析示例

集群数据库实例间会互相产生影响,所以,还需要另外实例同一时间的AWR报表来分析,确定:

? 其他实例是否在同时段也呈现相同的等待事件和类似的计量

? 等待事件的诊断方法很可能需要DBA关注其他实例同时估的报告

 

 

经分析:平均活动会话数为56,数据库有240CPU,资源未出现瓶颈,但数据库不空闲。Wait Class没有Concurrency类型的等待,只有ClusterCommitApplication这三类资源的等待事件。 Cluster等待占11%DB Time为首要关注的事件,而Commit6%,可以忽视。仅从DBTime的比例还不能确定数据库是否存在性能问题。

 

 

通过上述的分析,得到了分析Top 10 Timed Events必须要明确获得的答案:性能问题是否在数据库环境中?

答案是:性能问题在数据库环境中。那么,确定数据库有性能问题的依据就成为要首要优化的性能问题。但是,在这个例子中,存在两个需要去解决的问题,一类是Cluster,另一类是Commit。这是两类资源的等待事件,真正的原因还待分析。但至少确定了两个诊断重点方向。这两类等待是否互相影响?哪类是更重要的问题?重要的性能问题要更优先解决!是否能从确定数据库有性能问题的多类等待中找出重点,减少问题诊断的工作量和时间,减少优化工作需要投入的成本?这些问题是接下来要重点思考的。等待事件的定义:某种场景下进程必须等待要操作的某类资源准备就绪。按OWI知识体系,可以了解ClusterCommit类的等待事件是在什么场景下等待哪类资源就绪。根据计算机体系统结构和对设备性能期望的不同,解决问题优先顺序是:并行处理(Oracle产品定位)、内存(速度最快期望最高)、磁盘I/O(DB的基础资源)、应用(直接反馈性能问题)、网络(请求送达或已处理数据传递)Other(不太好确定,视具体情形)

阅读(2336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~