oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

LinLinHou 2019-03-20

概述

今天续一下之前讲oracle日常巡检方面的内容,还有几个方面忘记继续说了,下面主要介绍下平时怎么去检查数据库cpu、I/O、内存性能。

其实记录数据库的cpu使用、IO、内存等使用情况,可以使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息


1、CPU使用情况

top+M

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

2、内存使用情况

free -m

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

3、系统I/O情况

iostat -k 1 3

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

4、系统负载情况

uptime

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

5、查看是否有僵死进程

select SPID,USERNAME,TRACEFILE from v$process where addr not in (select paddr from v$session);

有些僵尸进程有阻塞其他业务的正常运行,定期杀掉僵尸进程。

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

6、检查行链接/迁移

select table_name, num_rows, chain_cnt From dba_tables where owner = 'GZCSS_NWPP' And chain_cnt <> 0;

注:含有long raw列的表有行链接是正常的,找到迁移行保存到chained_rows表中,如没有该表执行../rdbms/admin/utlchain.sql

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

如果有数据的话就analyze table tablename list chained rows;

可通过表chained_rows中table_name,head_rowid看出哪些行是迁移行

7、定期做统计分析

对于采用Oracle Cost-Based-Optimizer的系统,需要定期对数据对象的统计信息进行采集更新,使优化器可以根据准备的信息作出正确的explain plan。在以下情况更需要进行统计信息的更新:

a. 应用发生变化
b. 大规模数据迁移、历史数据迁出、其他数据的导入等
c .数据量发生变化

查看表或索引的统计信息是否需更新,如:

Select table_name,num_rows,last_analyzed From user_tables where table_name ='T_GD_GGDAB'

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

select count(*) from T_GD_GGDAB

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

如num_rows和count(*)行数相差很多,则该表需要更新统计信息,建议一周做一次统计信息收集,如:

exec sys.dbms_stats.gather_schema_stats(ownname=>'GZCSS_NWPP',cascade => TRUE,degree => 4);

8、检查缓冲区命中率

SELECT a.VALUE + b.VALUE logical_reads,

c.VALUE phys_reads,

round(100 * (1 - c.value / (a.value + b.value)), 4) hit_ratio

FROM v$sysstat a, v$sysstat b, v$sysstat c

WHERE a.NAME = 'db block gets'

AND b.NAME = 'consistent gets'

AND c.NAME = 'physical reads';

如果命中率低于90%则需加大数据库参数db_cache_size。

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

9、检查共享池命中率

select sum(pinhits) / sum(pins) * 100 from v$librarycache;

如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数shared pool的大小。

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

10、检查排序区

select name,value from v$sysstat where name like '%sort%';

如果disk/(memoty+row)的比例过高,则需要调整sort_area_size(workarea_size_policy=false)或pga_aggregate_target(workarea_size_policy=true)。

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

11、检查日志缓冲区

select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');

如果redo buffer allocation retries/redo entries超过1%,则需要考虑增大log_buffer。

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能


关于oracle数据库检查数据库cpu、I/O、内存和其他性能方面就介绍到这了,后面再介绍下怎么检查数据库安全方面,感兴趣的朋友可以关注下!

oracle数据库日常巡检--检查数据库cpu、I/O、内存性能

相关推荐