ORACLE数据库性能检测

[color=red]数据采集过程中经常会遇到入库慢,解决这个问题则首先需要脚本设计人员对插件的用法,其次要知道如何检查数据库的性能,很多情况下都是数据库本身优化不到位造成的[/color]
数据库优化
[color=blue]1:检查数据库sga,pga的使用情况[/color]
(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

[color=blue]2:检查数据库表空间的使用情况[/color]
--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;

[color=blue]3:检查oracle日志[/color]

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

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

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

from T_MEDFLOW_INTENT t

where 1 = 1

[color=blue]5:检查是否存在锁表情况[/color]

查看锁表进程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';

[color=blue]6:检查归档日志的情况[/color]
SELECT created, log_mode, log_mode FROM v$database;
[color=blue]7:检查logfile情况[/color]
select * from v$logfile;
[color=blue]8:检查SQL语句的使用情况[/color]
select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值