Oracle 数据库的优化与调整

一、下面三个参数属于SGA区的设置,主要看服务器内存是不是需要扩充。
1、数据缓冲区计算:(DB_BLOCK_BUFFERS)
SQL> select 1 - (phy.value /(blk.value+con.value))
" Hit Ratio"
from v$sysstat phy, v$sysstat blk, v$sysstat con
where phy.name = 'physical reads' and
blk.name = 'db block gets' and
con.name = 'consistent gets'

Hit Ratio最好是大于90%,需要在数据库在最繁忙的时候的命中率,否则需要增加内存。

2、日志缓冲区计算(log_buffer)
v$latch
sum(misses) 越接近于零越好。
3、共享池大小计算(shared_pool_size)
(1) v$librarycach: PINS(命中),Reloads(失败)
Reloads/(pins + reloads) * 100 -> 失败率 -> 应小于1%,否则需要扩内存。
(2) v$rowcache: GETS(取到), GETMISSES(失败)

二、排序区参数计算(SORT_AREA_SIZE):v$sysstat
sorts(disk) / sorts(memory)+sorts(disk) 失败率 < 10%
三、磁盘存储参数测算:
计算以下存储参数:
initial
next
minextents
maxextents
pctincrease
如果使用本地化管理,不需要计算以上参数。
四、数据库参数自动统计计算
1、修改参数文件:timed_statistics=true,重启数据库
2、在数据库最繁忙的时段运行下面两个SQL程序(在Oracle目录中搜索这两个文件)
SVRMGR>@d:\oracle\ora81\rdbms\admin\utlbstat.sql
SVRMGR>@d:\oracle\ora81\rdbms\admin\utlestat.sql
3、查询d:\report.txt来看统计结果。
五、回退段优化设计
1、对于大事务,设计大回退段,提高数据操作速度。
步骤如下:
A、创建一个专用的回退段表空间。例如:rb100
B、在回退段表空间rbs100上创建大的回退段。
SQL> create rollback segment rbs100
tablespace rbs100
storage(initial 50m);
C、使回退段表空间online
SQL> Alter rollback segment rbs100 online;
D、指定用户使用专用的回退段表空间:
SQL> set transaction use rollback segment rbs100; // 必须在事务开始前指定
E、事务结束后,删除回退段及表空间。

2、回退段I/O调整,具体步骤:
A、创建多个回退段表空间,对就不同物理磁盘,以平衡磁盘I/O
B、在多个表空间上分别创建回退段。例如:
rbs1:rbs01, rbs02, rbs03, rbs04, rbs05
rbs2: rbs06, rbs07, rbs08, rbs09, rbs10
C、修改参数文件,使回退段交叉排放。例如:
rollback_segments=(rbs01,rbs06,rbs02,rbs07,rbs03,rbs08,...)

访问表空间权限控制:
去掉用户对某个表空间的访问权限
ALTER USER ZYIBSS QUOTA 0 ON IBMS_DATA_DATA;
ALTER USER ZYIBSS QUOTA 0 ON IBMS_DATA_IDX;
增加用户对某个表空间的访问权限
ALTER USER ZYIBSS QUOTA UNLIMITED ON IBMS_DF_DATA;
移动表空间:
alter table tcm-user move tablespace ibms-data-data

append是优化提示器,这个最好不用,你可以用并行提供来做
insert /*+parallel(emp,2) */ into emp nologging
2是用2个CPU来并发做事

关于Oracle中的时间计算问题!
--------------------------------------------------------------------------------
to_date('2003-8-1 18:20', 'yyyy-mm-dd HH24:MI') - to_date('2003-7-3 18:35', 'yyyy-mm-dd HH24:MI')
得到一个值,如何将得到的值转化为分钟?也就是说它们两个值之间相差的分钟?
--------------------------------------------------------------------------------
(to_date('2003-8-1 18:20', 'yyyy-mm-dd HH24:MI') - to_date('2003-7-3 18:35', 'yyyy-mm-dd HH24:MI'))*24*60
(dateA-dateB)*1440 = N 分
(dateA-dateB)*86400 = N 秒
round()四舍五入
ceil()大于n的最小整数

如果不小心把表给delete掉了并且commit了,不要紧,你可以用如下语句进行恢复
select * from tfm_action_list as of timestamp (systimestamp -interval'4000'second)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值