局部分区索引的分区消除
局部分区索引的分区消除[@more@]分区消除行为:如果查询首先访问索引,是否能消除分区完全取决于查询中的谓词。SQL> create table test2 (a int,3 b int,4 data char(20)5 )6 partition by range(a)7 (partition part_1 values less than(2),8 partition part_2 values less than(3)9 )10 /表已创建。SQL> create index local_pre on test(a,b) local;索引已创建。SQL> create index local_nopre on test(b) local;索引已创建。SQL> insert into test2 select mod(rownum -1 ,2) +1, rownum, 'x'3 from all_objects;已创建112
v$lock视图学习
v$lock视图学习[@more@]给出了相应SID当前持有的锁与请求锁或闩的信息:addr字段,内存中被锁的对象的地址kaddr字段,lock的地址type字段,用户或系统锁类型。user type locks有3种:TM,TX,UL,system type locks有多种,常见的有:MR,RT,XR,TS等,系统锁持有的时间极其短暂。我们只关心TM,TX锁。当TM锁时,id1字段表示object_id;id2为0。当TX锁时,id1表示回滚段号码的十进制值,trunc(id1/power(2,16))代表了回滚段号。id2表示交换次数。 lmode字段,session持有的锁的模式,有6种:0 - none 1 - null (NULL) 2 - row-S (SS) 行共
共享游标
共享游标[@more@](1)父游标无法被共享的情形与父游标有关的关键信息是SQL语句的文本。多个SQL语句只有在它们的文本完全一样才可以共享同一个父游标。这里不考虑cursor_sharing参数。select * from t where object_id = 1000;select * FROM t where object_id = 1000;select * from t where object_id = 1000;select * from t WHERE object_id = 1000;视图v$sqlarea,可以确认系统创建了3个不同的父游标,其执行次数不同。SQL_ID SQL_TEXT EXECUTIONS------------- -------------------------------------------------- ----------8t5k20
选择性和基数
选择性和基数[@more@]选择性是一个介于0和1之间的值,代表被一个操作过虑的记录的比例。一个操作所返回的记录条数称为基数。cardinality = selectivity * num_rows其中num_rows为被处理的记录数。知道一个操作对应的选择性能够帮助确定哪条访问路径是最优访问路径。
找到长时间执行的oracle会话,查看其操作系统进程状态
找到长时间执行的oracle会话,查看其操作系统进程状态[@more@]1、查询系统中长时间执行的SQL操作,顺序排列:select sid, message from v$session_longops order by start_time;通过MESSAGE列,可以看到会话当前执行的状态。2、查询当前正在执行的SQL完成比率:select sid, opname, target_desc, sofar, totalwork, trunc(sofar/totalwork*100,2) || '%' as perworkfrom v$session_longops where sofar != totalwork;3、执行下面的查询,得到当前长时间操作执行的SQL任务分别是什么:select opname, target, to_char(start_time, 'yyyy-mm
v$session视图学习
此视图列出了每个当前session的session信息。[@more@]此视图列出了每个当前session的session信息。 通过v$session.paddr=v$process.addr与process相关,取得这些oracle进程对应的操作系统进程信息,例如: select p.spid, s.sid, s.serial#, s.program from v$process, v$session swhere p.addr = s.paddr and s.sid in (&sid); 通过v$session.taddr=v$transaction.addr跟transaction相关 通过lockwait字段可以查询当前正在等待的锁的相关信息:select * from v$lock where kaddr in ( select lockwait from v$ses