时间: 2021-08-13 作者:daque
10046event 散步: 即使你对oracle本能调优很感爱好大概比拟擅长,那么你对oracle的10046事变确定不会生疏。10046event是oracle用来体例本能领会时的一个最要害的事变。当激活这个事变后,将报告oracle kernel蹑踪对话的关系立即消息,并写入到相映trace文献中。那些有效的消息重要囊括sql是怎样举行领会,绑定变量的运用情景,对话中爆发的等候事变等 10046event 可分红各别的级别(level),辨别蹑踪记载各别水平的有效消息。对于那些各别的级别,该当提防的是向下兼容的,即高头等的trace消息包括低于此级的一切消息。 10046event的蹑踪级别大概有: level 1:盯梢sql语句,囊括领会、实行、索取、提交和回滚等。 level 4:囊括变量的精细消息 level 8:囊括等候事变 level 12:囊括绑定变量与等候事变 个中,level 1十分于翻开了sql_trace 10046event的起用和封闭: 基础前提:(先保证要event的对话情况适合前提) 1、 必需保证timed_statistics为true,这个参数不妨在对话级长进行窜改。 2、 为了保证trace输入不妨完备举行,还要安排此对话对trace文献巨细的控制,普遍将此控制废除,行将max_dump_file_size树立为unlimited,大概树立为一个很大的阙值。 在满意了上述前提后,就不妨起用10046event对对话举行后盾盯梢了。 这边再有几种办法来起用10046event: 一种是在暂时对话起用event,不妨运用alter session + 事变称呼 + level, 如:sql>alter session set event ‘10046 trace name context forever, level 12’; 其余一种是起用其余对话举行event盯梢,不妨运用oracle供给的dbms_system来实行。 如:sql>exec dbms_system.set_ev(sid,serial#,10046,12,’’); 提防: sql>exec dbms_system.set_sql_trace_in_session(sid,serial#,true); 十分于翻开了sql_trace。 event的封闭: 不妨在经过底下的语句来封闭暂时对话的event: sql>alter session set event ‘10046 trace name context off’; 也不妨运用dbms_system包来封闭某个对话的event: sql>execute dbms_system.set_ev(sid,serial#,0,’’); 这边该当犯得着一提的是,trace将耗费十分的体例资源,所以咱们在运用trace的功夫该当留心。对于正式的体例,该当只在需要的功夫举行trace操纵,而且该当准时封闭。 当运用事变trace完暂时或某个session后,接下来咱们的处事即是找到oracle天生的trace了。oracle的初始化文献中user_dump_dest参数的树立将确定trace文献的天生场所。 从trace文献中搜索和创造有效的消息,而后探求需要的本能安排点并举行相映的安排: 大局部情景下,经过10046事变trace到文献里的消息包括了此对话中生存的本能题目,不妨按照trace到的等候事变、sql语句实行情景以及绑定变量的运用情景来举行领会和搜索。 oracle供给了一个东西tkprof来对trace文献举行方法的翻译,再不trace文献中记载的消息不妨被咱们简单控制和获得。 小常识: 查看暂时对话的sql_trace状况或级别: sql>set serveroutput on 2 declare i_event number; 3 begin 3 sys.dbms_system.read_ev(10046,i_event); 4 dbms_output.put_line(‘the session sql_trace level is: ‘||i_event); 5 end; 6 / the session sql_trace level is: 12 pl/sql 进程已胜利实行。