LinLinHou 2019-03-20
今天续一下之前讲oracle日常巡检方面的内容,还有几个方面忘记继续说了,下面主要介绍下平时怎么去检查数据库cpu、I/O、内存性能。
其实记录数据库的cpu使用、IO、内存等使用情况,可以使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息
top+M
free -m
iostat -k 1 3
uptime
select SPID,USERNAME,TRACEFILE from v$process where addr not in (select paddr from v$session);
有些僵尸进程有阻塞其他业务的正常运行,定期杀掉僵尸进程。
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
如果有数据的话就analyze table tablename list chained rows;
可通过表chained_rows中table_name,head_rowid看出哪些行是迁移行
对于采用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'
select count(*) from T_GD_GGDAB
如num_rows和count(*)行数相差很多,则该表需要更新统计信息,建议一周做一次统计信息收集,如:
exec sys.dbms_stats.gather_schema_stats(ownname=>'GZCSS_NWPP',cascade => TRUE,degree => 4);
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。
select sum(pinhits) / sum(pins) * 100 from v$librarycache;
如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数shared pool的大小。
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)。
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、内存和其他性能方面就介绍到这了,后面再介绍下怎么检查数据库安全方面,感兴趣的朋友可以关注下!