CPU /磁盘I/O /内存

南笙酒味 提交于 2020-02-29 18:19:10
oracle的除了本身的性能外,另外系统的性能对oracle的运行也很关键,主要是CPU,磁盘I/O,内存,网络情况等。

CPU

一、cpu的检查
sar命令的使用:
ossdb2: sar
sar: 0551-201 Cannot open /var/adm/sa/sa11.
sar: 0551-213 Try running /usr/lib/sa/sa1 <increment> <number>
出现如上所述错误信息说明系统没有建立收集sar报告数据的数据收集程序,按照如下所述的步骤
建立sar数据文件:
1.以root用户登陆后输入命令: su - adm ;
2.输入命令: crontab -e
3.移掉下面这些行前面的#(注释符)然后退出保存 :
#0 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 &
#0 * * * 0,6 /usr/lib/sa/sa1 &
#0 18-7 * * 1-5 /usr/lib/sa/sa1 &
#5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaqvm &
4.编辑/etc/rc文件,移掉下面一行前面的#(注释符):
#/bin/su - adm -c /usr/lib/sa/sadc /usr/adm/sa/sa `date +%id`
5.重新启动系统,这将打开sar命令显示数据需要的数据收集程序。

重启系统后:
ossdb2:/#sar -u 10 5 --表示每隔10秒出一条记录,共5次
AIX ossdb2 3 5 0001F101D600    08/11/11
System configuration: lcpu=4  mode=Capped
16:06:09    %usr    %sys    %wio   %idle   physc
16:06:19       0       0       0     100    2.00
16:06:29       0       0       0     100    2.00
16:06:39       0       0       0     100    2.00
16:06:49       0       0       0     100    2.00
16:06:59       0       0       0     100    2.00
Average        0       0       0     100    2.00
%usr:cpu用于用户进程的百分比
%sys:cpu用于系统进程的百分比
%wio:cpu用于等待输入输出的百分比
%idle:cpu空闲的百分比
physc:表示该分区分配了2g内存,一个cpu为2g内存(lparstat -i命令可查看当前这个分区实际和所配置的情况(Entitled Capacity))
Average:是前面几次的平均值

二、影响CPU性能的原因
1、执行队列的长度
查看执行队列长度
ossdb2:/#uptime
  04:27PM   up 32 mins,  1 user,  load average: 0.00, 0.00, 0.00
 “load”用来表示运行队列
 
ossdb2:/#vmstat
System configuration: lcpu=4 mem=7936MB
kthr    memory              page              faults        cpu
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
 1  1 213520 1709438   0   0   0   0    0   0   7  783  68  0  0 99  0
r表示运行队列大小;对于每一个CPU来说运行队列不要超过3。

2、进程使用的cpu
可使用ps命令
ossdb2:ps -ef | grep f60
uid pid ppid c stime tty time cmd
c:CPU利用率,以整数表示

查看进程占用cpu情况
ossdb2:/#ps aux
USER        PID %CPU %MEM   SZ  RSS    TTY STAT    STIME  TIME COMMAND
root       8196 12.9  0.0  384  384      - A    15:54:54 666:29 wait
root      57372 12.8  0.0  384  384      - A    15:54:54 662:00 wait
root      61470 12.1  0.0  384  384      - A    15:54:54 626:21 wait
root      53274 12.1  0.0  384  384      - A    15:54:54 622:27 wait

3、发现高CPU用户
语句1:
SELECT n.username, n.sid, s.value,t.name
  FROM v$sesstat s, v$statname t, v$session n
 WHERE s.statistic# = t.statistic#
   AND s.sid = n.sid
   AND t.name = 'CPU used by this session'
 ORDER BY s.value DESC
USERNAME                              SID      VALUE NAME
------------------------------ ---------- ---------- ----------------------------------------------------------------
GWM                                   148     193233 CPU used by this session
GWM                                   127     159061 CPU used by this session
SYSMAN                                137      36663 CPU used by this session
DBSNMP                                142       6068 CPU used by this session
SYSMAN                                138       3589 CPU used by this session
LTWEBGIS                              110       1559 CPU used by this session
                                      164       1354 CPU used by this session
                                      161        809 CPU used by this session
GWM                                   125        296 CPU used by this session
LTWEBGIS                               94        237 CPU used by this session
                                      162        184 CPU used by this session
SYSMAN                                136        164 CPU used by this session
DBSNMP                                144         79 CPU used by this session
                                      147         50 CPU used by this session
LTWEBGIS                              107         23 CPU used by this session
LTWEBGIS                               93         19 CPU used by this session
LTWEBGIS                              109         18 CPU used by this session
LTWEBGIS                              120         17 CPU used by this session
LTWEBGIS                              133         17 CPU used by this session
LTWEBGIS                              146         15 CPU used by this session

--查找用户进程已经为INACTIVE的进程占用的cpu情况
SELECT n.username, n.sid, s.value,t.name,n.status,n.server
  FROM v$sesstat s, v$statname t, v$session n
 WHERE s.statistic# = t.statistic#
   AND s.sid = n.sid
   AND t.name = 'CPU used by this session'
   AND n.status='INACTIVE'
 ORDER BY s.value DESC;
USERNAME                              SID      VALUE NAME                                                             STATUS   SERVER
------------------------------ ---------- ---------- ---------------------------------------------------------------- -------- ---------
GWM                                   148     193233 CPU used by this session                                         INACTIVE DEDICATED
GWM                                   127     159061 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                               96       6814 CPU used by this session                                         INACTIVE DEDICATED
DBSNMP                                142       5948 CPU used by this session                                         INACTIVE DEDICATED
SYSMAN                                138       3541 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              110       1559 CPU used by this session                                         INACTIVE DEDICATED
GWM                                   125        296 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                               94        227 CPU used by this session                                         INACTIVE DEDICATED
SYSMAN                                136        164 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              156         64 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              107         23 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                               93         19 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              133         17 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              120         17 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              146         15 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              118         14 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              109         14 CPU used by this session                                         INACTIVE DEDICATED
SYSMAN                                129         13 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              100          9 CPU used by this session                                         INACTIVE DEDICATED
LTWEBGIS                              111          6 CPU used by this session                                         INACTIVE DEDICATED

用户进程为INACTIVE,仍然保持连结,只不过当前没有活动而已,仍会占用资源。释放该用户进程的资源,用如下语句杀掉该进程:
alter system kill session '148,984';

进行杀掉后,其还是占用cpu。
select * from v$session where sid=148
执行:alter system kill session '148,984' immediate;

会话级的CPU使用:
v$sesstat视图上的statistic#字段值不是固定不变的,v$sesstat视图上的statistic#字段值代表的含义可以查询v$statname视图的name字段。
语句2:
SELECT *
  FROM v$sesstat s
 WHERE s.statistic# = (SELECT statistic# FROM v$statname
 WHERE name = 'CPU used by this session')
 ORDER BY s.value DESC;
其实语句1和语句2表达意思是一样的。

4、CPU的作用
总的CPU=分析使用的CPU+递归使用的CPU+其他使用的CPU
SELECT * FROM v$sysstat WHERE name IN ('CPU used by this session','recursive cpu usage','parse time cpu')
STATISTIC# NAME                                                                  CLASS      VALUE    STAT_ID
---------- ---------------------------------------------------------------- ---------- ---------- ----------
         8 recursive cpu usage                                                       1     266738 4009879262
        12 CPU used by this session                                                  1     449129   24469293
       328 parse time cpu                                                           64      40512  206905303
v$sysstat视图中的CPU used by this session是指所有会话使用的CPU之和。

分析的CPU使用:
SELECT name,value/100 "cpu时间(秒)" FROM v$sysstat WHERE name LIKE '%CPU%';--总CPU
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
CPU used when call started                                             4634.95
CPU used by this session                                               4899.11 --总CPU

SELECT name,value FROM v$sysstat WHERE name LIKE '%parse%';
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse time cpu                                                         44902  --分析用的CPU
parse time elapsed                                                     56269
parse count (total)                                                    30106348
parse count (hard)                                                     162503

确定分析时的CPU使用:
SELECT a.value 总CPU, b.value 总分析次数, c.value 硬分析次数, d.value 分析时间
  FROM v$sysstat a, v$sysstat b, v$sysstat c, v$sysstat d
 WHERE a.name = 'CPU used by this session'
   AND b.name = 'parse count (total)'
   AND c.name = 'parse count (hard)'
   AND d.name = 'parse time cpu';

一般情况下,分析占用的cpu很少,若是占用的比较多,
1)查看是否有大量硬分析,修改为绑定变量,减少硬分析;
2)共享池内存是否过大,如果内存过大会导致库高速缓存中存在大量无用的sql,加长了分析时间
3)库高速缓存的闩争用情况
4)表长时间未统计,在分析是直接进行统计导致分析时间变长

递归的CPU使用:
主要用于数据字典查找及PL/SQL程序。
SELECT * FROM v$sysstat WHERE name IN ('CPU used by this session','recursive cpu usage');
STATISTIC# NAME                                                                  CLASS      VALUE    STAT_ID
---------- ---------------------------------------------------------------- ---------- ---------- ----------
         8 recursive cpu usage                                                       1     295028 4009879262
        12 CPU used by this session                                                  1     490050   24469293
递归CPU占用的CPU比例若很大,要确保分配的共享池内存足够。

内存
用vmstat监控内存使用。vmstat所带参数用man vmstat查看
ossdb2:/#vmstat
System configuration: lcpu=4 mem=7936MB
kthr    memory              page              faults        cpu
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
 1  1 213520 1709438   0   0   0   0    0   0   7  783  68  0  0 99  0
Procs
r: 运行队列中的进程数,在一个稳定的工作量下,应该少于5  
b: 等待队列中的进程数(等待I/O),,通常情况下是接近0的.  

memory
avm:活动虚拟页面,在进程运行中分配到工作段的页面空间数
fre:空闲列表的数量.一般不少于120,当fre少于120时,系统开始自动的kill进程去释放

page
re:回收的页面
pi:进入页面数(k表示)(一般不大于5)
po:出页面数(k表示)
fr:空余的页面数(k表示)   
sr:通过页面置换算法搜索到的页面数  
cy: 页面置换算法的时钟频率

faults
in:设备中断   
sy:系统中断  
cs 内核进程前后交换中断

CPU
cs:用户进程使用的时间
us: CPU 使用时间
sy: CPU 系统使用时间
id: 闲置时间
wa: 等待i/o的时间
一般us+sy 在单用户系统中不大于90,在多用户系统中不大于80.wa时间一般不大于40.
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。

I/O
度量磁盘输入输出性能
sar -d 5 5 可用于查看磁盘情况
ossdb2:/#sar -d 5 1 --每隔5秒 输出一次
AIX ossdb2 3 5 0001F101D600    08/12/11
System configuration: lcpu=4 drives=13  mode=Capped
15:19:06     device    %busy    avque    r+w/s    Kbs/s   avwait   avserv
15:19:11     hdisk0      0      0.0        0        0      0.0      0.0
             hdisk1      0      0.0        0        0      0.0      0.0
               dac0      0      0.0        0        0      0.0      0.0
            dac0utm      0      0.0        0        0      0.0      0.0
               dac2      0      0.0        0        0      0.0      0.0
            dac2utm      0      0.0        0        0      0.0      0.0
             hdisk2      0      0.0        0        0      0.0      0.0
             hdisk3      0      0.0        0        0      0.0      0.0
             hdisk4      0      0.0        0        0      0.0      0.0
             hdisk5      0      0.0        0        0      0.0      0.0
             hdisk6      0      0.0        0        0      0.0      0.0
             hdisk7      0      0.0        0        0      0.0      0.0
                cd0      0      0.0        0        0      0.0      0.0      
%busy:设备忙于传输请求百分比;
avque:队列值,一般在峰值情况下也不超过2;
r+w/s:每秒磁盘读写次数;
Kbs/s:每秒传输的量,kb单位;
avwait:每个请求平均等待时间(毫秒单位);
avserv:每个请求服务时间(毫秒单位)。

sql查看I/O分布:
SELECT d.name,
       f.phyrds,--记录从盘上读每个数据库文件的次数
       f.phywrts,--记录往盘上写数据库文件的次数
       f.readtim / decode(f.phyrds, 0, 1, f.phyrds) readtime,
       f.writetim / decode(f.phywrts, 0, 1, f.phywrts) wrtime
  FROM v$datafile d, v$filestat f
 WHERE d.file# = f.file#
 ORDER BY d.name;

临时表空间:V$TEMPFILE和V$TEMPSTATS

iostat查看I/O统计数据
ossdb2:/#iostat
System configuration: lcpu=4 drives=13 paths=2 vdisks=0
tty:      tin         tout    avg-cpu: % user % sys % idle % iowait  --tty and CPU Utilization Report
          0.0          2.9                0.1   0.1   99.8      0.0
Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn         --Disk Utilization Report
hdisk0           0.3       7.0       0.6     400611    197307
hdisk1           0.3       4.7       0.6     204871    197307
dac0             0.0       0.0       0.0          0         0
dac0utm          0.0       0.0       0.0          0         0
dac2             0.0       0.0       0.0          0         0
dac2utm          0.0       0.0       0.0          0         0
hdisk2           0.0       0.0       0.0          0         0
hdisk3           0.0       0.0       0.0          0         0
hdisk4           0.0       0.0       0.0          0         0
hdisk5           0.0       0.0       0.0          0         0
hdisk6           0.0       0.0       0.0          0         0
hdisk7           0.0       0.0       0.0          0         0
cd0              0.0       0.0       0.0          0         0

tin:从tty设备读取的总字节数。
tout:写到tty设备的总字节数。
% user:用户使用的cpu; % sys:系统使用的cpu; % idle:系统请求完成后空闲的cpu; % iowait:系统存在请求时空闲的cpu。

% tm_act:磁盘处于活动状态的时间百分比;
Kbps:硬盘每秒读写的总数据量(单位KB);
tps:每秒某个硬盘有多少个数据传输次数;
Kb_read:读取的总数据量;Kb_wrtn:写入的总数据量。

减少磁盘争用方法:
1)增加磁盘数目
2)分散数据文件和重做日志文件
重做日志文件是顺序写入磁盘的,所以尽量不要将重做日志文件跟数据文件存放在同一个磁盘上。如果不得不将数据文件跟重做日志文件存放在同一个磁盘
上,那么该盘空间不应该属于SYSTEM表空间、RBS表空间,以及其它如DATA和INDEX表空间。它们都会直接导致与重做日志文件之间的争用,而且还会有增加
写入日志数据库读写速度的可能性
3)对于较大表,使用分区


网络性能
netstat命令。

top命令(aix下为topas):综合监控系统的命令

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!