Oracle效率小技巧

1.--加快关联表查询速度,设置每次块读取数

SQL code ?
1
execute  immediate  'alter session set db_file_multiblock_read_count=128' ;


此技巧常用语存储过程中,每次读取块的大小(128)也需要根据实际需要和机器的配置综合考虑
2.当查询中存在对列的函数操作时,此时此列索引是无效的(可建立函数索引),例如to_char(abc,'xxxx'),abc字段索引失效
3.like 'abc%'使用索引,like '%abc%'不使用索引(自己去google原因)
4.

SQL code ?
1
2
insert  /*+ append */  --使用这个hint可以将数据使用直接路径插入到表的高水线之后,由于是连续的没有使用的空间,所以插入速度快。
   into  tab_abc  select  from  ......


5.导数据时可使用
insert into tab_abc nologging select * from tab_cde;(原理自己查,你会学到更多)
6.alter table hu move partition "REN130602" compress parallel 8 nologging;
压缩表可提高查询效率,但会大大降低插入和删除效率(个人建议当表大于100G时在考虑吧)
7.尽量少使用Truncate,别初生牛犊不怕虎,随便干掉一个表,这个习惯会使你痛不欲生的。
8.即使干掉了也别怕,Oracle 9i开始支持Flashback Query恢复误删除数据.(truncate的也可以回复,但是有前提的)
9.动态游标打开后一定记得关闭。
-------------------------------------------------------------------------------------------------
锁表的处理
第一步,查询出被锁的表的session_id,和serial#。

SQL code ?
1
2
3
4
5
6
SELECT  l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,
l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time
FROM  v$locked_object l, all_objects o, v$session s
WHERE  l.object_id = o.object_id
AND  l.session_id = s.sid
ORDER  BY  sid, s.serial# ;


第二步,kill session

SQL code ?
1
alter  system kill session  'AAA,BBB'  -- 其中AAA是上面查询出的sid,BBB是serial#的值


此处注意,看好是不是你自己锁的表,看准了在kill
第三部,一般上两个步骤就搞定锁表了,如果杀不掉,就进入到OS级别杀......

SQL code ?
1
2
3
select  spid, osuser, s.program
from  v$session s,v$process p
where  s.paddr=p.addr  and  s.sid=24 (24是上面的sid)


linux下 kill -9 12345(12345为上边查询出的spid)
此处更应注意,kill错了什么事情都可能发生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值