我们爱分享---Oracle效率小技巧
1.--加快关联表查询速度,设置每次块读取数
- SQL code
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
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
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_timeFROM v$locked_object l, all_objects o, v$session sWHERE l.object_id = o.object_idAND l.session_id = s.sidORDER BY sid, s.serial# ;
第二步,kill session
- SQL code
alter system kill session 'AAA,BBB' -- 其中AAA是上面查询出的sid,BBB是serial#的值
此处注意,看好是不是你自己锁的表,看准了在kill
第三部,一般上两个步骤就搞定锁表了,如果杀不掉,就进入到OS级别杀......
- SQL code
select spid, osuser, s.programfrom v$session s,v$process pwhere s.paddr=p.addr and s.sid=24 (24是上面的sid)
linux下 kill -9 12345(12345为上边查询出的spid)
此处更应注意,kill错了什么事情都可能发生。
-------------------------------------------------------------
好多都是脑袋想的,平时没记录,语句肯定会有错误的地方,希望大家抱着学习的态度去看。
知识比较基础,望牛人楼下补充并指点错误....感谢。
额,写了这么多,打个xx吧,自己所在的群,很不错的,群号:53596919
[解决办法]
good 欢迎分享,欢迎散分。
[解决办法]
学习了~~
[解决办法]
谢谢分享
[解决办法]
感恩,学习了
[解决办法]
木子、你猜偶是谁~!
[解决办法]
0.0,,,,,,
[解决办法]
谢谢分享
[解决办法]
好吧,好久没上CSDN了~东西还是很好的,哇哈哈哈哈~
[解决办法]
[解决办法]
果断收藏学习
[解决办法]
LZ 好人啊 多些分享!
[解决办法]
收藏一下
[解决办法]
恩 学习了,正要开始用oracle数据库,研究下,
问:加群需要验证码么,验证码是多少!!!
[解决办法]
学习下
[解决办法]
good!
[解决办法]
强势UP
[解决办法]
前段时间,一个人对我说:也就200多万数据,随便搞搞就好了,
[解决办法]
积极学习啊。。。
[解决办法]
支持。。。。。。
[解决办法]
学习之
谢谢楼主
[解决办法]
很实用,谢谢
[解决办法]
谢谢LZ。 学习了
[解决办法]
truncate后commit,flashback query可以恢复么?疑惑……
[解决办法]
补充几点切身相关的
1:绑定变量的重要性
是否使用绑定变量看情况而定,大多数情况下,绑定变量会减少硬解析的数量,降低共享池大小,往往不适用绑定变量是系统系能的硬伤,但是在11g之前(在11g中有扩展的游标共享),如果在一个where从句中使用绑定变量,CBO会窥测绑定变量的值,有可能会引发选择一个低效率的执行计划。因此,如果一个sql处理大量的数据就尽量不要再where中使用绑定变量。
还有即使使用绑定变量,有几种情况下,oracle也不会使用共享池中的共享游标
1)父游标不同,即使sql语句是一样的,但是多了个空格,也是会产生新的父游标
2)执行环境的改变,父游标相同的情况下如果执行环境不同,会生成不同的子游标,因此也不会使用共享游标
2:打开的游标中大量commit,大量commit可以提高性能?
此错误多见于批量更新,大家可以试一下,如果你的undo段不够大,批量update的时候大量commit,势必造成ora-01555
如果你在一个打开的游标中大量commit,一定会遇到这个错误,而且这个错误不可逆。
很多人都会觉得commit会释放很多资源,可以提高性能,但是实际上在commit之前,oracle已经完成了大部分的刷新输出的工作,commit的时候只是做一些收尾的工作,入块清理,释放锁之类的,多次commit反而开销更大,所以正确的变成习惯是一个事物中只提交一次
[解决办法]
[解决办法]
[解决办法]
[解决办法]
学习了。
[解决办法]
[解决办法]
8.即使干掉了也别怕,Oracle 9i开始支持Flashback Query恢复误删除数据.(truncate的也可以回复,但是有前提的)
除了 flashback database,还有什么方法能恢复truncate的数据,请指教。
[解决办法]
多谢楼主!
[解决办法]
...下午之所以突然加入那么多人原来是有人广告了 怪不得
[解决办法]
++
[解决办法]
[解决办法]
收藏了,谢谢分享
[解决办法]
跑过,学习ed。
------解决方案--------------------
学习。
[解决办法]
不错,学习了~~~~