`

ORACLE数据库性能检测

阅读更多
数据采集过程中经常会遇到入库慢,解决这个问题则首先需要脚本设计人员对插件的用法,其次要知道如何检查数据库的性能,很多情况下都是数据库本身优化不到位造成的
数据库优化
1:检查数据库sga,pga的使用情况
(1)系统全局域:
  SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。
a.共享池:
查看共享SQL区的使用率:
Sql代码  收藏代码
select(sum(pins-reloads))/sum(pins) "Library cache" from v$librarycache;--动态性能表 

这个使用率应该在90%以上,否则需要增加共享池的大小。

查看数据字典缓冲区的使用率:
Sql代码  收藏代码
select (sum(gets-getmisses-usage-fixed))/sum(gets) "Data dictionary cache" from v$rowcache;--动态性能表 

这个使用率也应该在90%以上,否则需要增加共享池的大小。

修改共享池的大小:
Sql代码  收藏代码
ALTER SYSTEM SET SHARED_POOL_SIZE = 64M; 


b.缓冲区高速缓存:
查看数据库数据缓冲区的使用情况:
Sql代码  收藏代码
SELECT name,value FROM v$sysstat order by name WHERE name IN(''DB BLOCK GETS'',''CONSISTENT GETS'',''PHYSICAL READS''); 

计算出来数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。

c.日志缓冲区
查看日志缓冲区的使用情况:
Sql代码  收藏代码
SELECT name, value  FROM v$sysstat WHERE name IN (''redo entries'',''redo log space requests''); 

查询出的结果可以计算出日志缓冲区的申请失败率:  
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

d.大型池:
    可以减轻共享池的负担,可以为备份、恢复等操作来使用,不使用LRU算法来管理。其大小由数据库的‘共享模式/db模式’如果是共享模式的话,要分配的大一些。
    指定Large Pool的大小:
Sql代码  收藏代码
ALTER SYSTEM SET LARGE_POOL_SIZE=64M 

2:检查数据库表空间的使用情况
--1、查看表空间的名称及大小
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size
FROM dba_tablespaces t, dba_data_files d
WHERE t.tablespace_name = d.tablespace_name
GROUP BY t.tablespace_name;
--2、查看表空间物理文件的名称及大小
SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;

3:检查oracle日志

Oracle数据库的日志文件在$ORACLE_BASE/diag/rdbms下面,例如:/opt/oracle/oradb/diag/rdbms/ORACLE_SID/ORACLE_SID/trace

4:检查索引创建,使用情况。有时候字段在重建联合索引情况下会出现查询不走索引,需要使用牵制索引查询

select /*+ INDEX(T_MEDFLOW_INTENT,SYS_C00ADDCODE) */ count(t.addcode)

from T_MEDFLOW_INTENT t

where 1 = 1

5:检查是否存在锁表情况

查看锁表进程SQL语句1:
select sess.sid,
    sess.serial#,
    lo.oracle_username,
    lo.os_user_name,
    ao.object_name,
    lo.locked_mode
    from v$locked_object lo,
    dba_objects ao,
    v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;

查看锁表进程SQL语句2:
select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;

杀掉锁表进程:
如有記錄則表示有lock,記錄下SID和serial# ,將記錄的ID替換下面的738,1429,即可解除LOCK
alter system kill session '738,1429';

6:检查归档日志的情况
SELECT created, log_mode, log_mode FROM v$database;
7:检查logfile情况
select * from v$logfile;
8:检查SQL语句的使用情况
select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics