OracleSQL跟蹤技術(shù)(技術(shù)篇)課件_第1頁(yè)
OracleSQL跟蹤技術(shù)(技術(shù)篇)課件_第2頁(yè)
OracleSQL跟蹤技術(shù)(技術(shù)篇)課件_第3頁(yè)
OracleSQL跟蹤技術(shù)(技術(shù)篇)課件_第4頁(yè)
OracleSQL跟蹤技術(shù)(技術(shù)篇)課件_第5頁(yè)
已閱讀5頁(yè),還剩143頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

()OracleSQL跟蹤技術(shù)—在職員工(技術(shù)篇)部門(mén):培訓(xùn)部日期:2012.03.23本文檔及其所含信息為內(nèi)部保密材料,由北京九恒星科技股份有限公司擁有,公司專(zhuān)屬知識(shí)產(chǎn)權(quán)未經(jīng)書(shū)面授權(quán),不得對(duì)外泄露COPYRIGHT?保留所有權(quán)利()OracleSQL跟蹤技術(shù)部門(mén):培訓(xùn)部本文檔及1課程修訂修訂編號(hào)修訂作者變更頁(yè)碼版本號(hào)變更日期課程狀態(tài)備注第一次郭鵬1-74V1.02012-03-26待評(píng)審第二次第三次第四次第五次第六次課程修訂修訂編號(hào)修訂作者變更頁(yè)碼版本號(hào)變更日期課程狀態(tài)備注第2課程介紹您將掌握SQL跟蹤技術(shù)原理、方法及過(guò)程,熟悉動(dòng)態(tài)性能視圖表的作用及用法,掌握SQLTrace、TKPROF工具應(yīng)用,并能分析各類(lèi)ORACLE語(yǔ)句問(wèn)題,為實(shí)際工作做到方法的指引。課程名稱(chēng)《OracleSQL跟蹤技術(shù)》培訓(xùn)目標(biāo)實(shí)施、開(kāi)發(fā)、測(cè)試崗位各級(jí)技術(shù)人員培訓(xùn)對(duì)象2個(gè)小時(shí)培訓(xùn)課時(shí)培訓(xùn)方式面授課程層級(jí)初、中級(jí)課程介紹您將掌握SQL跟蹤技術(shù)原理、方法及過(guò)程,熟悉動(dòng)態(tài)性能3培訓(xùn)內(nèi)容綱要通過(guò)本次培訓(xùn),您將學(xué)習(xí)到以下核心內(nèi)容:數(shù)據(jù)庫(kù)連接體系結(jié)構(gòu)客戶端、服務(wù)器SQL跟蹤原理及過(guò)程方法SQLTrace工具介紹、使用方法及實(shí)踐TKPROF工具介紹、使用方法及實(shí)踐培訓(xùn)內(nèi)容綱要通過(guò)本次培訓(xùn),您將學(xué)習(xí)到以下核心內(nèi)容:4目錄TABLEOFCONTENTS一、數(shù)據(jù)庫(kù)連接體系介紹二、SQL跟蹤原理解析三、Oracle“SQLTarce”工具用法四、Oracle“TKPROF”工具用法五、Q&A目錄TABLEOFCONTENTS一、數(shù)據(jù)庫(kù)連接體5單擊此處添加段落文字內(nèi)容DB網(wǎng)絡(luò)連接架構(gòu)多進(jìn)程(單線程)P/T單進(jìn)程多線程P/T多進(jìn)程多線程P/T流行單擊此處添加段落文字內(nèi)容DB網(wǎng)絡(luò)連接架構(gòu)多進(jìn)程(單線程)6單擊此處添加段落文字內(nèi)容三層技術(shù)架構(gòu)DatabaseMCVCacheAJAX(AsynchronousJavaScriptandXML)JPA(HibernateEntityManager)JSPHTMLEXTServletControllerQuartzJBMPRPCJMS業(yè)務(wù)邏輯…SpringJersey(JAXRS)WEB

服務(wù)器單擊此處添加段落文字內(nèi)容三層技術(shù)架構(gòu)DatabaseMCVC7單擊此處添加段落文字內(nèi)容DB連接模式OracleServer對(duì)外提供兩種服務(wù)的鏈接:

共享服務(wù)器模式多個(gè)連接過(guò)來(lái),則后臺(tái)只有一個(gè)進(jìn)程進(jìn)行服務(wù)。專(zhuān)有服務(wù)器模式

一個(gè)連接過(guò)來(lái),則后臺(tái)生成一個(gè)單獨(dú)的進(jìn)程進(jìn)行服務(wù)。(selectsid,serial#,username,status,program,serverfromv$sessionwhereusernameisnotnull;)單擊此處添加段落文字內(nèi)容DB連接模式OracleServ8單擊此處添加段落文字內(nèi)容DB連接模式DB采用專(zhuān)有服務(wù)器模式:?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容DB連接模式DB采用專(zhuān)有服務(wù)器模9目錄TABLEOFCONTENTS二、SQL跟蹤原理解析一、數(shù)據(jù)庫(kù)連接體系介紹三、Oracle“SQLTarce”工具用法四、Oracle“TKPROF”工具用法五、Q&A目錄TABLEOFCONTENTS二、SQL跟蹤10單擊此處添加段落文字內(nèi)容任務(wù)

假如很多用戶訪問(wèn)DB服務(wù)器,我如何知曉:是那個(gè)用戶訪問(wèn)DB服務(wù)器?那個(gè)用戶對(duì)應(yīng)那個(gè)事務(wù)?那個(gè)事務(wù)執(zhí)行很慢?(如何找到對(duì)應(yīng)SQL語(yǔ)句)單擊此處添加段落文字內(nèi)容任務(wù) 假如很多用戶訪問(wèn)DB服務(wù)器,我11單擊此處添加段落文字內(nèi)容1.netstat查詢(xún)兩臺(tái)計(jì)算機(jī)TCP、UDP連接情況信息Linux/UNIX下:

netstat–antp Win下: netstat-ano|findstr"TCP"

工具單擊此處添加段落文字內(nèi)容1.netstat查詢(xún)兩臺(tái)計(jì)算12單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步驟一:通過(guò)客戶端連接DB服務(wù)器單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步13單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步驟二:從DB服務(wù)器查詢(xún)數(shù)據(jù)庫(kù)客戶端連接信息。命令為::netstat–antp|more如下圖紅框所示,查看單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步14單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程ps-ef|grep4311 ps-ef|grep4317此時(shí)通過(guò)在DB服務(wù)器端運(yùn)行netstat命令,我們找到與客戶端通信的DB服務(wù)器端進(jìn)程信息:4311和4317則:?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程p15單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步驟三:通過(guò)在客戶端鍵入如下命令,查看客戶端連接進(jìn)程信息及客戶端進(jìn)程信息: netstat–bnetstat-ano單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步16單擊此處添加段落文字內(nèi)容工具介紹采用工具:列出當(dāng)前連接DB的用戶數(shù)列出當(dāng)前DB有多少事務(wù)查看當(dāng)前執(zhí)行的SQL語(yǔ)句DB服務(wù)器進(jìn)程信息單擊此處添加段落文字內(nèi)容工具介紹采用工具:列出當(dāng)前連接DB的17單擊此處添加段落文字內(nèi)容1.v$session數(shù)據(jù)字典關(guān)注點(diǎn):SADDR:SessionaddressSID:唯一標(biāo)識(shí)SessionidentifierPADDR:擁有這個(gè)會(huì)話的進(jìn)程地址USERNAME:用戶名空的標(biāo)識(shí)是oracle的實(shí)例,后臺(tái)進(jìn)程的process內(nèi)部sessionPROCESS:操作系統(tǒng)客戶機(jī)進(jìn)程IDMACHINE:客戶端machinename。SQL_ADDRESS:指當(dāng)前執(zhí)行的SQL語(yǔ)句的地址PREV_SQL_ADDR:找到上一次已經(jīng)執(zhí)行過(guò)的SQL語(yǔ)句地址

SERVER:servertype(dedicatedorshared)OSUSER:客戶端操作系統(tǒng)用戶名PROGRAM:客戶端應(yīng)用程序STATUS:Statusofthesession:ACTIVE-SessioncurrentlyexecutingSQLINACTIVE-等待操作KILLED-被標(biāo)注為刪除 selectsaddr,sid,paddr,PROCESS,username,statusfromv$session;v$session單擊此處添加段落文字內(nèi)容1.v$session數(shù)據(jù)字典18單擊此處添加段落文字內(nèi)容1.v$transaction數(shù)據(jù)字典關(guān)注點(diǎn):ADDR:標(biāo)識(shí)這個(gè)事務(wù)的唯一地址SES_ADDR:用戶會(huì)話對(duì)象地址與session的SADDR掛鉤

selectADDR,SES_ADDRfromv$transaction;v$transaction單擊此處添加段落文字內(nèi)容1.v$transaction19單擊此處添加段落文字內(nèi)容1.v$process數(shù)據(jù)字典:包含oracle運(yùn)行的所有進(jìn)程信息。常被用于將oracle或服務(wù)進(jìn)程的操作系統(tǒng)進(jìn)程ID與數(shù)據(jù)庫(kù)session之間建立聯(lián)系。關(guān)注點(diǎn):ADDR:進(jìn)程對(duì)象地址SPID:操作系統(tǒng)進(jìn)程IDPID:Oracle進(jìn)程identifierUSERNAME:操作系統(tǒng)進(jìn)程的用戶名。并非Oracle用戶名。PROGRAM:進(jìn)程正在執(zhí)行的程序,和v$session中的program類(lèi)似。 selectaddr,spidfromv$process;v$process單擊此處添加段落文字內(nèi)容1.v$process數(shù)據(jù)字典20單擊此處添加段落文字內(nèi)容1.v$sql數(shù)據(jù)字典關(guān)注點(diǎn):sql_text:前1000個(gè)字符address selectsql_text,addressfromv$sql;v$sql單擊此處添加段落文字內(nèi)容1.v$sql數(shù)據(jù)字典v$sq21單擊此處添加段落文字內(nèi)容查看當(dāng)前所有非系統(tǒng)用戶的連接DB信息: spid(操作系統(tǒng)進(jìn)程)--連接DB客戶端的進(jìn)程號(hào)(netstat–antp查)machine--DB所在服務(wù)器機(jī)器名

selectp.spid,sid,paddr,gram,osuser,machine,PROCESS,s.username,statusfromv$sessions,v$processpwherep.addr=s.paddrands.usernameisnotnull;練習(xí)單擊此處添加段落文字內(nèi)容查看當(dāng)前所有非系統(tǒng)用戶的連接DB信息22單擊此處添加段落文字內(nèi)容動(dòng)態(tài)性能視圖分析獲取客戶端、服務(wù)器端進(jìn)程信息,結(jié)合db數(shù)據(jù)字典,將獲取一系列數(shù)據(jù)庫(kù)信息:#單擊此處添加段落文字內(nèi)容動(dòng)態(tài)性能視圖分析獲取客戶端、服務(wù)器端23單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步驟四:1.查詢(xún)v$transaction數(shù)據(jù)字典,查看當(dāng)前存在的事務(wù)信息及SES_ADDR如下:selectaddr,ses_addrfromv$transaction;2.根據(jù)v$transaction中SES_ADDR字段,從v$session查詢(xún)?nèi)缦滦畔⒓皩?duì)象的PADDR:

selectsaddr,sid,paddr,username,statusfromv$session; selectsaddr,sid,paddr,serial#,username,status,prev_sql_addr,prev_hash_valuefromv$session;單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步24單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程3.根據(jù)v$session中信息及PADDR,從v$process表中查詢(xún)ADDR及

服務(wù)器端對(duì)應(yīng)的進(jìn)程SPID:selectaddr,spidfromv$process;單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程325單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程4.根據(jù)從v$process表中查詢(xún)到的SPID,通過(guò)如下查詢(xún)?cè)揇B服務(wù)器運(yùn)行的進(jìn)程信息:?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程426單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程5.在DB服務(wù)器端運(yùn)行命令,如下所示:?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程527單擊此處添加段落文字內(nèi)容步驟五:從v$session表中獲取SQL_ADDRESS字段與PREV_SQL_ADDR字段。 selectsid,prev_sql_addr,username,statusfromv$session;如何知道該進(jìn)程執(zhí)行的SQL語(yǔ)句單擊此處添加段落文字內(nèi)容步驟五:從v$session表中獲取28單擊此處添加段落文字內(nèi)容如何知道該進(jìn)程執(zhí)行的SQL語(yǔ)句步驟六:根據(jù)v$session表中查詢(xún)到的PREV_SQL_ADDR字段,再?gòu)膙$sql表中查詢(xún)到如下信息。 selectsql_text,addressfromv$sqlwhereaddress=‘3091B2DC’;最后就找到了那個(gè)用戶從什么客戶端發(fā)送什么樣的語(yǔ)句到服務(wù)器端什么進(jìn)程去處理的整個(gè)過(guò)程,從而獲取。單擊此處添加段落文字內(nèi)容如何知道該進(jìn)程執(zhí)行的SQL語(yǔ)句步驟六29單擊此處添加段落文字內(nèi)容跟蹤語(yǔ)句小結(jié)--查找sesssionselectsid,serial#,username,status,machine,osuser,program,logon_timefromv$sessionwherestatus=upper('INACTIVE')orderbylogon_timeasc;selectaddr,ses_addrfromv$transaction;selectsaddr,sid,serial#,username,statusfromv$session;selectsaddr,sid,serial#,username,status,prev_sql_addr,prev_hash_valuefromv$session;-->查找活動(dòng)用戶客戶端進(jìn)程號(hào),程序、tranactionselectsid,username,MACHINE,process,programfromv$transactiont,v$sessionswheret.ses_addr=s.saddr;selectaddr,pid,spid,programfromv$process;selectsaddr,sid,paddr,username,statusfromv$session;--根據(jù)sid,查找相應(yīng)"inactivesessions"對(duì)應(yīng)的sql操作selectsql_text,address,hash_valuefromv$sqlq,v$sessionswheres.sid=144ands.prev_sql_addr=q.address;單擊此處添加段落文字內(nèi)容跟蹤語(yǔ)句小結(jié)--查找sesssion30單擊此處添加段落文字內(nèi)容跟蹤語(yǔ)句小結(jié)--查看當(dāng)前用戶的spid:selectspidfromv$processp,v$sessionswheres.audsid=userenv('sessionid')ands.paddr=p.addr;selectspidfromv$processpjoinv$sessionsonp.addr=s.paddrands.audsid=userenv('sessionid');查看當(dāng)前用戶的sid和serial#:selectsid,serial#,statusfromv$sessionwhereaudsid=userenv('sessionid');查看當(dāng)前用戶的tracefile路徑:selectp.value||'\'||t.instance||'_ora_'||ltrim(to_char(p.spid,'fm99999'))||'.trc'fromv$processp,v$sessions,v$parameterp,v$threadtwherep.addr=s.paddrands.audsid=userenv('sessionid')='user_dump_dest';單擊此處添加段落文字內(nèi)容跟蹤語(yǔ)句小結(jié)--查看當(dāng)前用戶的spi31單擊此處添加段落文字內(nèi)容跟蹤語(yǔ)句小結(jié)--已知spid,查看當(dāng)前正在執(zhí)行或最近一次執(zhí)行的語(yǔ)句:select/*+ordered*/sql_textfromv$sqltextsqlwhere(sql.hash_value,sql.address)in( selectdecode(sql_hash_value,0,prev_hash_value,sql_hash_value), decode(sql_hash_value,0,prev_sql_addr,sql_address) fromv$sessionswheres.paddr=(selectaddrfromv$processpwherep.spid=to_number('&pid'))) orderbypieceasc;--查看鎖和等待:coluser_nameformata10colownerformata10colobject_nameformata15colsidformat999999colserial#format999999colspidformata6select/*+rule*/lpad('',decode(l.xidusn,0,3,0))||l.oracle_usernameuser_name,o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.spidfromv$locked_objectl,dba_objectso,v$sessions,v$processpwherel.object_id=o.object_idandl.session_id=s.sidands.paddr=p.addrorderbyo.object_id,xidusndesc;單擊此處添加段落文字內(nèi)容跟蹤語(yǔ)句小結(jié)--已知spid,查看當(dāng)32目錄TABLEOFCONTENTS三、Oracle“SQLTarce”工具用法一、數(shù)據(jù)庫(kù)連接體系介紹二、SQL跟蹤原理解析四、Oracle“TKPROF”工具用法五、Q&A目錄TABLEOFCONTENTS三、Oracle33單擊此處添加段落文字內(nèi)容Oracle“SQLTrace”介紹SQL_TRACE是Oracle提供的用于進(jìn)行SQL跟蹤的手段,是強(qiáng)有力的輔助診斷工具.在日常的數(shù)據(jù)庫(kù)問(wèn)題診斷和解決中,SQL_TRACE是非常常用的方法。利用Oracle的SQLTRACE實(shí)用程序可以對(duì)指定的查詢(xún)、批處理進(jìn)程和整個(gè)系統(tǒng)做時(shí)間統(tǒng)計(jì)。可以幫助我們徹底地找到系統(tǒng)中可能存在的瓶頸。SQLTRACE有如下的功能:SQLTRACE運(yùn)行這個(gè)查詢(xún)并輸出一個(gè)所執(zhí)行的Oracle查詢(xún)(或

一系列查詢(xún))的統(tǒng)計(jì)信息。SQLTRACE幫助開(kāi)發(fā)人員分析查詢(xún)的每個(gè)部分。用戶跟蹤文件包括:所有的用戶發(fā)出的SQL語(yǔ)句的信息,包括:每條語(yǔ)句的執(zhí)行時(shí)間和占用資源的數(shù)量。因?yàn)楦櫸募男畔⑹菦](méi)有格式化的原始信息,所以用TKPROF工具來(lái)轉(zhuǎn)換信息,使其易于理解。單擊此處添加段落文字內(nèi)容Oracle“SQLTrace”34單擊此處添加段落文字內(nèi)容Oracle“SQLTrace”介紹通過(guò)SQLTrace可收集的信息包括:解析、執(zhí)行、返回?cái)?shù)據(jù)的次數(shù)cpu和執(zhí)行命令的時(shí)間物理讀和邏輯讀的次數(shù)系統(tǒng)處理的記錄數(shù)SQL查詢(xún)執(zhí)行計(jì)劃狀況需要調(diào)整的語(yǔ)句符合以下幾點(diǎn):CPU占用過(guò)多Parse,Execute,Fetch花費(fèi)太多時(shí)間DISK讀取太多,query/current(SGA)中數(shù)據(jù)塊讀取太少訪問(wèn)許多塊,只返回2行單擊此處添加段落文字內(nèi)容Oracle“SQLTrace”35單擊此處添加段落文字內(nèi)容設(shè)置跟蹤參數(shù)SQL_TRACE可以作為初始化參數(shù)在全局啟用,也可以通過(guò)命令行方式在具體session啟用。1.設(shè)置實(shí)例級(jí)跟蹤參數(shù)(在全局啟用)在全局啟用SQL_TRACE會(huì)導(dǎo)致所有進(jìn)程的活動(dòng)被跟蹤,包括后臺(tái)進(jìn)程及所有用戶進(jìn)程,這通常會(huì)導(dǎo)致比較嚴(yán)重的性能問(wèn)題,所以在生產(chǎn)環(huán)境中要謹(jǐn)慎使用,這個(gè)參數(shù)在10g之后是動(dòng)態(tài)參數(shù),可以隨時(shí)調(diào)整,在某些診斷中非常有效。設(shè)置init.ora中的 TIMED_STATISTICES(用于啟動(dòng)或禁止對(duì)定時(shí)統(tǒng)計(jì)信息(如CUP時(shí)間、占

用時(shí)間),以及動(dòng)態(tài)性能表中多種統(tǒng)計(jì)信息的收集功能。) MAX_DUP_FILE_SIZE(若為UNLIMITED則意味著沒(méi)有上限。) USER_DUMP_DEST(設(shè)置跟蹤文件的存儲(chǔ)位置。默認(rèn)為admin/用戶/udump)設(shè)置showparameterUSER_DUMP_DESTshowparameterMAX_DUMP_FILE_SIZEshowparameterTIMED_STATISTICSshowparameterSQL_TRACEaltersessionsetMAX_DUP_FILE_SIZE/timed_statisticstrue;altersystemsetMAX_DUP_FILE_SIZE/timed_statisticsfalse;altersystemsetuser_dump_dest=newdir;altersystemsetsql_trace=true;altersystemsetsql_trace=false;單擊此處添加段落文字內(nèi)容設(shè)置跟蹤參數(shù)SQL_TRACE可以作36單擊此處添加段落文字內(nèi)容設(shè)置跟蹤參數(shù)2.設(shè)置跟蹤參數(shù)(會(huì)話級(jí)啟用)

大多數(shù)時(shí)候我們使用sql_trace跟蹤當(dāng)前進(jìn)程.通過(guò)跟蹤當(dāng)前進(jìn)程可以發(fā)現(xiàn)當(dāng)前操作的后臺(tái)數(shù)據(jù)庫(kù)遞歸活動(dòng)(這在研究數(shù)據(jù)庫(kù)新特性時(shí)尤其有效),研究SQL執(zhí)行,發(fā)現(xiàn)后臺(tái)錯(cuò)誤等。grantselectanydictionaryto用戶名;設(shè)置會(huì)話級(jí)跟蹤參數(shù)如下:SQL>showparameterUSER_DUMP_DEST

NAMETYPEVALUE--------------------------------------------------------------------------user_dump_deststringC:\oracle\admin\ora92\udump

SQL>--步驟1:設(shè)置SQL_TRACE=FALSESQL>showparameterSQL_TRACE

NAMETYPEVALUE------------------------------------------------------sql_tracebooleanFALSESQL>SQL>ALTERSESSIONSETSQL_TRACE=TRUE或SQL>EXECUTEdbms_session.set_sql_trace(true);單擊此處添加段落文字內(nèi)容設(shè)置跟蹤參數(shù)2.設(shè)置跟蹤參數(shù)(會(huì)話37單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤3.啟動(dòng)會(huì)話級(jí)的跟蹤由于SQL_TRACE實(shí)用程序會(huì)增加系統(tǒng)的開(kāi)銷(xiāo),建議用完后及時(shí)設(shè)置為FALSE。如果將整個(gè)實(shí)例級(jí)都進(jìn)行跟蹤的話,則在修改SPFILE參數(shù)sql_trace=true。這樣會(huì)使系統(tǒng)付出更大的代價(jià)。SQL>altersessionsetSQL_TRACE=TRUE;SQL>--不用可設(shè)置為:SQL>altersessionsetSQL_TRACE=FALSE;單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤3.啟動(dòng)會(huì)話級(jí)的跟蹤38單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤4.確定被跟蹤所產(chǎn)生文件的名稱(chēng) 1)先查詢(xún)實(shí)例名:SQL>select'會(huì)話的數(shù)據(jù)實(shí)例名:'||name"實(shí)例名"fromv$database;單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤4.確定被跟蹤所產(chǎn)生39單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤4.確定被跟蹤所產(chǎn)生文件的名稱(chēng) 2)查詢(xún)自己會(huì)話的SID和SERIAL#:selectsubstr(a.spid,1,9)spid, substr(b.sid,1,5)sid, substr(b.serial#,1,5)ser#, substr(b.machine,1,6)box, substr(b.username,1,8)username, substr(b.osuser,1,8)os_user, substr(gram,1,30)programfromv$sessionb,v$processawhereb.paddr=a.addrandtype='USER'orderbyspid;單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤4.確定被跟蹤所產(chǎn)生40單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤4.確定被跟蹤所產(chǎn)生文件的名稱(chēng) 3)啟動(dòng)會(huì)話級(jí)跟蹤:SQL>showuserUSERis“SYS"

SQL>altersessionsetSQL_TRACE=TRUE;

Sessionaltered.

Elapsed:00:00:00.03SQL>

跟蹤用戶名為SYS;被跟蹤的文件的名字可能是:NSTC_5379.trc單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤4.確定被跟蹤所產(chǎn)生41單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤5.開(kāi)始運(yùn)行應(yīng)用以產(chǎn)生跟蹤文件:假設(shè)用戶發(fā)出下面語(yǔ)句:SQL>select*fromt;SQL>insertintotvalues(10,'地球人');SQL>select*fromtwhereid=10;單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤5.開(kāi)始運(yùn)行應(yīng)用以產(chǎn)42單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤6.路徑找產(chǎn)生跟蹤文件:所產(chǎn)生的文件為NSTC_ora_5379.trc則:設(shè)置會(huì)話級(jí)跟蹤為FALSE:SQL>SQL>showuserUSERis“sys"SQL>altersessionsetSQL_TRACE=FALSE;

Sessionaltered.

Elapsed:00:00:00.00單擊此處添加段落文字內(nèi)容啟動(dòng)SQL跟蹤6.路徑找產(chǎn)生跟蹤文43單擊此處添加段落文字內(nèi)容跟蹤其他用戶進(jìn)程在很多時(shí)候我們需要跟蹤其他用戶的進(jìn)程,而不是當(dāng)前用戶,可以通過(guò)Oracle提供的系統(tǒng)包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION來(lái)完成SET_SQL_TRACE_IN_SESSION過(guò)程序要提供三個(gè)參數(shù):

參數(shù)名稱(chēng)參數(shù)類(lèi)型In/OutDefault?SIDNUMBERINSERIAL#NUMBERINSQL_TRACEBOOLEANINEXECUTEdbms_system.set_sql_trace_in_session(session_id,serial_id,true);單擊此處添加段落文字內(nèi)容跟蹤其他用戶進(jìn)程在很多時(shí)候我們需要跟44單擊此處添加段落文字內(nèi)容10046事件說(shuō)明10046事件是Oracle提供的內(nèi)部事件,是對(duì)SQL_TRACE的增強(qiáng).10046事件可以設(shè)置以下四個(gè)級(jí)別:1-啟用標(biāo)準(zhǔn)的SQL_TRACE功能,等價(jià)于sql_trace4-Level1加上綁定值(bindvalues)8-Level1+等待事件跟蹤12-Level1+Level4+Level8在全局設(shè)置在參數(shù)文件中增加: event="10046tracenamecontextforever,level12"此設(shè)置對(duì)所有用戶的所有進(jìn)程生效、包括后臺(tái)進(jìn)程.在會(huì)話設(shè)置SQL>altersessionsetevents'10046tracenamecontextforever';SQL>altersessionsetevents'10046tracenamecontextforever,level8';SQL>altersessionsetevents'10046tracenamecontextoff';單擊此處添加段落文字內(nèi)容10046事件說(shuō)明10046事件是O45單擊此處添加段落文字內(nèi)容10046事件說(shuō)明對(duì)其他用戶session設(shè)置execdbms_system.set_ev(146,4,10046,4,‘n6user’);設(shè)置execdbms_system.set_ev(146,4,10046,0,‘n6user’);停止以上前兩個(gè)參數(shù)分別為sid,serial#selectsid,serial#,usernamefromv$sessionwhereusernameisnotnull;

單擊此處添加段落文字內(nèi)容10046事件說(shuō)明46單擊此處添加段落文字內(nèi)容示例一通過(guò)v$session獲得sid、serial#等信息,確認(rèn)要跟蹤的用戶SQL>selectp.spid,s.sid,s.serial#,gram,osuser,machine,PROCESS,s.username,statusfromv$sessions,v$processpwherep.addr=s.paddrands.usernameisnotnull;2.設(shè)置跟蹤:SQL>execdbms_system.set_sql_trace_in_session(145,10,true)PL/SQLproceduresuccessfullycompleted.....可以等候片刻,跟蹤session執(zhí)行任務(wù),捕獲sql操作.......3.停止跟蹤:SQL>execdbms_system.set_sql_trace_in_session(145,10,false)PL/SQLproceduresuccessfullycompleted.單擊此處添加段落文字內(nèi)容示例一通過(guò)v$session獲得47單擊此處添加段落文字內(nèi)容示例二如何跟蹤某應(yīng)用下發(fā)生的sql操作細(xì)節(jié)1.找出應(yīng)用的sid和serial#selectsid,serial#,usernamefromv$sessionwherelower(program)like'%sqlplus%';2.開(kāi)始跟蹤SQL>execdbms_system.set_sql_trace_in_session(148,57,true)期間做點(diǎn)關(guān)于這個(gè)應(yīng)用的操作(保證和數(shù)據(jù)庫(kù)能有交互)單擊此處添加段落文字內(nèi)容示例二如何跟蹤某應(yīng)用下發(fā)生的sql操48單擊此處添加段落文字內(nèi)容示例二3、停止跟蹤,在user_dump_dest目錄下會(huì)生成跟蹤的trace文件SQL>execdbms_system.set_sql_trace_in_session(148,57,false)4、找出并進(jìn)入user_dump_dest目錄,最后生成那個(gè)文件就是要用的trace文件SQL>setlines1024SQL>showparameteruser_dump_dest單擊此處添加段落文字內(nèi)容示例二3、停止跟蹤,在user_du49單擊此處添加段落文字內(nèi)容示例二5、使用tkprof格式化trace文件,sys=no的意思是不查看sys用戶的操作 $tkproforcl_ora_24884.trcreport.txtsys=no6、查看格式化后的文件report.txt,里頭就有跟蹤期間發(fā)生的所有存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程中執(zhí)行的sql操作也會(huì)逐條顯示)和sql操作,還有各sql執(zhí)行的統(tǒng)計(jì)數(shù)據(jù),可以了解哪些sql快,哪些慢。跟蹤完畢。單擊此處添加段落文字內(nèi)容示例二5、使用tkprof格式化tr50目錄TABLEOFCONTENTS四、Oracle“TKPROF”工具用法一、數(shù)據(jù)庫(kù)連接體系介紹二、SQL跟蹤原理解析三、Oracle“SQLTarce”工具用法五、Q&A目錄TABLEOFCONTENTS四、Oracle51單擊此處添加段落文字內(nèi)容TKPROF介紹Tkprof是一個(gè)用于分析Oracle跟蹤文件并且產(chǎn)生一個(gè)更加清晰合理的輸出結(jié)果的可執(zhí)行工具。如果一個(gè)系統(tǒng)的執(zhí)行效率比較低,一個(gè)比較好的方法是通過(guò)跟蹤用戶的會(huì)話并且使用Tkprof工具使用排序功能格式化輸出,從而找出有問(wèn)題的SQL語(yǔ)句:系統(tǒng)對(duì)SQL語(yǔ)句進(jìn)行跟蹤后,在產(chǎn)生USER_DUMP_DEST路徑產(chǎn)生了.TRC文件確定結(jié)束跟蹤后,可用TKPROF實(shí)用程序進(jìn)行分析;TKPROF將跟蹤文件作為輸入文件,在經(jīng)過(guò)格式化后產(chǎn)生輸出文件;由于跟蹤文件是一系列的文件,在使用TKPROF時(shí)可以對(duì)單個(gè)文件進(jìn)行格式化,也可以將所有的跟蹤文件串在一起在進(jìn)行格式化;逐一對(duì)單個(gè)文件進(jìn)行TKPROF,分別產(chǎn)生相應(yīng)的輸出文件;單擊此處添加段落文字內(nèi)容TKPROF介紹Tkprof是一個(gè)52單擊此處添加段落文字內(nèi)容TKPROF作用標(biāo)記需要調(diào)整的語(yǔ)句

使用TKPROF格式化的文件很容易看出需要調(diào)整的SQL語(yǔ)句。查找的依據(jù)是:*耗費(fèi)大量的CPU資源*花費(fèi)較長(zhǎng)的時(shí)間進(jìn)行SQL分析、執(zhí)行和獲取*從磁盤(pán)讀大量的數(shù)據(jù)塊,而從SGA區(qū)讀的數(shù)據(jù)很少*訪問(wèn)大量的數(shù)據(jù)塊但只返回一點(diǎn)數(shù)據(jù)一旦找到這些語(yǔ)句就可以用執(zhí)行計(jì)劃工具來(lái)進(jìn)一步?jīng)Q定為什么這些語(yǔ)句性能這么低了。單擊此處添加段落文字內(nèi)容TKPROF作用標(biāo)記需要調(diào)整的語(yǔ)句53單擊此處添加段落文字內(nèi)容TKPROF工具介紹TKPROF命令語(yǔ)法:附加參數(shù):filename1指定的輸入文件,可以是多個(gè)文件聯(lián)起來(lái)。Filename2格式化輸出文件。SORT在輸出文件前先排序。如果省去則按照實(shí)際使用的順序輸出到文件中。排序選項(xiàng)有以下多種:PRSCNT語(yǔ)句解析的數(shù)目PRSCPU語(yǔ)句解析所占用的CPU時(shí)間PRSELA語(yǔ)句解析所占用的時(shí)間PRSDSK語(yǔ)句解析期間,從磁盤(pán)進(jìn)行物理讀的數(shù)目TKPROFfilename1,filename2[SORT=[opion][,option]][PRINT=integer][AGGREGATE=[YES|NO]][INSERT=filename3][SYS=[YES|NO]][[TABLE=schema.table]|[EXPLAIN=user/password]][RECORD=filename]單擊此處添加段落文字內(nèi)容TKPROF工具介紹TKPROF命54單擊此處添加段落文字內(nèi)容TKPROF工具介紹附加參數(shù)用于指定期望的信息。這些選項(xiàng)如下所示:EXPLAN為跟蹤文件中的每條語(yǔ)句生成一個(gè)執(zhí)行計(jì)劃。產(chǎn)生的結(jié)果保存在指定模式的PLAN_TABLE中,該模式在命令中給出,即命令中必須要給出用戶名和口令。TABLE指定執(zhí)行計(jì)劃保存的表名稱(chēng),替換缺省的PLAN_TABLE表名。SYS表明是否格式化的文件包括遞歸的SQL語(yǔ)句。SORT表明格式化的文件信息排序的規(guī)則。RECORD指定跟蹤文件中的SQL語(yǔ)句寫(xiě)入哪一個(gè)文件。使你能將SQL語(yǔ)句與附加的資源使用信息分開(kāi)。PRINT指定格式化的跟蹤文件最多可以寫(xiě)入的SQL語(yǔ)句的數(shù)量。INSERT執(zhí)行時(shí)創(chuàng)建一個(gè)腳本,用于生成一個(gè)TKPROF_TABLE表。AGGREGATE決定是否將多個(gè)執(zhí)行相同語(yǔ)句分析的結(jié)果合并。單擊此處添加段落文字內(nèi)容TKPROF工具介紹附加參數(shù)用于指定55單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析表式統(tǒng)計(jì)信息

PARSE將把SQL語(yǔ)句轉(zhuǎn)化為執(zhí)行規(guī)劃,其中包括對(duì)安全授權(quán)的檢查,以及對(duì)存在表、列和其他訪問(wèn)對(duì)象進(jìn)行檢查。EXECUTE由ORACLE進(jìn)行語(yǔ)句執(zhí)行。對(duì)于INSERT、UPDATE、DELETE的語(yǔ)句,將對(duì)數(shù)據(jù)進(jìn)行修改;對(duì)于SELECT語(yǔ)句,將對(duì)所選行進(jìn)行確定。FETCH將檢查出查詢(xún)的返回行,只有SELECT語(yǔ)句能夠執(zhí)行取數(shù)據(jù)的操作。

單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析表式統(tǒng)計(jì)信息

56單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析表統(tǒng)計(jì)信息:COUNT:

語(yǔ)句解析、執(zhí)行或取數(shù)據(jù)等執(zhí)行的數(shù)據(jù)庫(kù)調(diào)用數(shù)量;CPU某條語(yǔ)句進(jìn)行解析、執(zhí)行和取數(shù)據(jù)等數(shù)據(jù)庫(kù)調(diào)用所占用地時(shí)間,單位為秒;ELAPSED某條語(yǔ)句進(jìn)行解析、執(zhí)行和取數(shù)據(jù)等處理數(shù)據(jù)庫(kù)調(diào)用花費(fèi)的總的時(shí)間,單位為秒;DISK對(duì)于所有語(yǔ)句解析、執(zhí)行和取數(shù)據(jù)等調(diào)用,從磁盤(pán)數(shù)據(jù)文件中物理讀取的數(shù)據(jù)塊數(shù)目;注意:這不是物理I/O操作的數(shù)量,如果這個(gè)值大于邏輯讀的數(shù)量(disk>query+current),這意味著數(shù)據(jù)塊填充進(jìn)了臨時(shí)表空間;QHERY以一致模式從高速緩存邏輯讀取的塊數(shù)量。通常,這類(lèi)型的邏輯讀用作查詢(xún)。CURRENT在當(dāng)前模式下從高速緩存邏輯讀取的塊數(shù)量。這類(lèi)邏輯讀被INSERT、DELETE、UPDATE等語(yǔ)句所使用。ROWSSQL語(yǔ)句所處理行的總數(shù)目,它并不包括SQL語(yǔ)句的子查詢(xún)所處理的行數(shù)。對(duì)于INSERT、DELETE、MERGE以及UPDATE等語(yǔ)句來(lái)說(shuō),這是所影響的行數(shù)量。單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析表統(tǒng)計(jì)信息:57單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析58單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析對(duì)于每個(gè)行源操作來(lái)說(shuō),提供如下的運(yùn)行時(shí)統(tǒng)計(jì):cr是一致性模式下邏輯讀出的數(shù)據(jù)塊數(shù)。pr是從磁盤(pán)物理讀出的數(shù)據(jù)塊數(shù)。pw是物理寫(xiě)入磁盤(pán)的數(shù)據(jù)塊數(shù)。time是以微秒表示的總的消逝時(shí)間。注意根據(jù)統(tǒng)計(jì)得到的值不總是精確的。實(shí)際上,為了減少開(kāi)銷(xiāo),可能用了采樣。cost是操作的評(píng)估開(kāi)銷(xiāo)。這個(gè)值只有在Oracle11g才提供。size是操作返回的預(yù)估數(shù)據(jù)量(字節(jié)數(shù))。這個(gè)值只有在Oracle11g才提供。card是操作返回的預(yù)估行數(shù)。這個(gè)值只有在Oracle11g才提供。單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析對(duì)于每個(gè)行源操作來(lái)59單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析輸出文件的結(jié)尾給出了所有關(guān)于跟蹤文件的信息:跟蹤文件名稱(chēng)、版本號(hào)、用于這個(gè)分析所使用的參數(shù)sort的值。所有會(huì)話數(shù)量與SQL語(yǔ)句數(shù)量。顯示組成跟蹤文件的行數(shù)所有SQL語(yǔ)句用去的時(shí)間(毫秒)。注意:知道整個(gè)跟蹤文件消耗了多少時(shí)間是很關(guān)鍵單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析輸出文件的結(jié)尾給出60單擊此處添加段落文字內(nèi)容案例解析例1:$tkprofora_1234.trctrace.txtsys=noexplain=scott/111111該命令將忽略原始文件中的遞歸SQL;在格式化的跟蹤文件中包括每條SQL語(yǔ)句的執(zhí)行計(jì)劃PLAN_TABLE依賴(lài)于用戶JOE模式。例2:$tkprofora_1234.trctrace.txtprint=10record=sql.txt該命令將翻譯跟蹤文件ora_1234.trc并保存頭10條SQL語(yǔ)句到輸出文件sql.txt,用于保存原始跟蹤文件的頭10條SQL語(yǔ)句。例3:$tkprofora_1234.trctrace.txtinsert=trace.sqlsort=fchrow該命令將翻譯跟蹤文件ora_1234.trc并保存到輸出文件trace.txt;創(chuàng)建第二個(gè)文件trace.sql,用于保存生成TKPORF_TABLE表的SQL命令。如果沒(méi)有排序參數(shù)fchrow,TKPROF將會(huì)按照?qǐng)?zhí)行的順序輸出到trace.txt文件中去。例4:tkprofnstc_ora_4408.trc2.txtAGGREGATE=no合并執(zhí)行相同的結(jié)果單擊此處添加段落文字內(nèi)容案例解析例1:$tkprofora61單擊此處添加段落文字內(nèi)容解讀與分析格式化文件(示例一)被TKPROF分析的格式化文件,如下所示:?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容解讀與分析格式化文件(示例一)被TK62單擊此處添加段落文字內(nèi)容解讀與分析格式化文件(示例一)分析:跟蹤文件中發(fā)現(xiàn),第三條語(yǔ)句被分析了一次,執(zhí)行了五次,并執(zhí)行了250次獲取操作。這個(gè)過(guò)程耗費(fèi)了CPU0.18秒的時(shí)間,整個(gè)語(yǔ)句執(zhí)行花費(fèi)了0.20秒的時(shí)間。它需要從磁盤(pán)讀取54個(gè)數(shù)據(jù)塊,從SGA讀取266個(gè)數(shù)據(jù)塊并返回245行數(shù)據(jù)在最后一行顯示所有統(tǒng)計(jì)信息。單擊此處添加段落文字內(nèi)容解讀與分析格式化文件(示例一)分析:63單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析二執(zhí)行計(jì)劃執(zhí)行統(tǒng)計(jì)行源操作單擊此處添加段落文字內(nèi)容格式后信息內(nèi)容解析二執(zhí)行執(zhí)行統(tǒng)計(jì)行源64單擊此處添加段落文字內(nèi)容解讀與分析格式化文件(示例二)分析:在本例中,表sales有918843行而根據(jù)跟蹤文件僅返回540318行,這表示W(wǎng)HERE條件過(guò)濾了大約41%的行。此后的GROUPBY進(jìn)一步減少結(jié)果到16348行。單擊此處添加段落文字內(nèi)容解讀與分析格式化文件(示例二)分析:65單擊此處添加段落文字內(nèi)容解讀與分析格式化文件用編輯器打開(kāi),如(下面語(yǔ)句1):,fromobj$o,user$u,trigger$twheret.baseobject=:1andt.obj#=o.obj#ando.owner#=u.user#orderbyo.obj#

callcountcpuelapseddiskquerycurrentrows---------------------------------------------------------------------------------------------------------parse10.010.010000execute10.010.010000getch10.000.000100---------------------------------------------------------------------------------------------------------total30.020.020100單擊此處添加段落文字內(nèi)容解讀與分析格式化文件用編輯器打開(kāi),如66單擊此處添加段落文字內(nèi)容解讀與分析格式化文件用編輯器打開(kāi)格式化文件(下面語(yǔ)句2):Insertintoemployee(employee_id,last_name,first_name)Values(295,‘Joe’,‘Johnson’);

callcountcpuelapseddiskquerycurrentrows---------------------------------------------------------------------------------------------------------parse10.080.120000execute10.040.2053111getch00.000.000100---------------------------------------------------------------------------------------------------------total20.120.3253111單擊此處添加段落文字內(nèi)容解讀與分析格式化文件用編輯器打開(kāi)格式67單擊此處添加段落文字內(nèi)容解讀與分析格式化文件selectlast_name,title,department_idfromemployee;

callcountcpuelapseddiskquerycurrentrows---------------------------------------------------------------------------------------------------------parse10.010.010000execute50.080.090000getch2500.090.105420264245---------------------------------------------------------------------------------------------------------total2560.180.205420264245parse

分析是將SQL轉(zhuǎn)成執(zhí)行計(jì)劃,包括安全授權(quán)及表等存在性檢查execute Oracle執(zhí)行的語(yǔ)句,如insert,update,delete及select等f(wàn)etch

查詢(xún)所返回的行,只有select語(yǔ)句執(zhí)行。

Count

語(yǔ)句的解釋、執(zhí)行或取數(shù)調(diào)用的次數(shù)。CPU

執(zhí)行某條語(yǔ)句所用CPU的時(shí)間。Elapsed

解釋語(yǔ)句、執(zhí)行語(yǔ)句或取數(shù)所用去的時(shí)間(秒)。Disk

語(yǔ)句解釋、執(zhí)行和取數(shù)前,從磁盤(pán)文件中物理讀的塊數(shù)。Query

所有解釋、執(zhí)行和取數(shù)等的調(diào)用期間,從SGA區(qū)所讀的回滾塊數(shù)。Current

所有解釋、執(zhí)行和取數(shù)等的調(diào)用期間,從SGA區(qū)所讀的數(shù)據(jù)塊數(shù)。Rows SQL語(yǔ)句所處理的行數(shù)。用編輯器打開(kāi)格式化文件(下面語(yǔ)句3):?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容解讀與分析格式化文件select68單擊此處添加段落文字內(nèi)容解讀與分析格式化文件第3個(gè)語(yǔ)句分析:分析1次;執(zhí)行5次;取數(shù)250行;總CPU是0.18秒;處理用去0.20秒;從磁盤(pán)讀54數(shù)據(jù)塊;從SGA中得到266(202+64);返回245行。結(jié)論:花去0.18秒的CPU時(shí)間取到245行,還能接受。--消耗超出CPU資源的能力;分析、執(zhí)行或取回的時(shí)間太長(zhǎng);訪問(wèn)太多的數(shù)據(jù)塊但只返回少量的行。用編輯器打開(kāi)格式化文件(下面語(yǔ)句3):?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容解讀與分析格式化文件第3個(gè)語(yǔ)句分析:69單擊此處添加段落文字內(nèi)容總結(jié)使用sql_trace能跟蹤數(shù)據(jù)庫(kù)的非常多后臺(tái)操作,有利于我們發(fā)現(xiàn)問(wèn)題的所在想要研究oracle的內(nèi)部活動(dòng)或后臺(tái)操作也能通過(guò)sql_trace跟蹤sql_trace/10046是oracle提供的最為有效的診斷工具之一單擊此處添加段落文字內(nèi)容總結(jié)使用sql_trace能跟蹤數(shù)據(jù)70目錄TABLEOFCONTENTS五、Q&A一、數(shù)據(jù)庫(kù)連接體系介紹二、SQL跟蹤原理解析四、Oracle“TKPROF”工具用法三、Oracle“SQLTarce”工具用法目錄TABLEOFCONTENTS五、Q&A一71Q&A》總結(jié)

》認(rèn)識(shí)》疑問(wèn)Q&A》總結(jié)72加快推進(jìn),實(shí)事求是!結(jié)束加快推進(jìn),實(shí)事求是!結(jié)束73培訓(xùn)部電聯(lián)方式:任亞501王宇418鄒511郭紅503郭504謝謝!THANKS培訓(xùn)部電聯(lián)方式:謝謝!74()OracleSQL跟蹤技術(shù)—在職員工(技術(shù)篇)部門(mén):培訓(xùn)部日期:2012.03.23本文檔及其所含信息為內(nèi)部保密材料,由北京九恒星科技股份有限公司擁有,公司專(zhuān)屬知識(shí)產(chǎn)權(quán)未經(jīng)書(shū)面授權(quán),不得對(duì)外泄露COPYRIGHT?保留所有權(quán)利()OracleSQL跟蹤技術(shù)部門(mén):培訓(xùn)部本文檔及75課程修訂修訂編號(hào)修訂作者變更頁(yè)碼版本號(hào)變更日期課程狀態(tài)備注第一次郭鵬1-74V1.02012-03-26待評(píng)審第二次第三次第四次第五次第六次課程修訂修訂編號(hào)修訂作者變更頁(yè)碼版本號(hào)變更日期課程狀態(tài)備注第76課程介紹您將掌握SQL跟蹤技術(shù)原理、方法及過(guò)程,熟悉動(dòng)態(tài)性能視圖表的作用及用法,掌握SQLTrace、TKPROF工具應(yīng)用,并能分析各類(lèi)ORACLE語(yǔ)句問(wèn)題,為實(shí)際工作做到方法的指引。課程名稱(chēng)《OracleSQL跟蹤技術(shù)》培訓(xùn)目標(biāo)實(shí)施、開(kāi)發(fā)、測(cè)試崗位各級(jí)技術(shù)人員培訓(xùn)對(duì)象2個(gè)小時(shí)培訓(xùn)課時(shí)培訓(xùn)方式面授課程層級(jí)初、中級(jí)課程介紹您將掌握SQL跟蹤技術(shù)原理、方法及過(guò)程,熟悉動(dòng)態(tài)性能77培訓(xùn)內(nèi)容綱要通過(guò)本次培訓(xùn),您將學(xué)習(xí)到以下核心內(nèi)容:數(shù)據(jù)庫(kù)連接體系結(jié)構(gòu)客戶端、服務(wù)器SQL跟蹤原理及過(guò)程方法SQLTrace工具介紹、使用方法及實(shí)踐TKPROF工具介紹、使用方法及實(shí)踐培訓(xùn)內(nèi)容綱要通過(guò)本次培訓(xùn),您將學(xué)習(xí)到以下核心內(nèi)容:78目錄TABLEOFCONTENTS一、數(shù)據(jù)庫(kù)連接體系介紹二、SQL跟蹤原理解析三、Oracle“SQLTarce”工具用法四、Oracle“TKPROF”工具用法五、Q&A目錄TABLEOFCONTENTS一、數(shù)據(jù)庫(kù)連接體79單擊此處添加段落文字內(nèi)容DB網(wǎng)絡(luò)連接架構(gòu)多進(jìn)程(單線程)P/T單進(jìn)程多線程P/T多進(jìn)程多線程P/T流行單擊此處添加段落文字內(nèi)容DB網(wǎng)絡(luò)連接架構(gòu)多進(jìn)程(單線程)80單擊此處添加段落文字內(nèi)容三層技術(shù)架構(gòu)DatabaseMCVCacheAJAX(AsynchronousJavaScriptandXML)JPA(HibernateEntityManager)JSPHTMLEXTServletControllerQuartzJBMPRPCJMS業(yè)務(wù)邏輯…SpringJersey(JAXRS)WEB

服務(wù)器單擊此處添加段落文字內(nèi)容三層技術(shù)架構(gòu)DatabaseMCVC81單擊此處添加段落文字內(nèi)容DB連接模式OracleServer對(duì)外提供兩種服務(wù)的鏈接:

共享服務(wù)器模式多個(gè)連接過(guò)來(lái),則后臺(tái)只有一個(gè)進(jìn)程進(jìn)行服務(wù)。專(zhuān)有服務(wù)器模式

一個(gè)連接過(guò)來(lái),則后臺(tái)生成一個(gè)單獨(dú)的進(jìn)程進(jìn)行服務(wù)。(selectsid,serial#,username,status,program,serverfromv$sessionwhereusernameisnotnull;)單擊此處添加段落文字內(nèi)容DB連接模式OracleServ82單擊此處添加段落文字內(nèi)容DB連接模式DB采用專(zhuān)有服務(wù)器模式:?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容DB連接模式DB采用專(zhuān)有服務(wù)器模83目錄TABLEOFCONTENTS二、SQL跟蹤原理解析一、數(shù)據(jù)庫(kù)連接體系介紹三、Oracle“SQLTarce”工具用法四、Oracle“TKPROF”工具用法五、Q&A目錄TABLEOFCONTENTS二、SQL跟蹤84單擊此處添加段落文字內(nèi)容任務(wù)

假如很多用戶訪問(wèn)DB服務(wù)器,我如何知曉:是那個(gè)用戶訪問(wèn)DB服務(wù)器?那個(gè)用戶對(duì)應(yīng)那個(gè)事務(wù)?那個(gè)事務(wù)執(zhí)行很慢?(如何找到對(duì)應(yīng)SQL語(yǔ)句)單擊此處添加段落文字內(nèi)容任務(wù) 假如很多用戶訪問(wèn)DB服務(wù)器,我85單擊此處添加段落文字內(nèi)容1.netstat查詢(xún)兩臺(tái)計(jì)算機(jī)TCP、UDP連接情況信息Linux/UNIX下:

netstat–antp Win下: netstat-ano|findstr"TCP"

工具單擊此處添加段落文字內(nèi)容1.netstat查詢(xún)兩臺(tái)計(jì)算86單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步驟一:通過(guò)客戶端連接DB服務(wù)器單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步87單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步驟二:從DB服務(wù)器查詢(xún)數(shù)據(jù)庫(kù)客戶端連接信息。命令為::netstat–antp|more如下圖紅框所示,查看單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步88單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程ps-ef|grep4311 ps-ef|grep4317此時(shí)通過(guò)在DB服務(wù)器端運(yùn)行netstat命令,我們找到與客戶端通信的DB服務(wù)器端進(jìn)程信息:4311和4317則:?jiǎn)螕舸颂幪砑佣温湮淖謨?nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程p89單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步驟三:通過(guò)在客戶端鍵入如下命令,查看客戶端連接進(jìn)程信息及客戶端進(jìn)程信息: netstat–bnetstat-ano單擊此處添加段落文字內(nèi)容跟蹤、監(jiān)控客戶端連接db服務(wù)器過(guò)程步90單擊此處添加段落文字內(nèi)容工具介紹采用工具:列出當(dāng)前連接DB的用戶數(shù)列出當(dāng)前DB有多少事務(wù)查看當(dāng)前執(zhí)行的SQL語(yǔ)句DB服務(wù)器進(jìn)程信息單擊此處添加段落文字內(nèi)容工具介紹采用工具:列出當(dāng)前連接DB的91單擊此處添加段落文字內(nèi)容1.v$session數(shù)據(jù)字典關(guān)注點(diǎn):SADDR:SessionaddressSID:唯一標(biāo)識(shí)SessionidentifierPADDR:擁有這個(gè)會(huì)話的進(jìn)程地址USERNAME:用戶名空的標(biāo)識(shí)是oracle的實(shí)例,后臺(tái)進(jìn)程的process內(nèi)部sessionPROCESS:操作系統(tǒng)客戶機(jī)進(jìn)程IDMACHINE:客戶端machinename。SQL_ADDRESS:指當(dāng)前執(zhí)行的SQL語(yǔ)句的地址PREV_SQL_ADDR:找到上一次已經(jīng)執(zhí)行過(guò)的SQL語(yǔ)句地址

SERVER:servertype(dedicatedorshared)OSUSER:客戶端操作系統(tǒng)用戶名PROGRAM:客戶端應(yīng)用程序STATUS:Statusofthesession:ACTIVE-SessioncurrentlyexecutingSQLINACTIVE-等待操作KILLED-被標(biāo)注為刪除 selectsaddr,sid,paddr,PROCESS,username,statusfromv$session;v$session單擊此處添加段落文字內(nèi)容1.v$session數(shù)據(jù)字典92單擊此處添加段落文字內(nèi)容1.v$transaction數(shù)據(jù)字典關(guān)注點(diǎn):ADDR:標(biāo)識(shí)這個(gè)事務(wù)的唯一地址SES_ADDR:用戶會(huì)話對(duì)象地址與session的SADDR掛鉤

selectADDR,SES_ADDRfromv$transaction;v$transaction單擊此處添加段落文字內(nèi)容1.v$transaction93單擊此處添加段落文字內(nèi)容1.v$process數(shù)據(jù)字典:包含oracle運(yùn)行的所有進(jìn)程信息。常被用于將oracle或服務(wù)進(jìn)程的操作系統(tǒng)進(jìn)程ID與數(shù)據(jù)庫(kù)session之間建立聯(lián)系。關(guān)注點(diǎn):ADDR:進(jìn)程對(duì)象地址SPID:操作系統(tǒng)進(jìn)程IDPID:Oracle進(jìn)程identifierUSERNAME:操作系統(tǒng)進(jìn)程的用戶名。并非Oracle用戶名。PROGRAM:進(jìn)程正在執(zhí)行的程序,和v$session中的program類(lèi)似。 selectaddr,spidfromv$process;v$process單擊此處添加段落文字內(nèi)容1.v$process數(shù)據(jù)字典94單擊此處添加段落文字內(nèi)容1.v$sql數(shù)據(jù)字典關(guān)注點(diǎn):sql_text:前1000個(gè)字符address selectsql_text,addressfromv$sql;v$sql單擊此處添加段落文字內(nèi)容1.v$sql數(shù)據(jù)字典v$sq95單擊此處添加段落文字內(nèi)容查看當(dāng)前所有非系統(tǒng)用戶的連接DB信息: spid(操作系統(tǒng)進(jìn)程)--連接DB客戶端的進(jìn)程號(hào)(netstat–ant

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論