爱飞 发表于 2015-1-16 22:44:11

MYSQL教程之怎样搜集Oracle历程中的sql跟踪信息

平台即服务PaaS、基础设施即服务IaaS、软件即服务SaaS都是我们比较熟悉的MySQL学习教程,现在又出现了数据库即服务DBaaS,以基于云的方式存储结构化数据。oracle|历程在诊断数据库体系功能的过程当中,总会触及到跟踪效力低下的sql语句,如今就怎样跟踪sql语句来做一个复杂的总结。权做举一反三之用。

假如我们能够修正使用体系的源代码,则能够间接在程序中到场以下的语句:

1)altersessionsettimed_statistics=true;/*合用于Oracle7.3今后的版本*/

2)altersessionsetmax_dump_file_size=unlimited;/*合用于Oracle7.3今后的版本*/

3)altersessionsettracefile_identifier=POX20031031a;/*合用于Oracle8.1.7今后的版本*/

4)altersessionsetevents10046tracenamecontextforever,level8;

/*在这里编写使用程序的代码*/

5)altersessionsetevents10046tracenamecontextoff;

在上述语句中,语句1)是把该会话的工夫统计翻开,该参数默许为false.在Oracle7.3之前的版本中,不克不及在会话级设置该参数,只能修正初始化文件然后从头启动数据库,如许将在实例级翻开工夫统计。

语句2)是把跟踪文件的巨细设置成操纵体系所同意的最年夜尺寸,如许能够避免跟踪文件在完成所必要的跟踪之前被添补满,别的必要注重的是确保留放跟踪文件的目次要有充足的空间,不然将会收到“文件体系已满”毛病。

语句3)的感化是使天生的跟踪文件称号中包括POX20031031a字符串,如许可使你很简单的找到所需的跟踪文件,该参数在Oracle8.1.7以后可用。

语句4)和语句5)的感化分离是翻开和封闭跟sql跟踪,你能够在这两个语句之间写进使用程序的代码,这些代码的实行情形都将被跟踪。必要注重的是语句4)的level关头字,它用来指定跟踪级别,一共有0,1,2,4,8,12六个级别能够设置,0相称于封闭跟踪;1是输入一样平常的跟踪信息,不包含绑定变量和守候信息;2和1不异;4是在级别1的基本上增添绑定变量信息;8是在级别1的基本上增添守候信息;级别12是输入包括级别1,4,8的一切信息。

假如使用程序的代码没法修正大概是不想往修正,则能够在其他会话中翻开对特定会话的跟踪,办法以下:

1)sys.dbms_system.set_bool_param_in_session(:sid,:serial,timed_statistics,true);

2)sys.dbms_system.set_int_param_in_session(:sid,:serial,max_dump_file_size,2147483647);

翻开和封闭跟踪的第一种办法(oracle保举):

3.1)sys.dbms_support.start_trace_in_session(:sid,:serial,waits=>true,binds=>false);

/*在此时代运转要跟踪的使用程序*/

4.1)sys.dbms_support.stop_trace_in_session(:sid,:serial);

翻开和封闭跟踪的第二种办法:

3.2)sys.dbms_system.set_ev(:sid,:serial,10046,8,);

/*在此时代运转要跟踪的使用程序*/

3.2)sys.dbms_system.set_ev(:sid,:serial,10046,0,);

以上语句中的:sid和:serial分离代表所要跟踪的会话的ID和序列号,这些信息能够从V$SESSION视图的SID和SERIAL#列取得。翻开封闭跟踪中第一种办法的优点是你不必本人写10046这个事务号,如许能够削减毛病,可是dbms_support程序包在你的数据库中大概会不存在,如许就只要用第二种办法了。

到如今为止,我们已天生了所必要的跟踪文件,然后我们必要找到该文件来举行剖析。跟踪文件的寄存地位只要两种大概,Oracle参数USER_DUMP_DEST大概BACKGROUND_DUMP_DEST指定的目次;文件称号依据分歧的平台会有所分歧,可是在文件名中城市包括会话所对应的操纵体系历程(线程)号,也就是V$PROCESS的SPID列(V$PROCESS.SPID),该信息能够经由过程v$process.addr和v$session.paddr做表毗连查询失掉。比方:selectspidfromv$processp,v$sessionswherep.addr=s.paddrands.sid=:sidands.serial#=:serial.

本文只对Oracle在利用公用服务器历程(DedicatedServer)形式做了总结,至于的共享服务器(SharedServer)形式和在使用级利用毗连池的情形下,搜集sql跟踪信息的办法会对照庞大,但愿有相干履历的妙手来总结。通过支付一定费用,客户可以得到优先的24/7支持,访问内容丰富的在线知识库和联系一个专门的技术负责经理。

柔情似水 发表于 2015-1-17 07:18:20

我们学到了什么?思考问题的时候从表的角度来思考问

只想知道 发表于 2015-1-20 14:50:18

始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。

小妖女 发表于 2015-1-29 10:35:09

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

第二个灵魂 发表于 2015-2-6 00:24:29

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

因胸联盟 发表于 2015-2-14 15:24:59

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

变相怪杰 发表于 2015-3-4 07:37:14

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

活着的死人 发表于 2015-3-11 17:55:18

这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?

谁可相欹 发表于 2015-3-19 05:13:53

同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。

仓酷云 发表于 2015-3-27 08:10:21

光写几个SQL实在叫无知。
页: [1]
查看完整版本: MYSQL教程之怎样搜集Oracle历程中的sql跟踪信息