使用Oracle跟蹤文件的問(wèn)題詳解
一、什么是跟蹤文件?
跟蹤文件中包含了大量而詳細(xì)的診斷和調(diào)試信息。通過(guò)對(duì)跟蹤文件的解讀和分析,我們可以定位問(wèn)題、分析問(wèn)題和解決問(wèn)題。從跟蹤文件的產(chǎn)生的來(lái)源來(lái)看,跟蹤文件又可以分為兩類(lèi):一類(lèi)是數(shù)據(jù)庫(kù)的操作人員有意生成的;另一類(lèi)則是由于出現(xiàn)了異常錯(cuò)誤,由數(shù)據(jù)庫(kù)自動(dòng)生成的。對(duì)于后一類(lèi),只對(duì)Oracle內(nèi)部的技術(shù)支持人員是有用的,但對(duì)于我們,則多半看不懂。前一類(lèi),則是我們經(jīng)常用到的,幫助我們分析、調(diào)整和優(yōu)化應(yīng)用性能,處理并解決問(wèn)題。
那么在哪里可以找到跟蹤文件呢?通過(guò)查詢(xún)數(shù)據(jù)字典v$diag_info可以確定跟蹤文件的存儲(chǔ)路徑,如下所示。
select * from v$diag_info;

進(jìn)入目錄/u01/app/oracle/diag/rdbms/orcl/orcl/trace可以看到以trc為后綴的跟蹤文件,如下圖所示。

二、跟蹤文件的命名規(guī)則
一個(gè)跟蹤文件的名字一般由以下幾部分組成:
- ORACLE_SID
- 固定字符
- 服務(wù)器的進(jìn)程ID號(hào)
- 文件后綴名 .trc
- 各部分之間以下劃線(xiàn)連接。
例如:orcl_mmon_12210.trc,其中:“orcl" 是本環(huán)境下數(shù)據(jù)庫(kù)的SID,"12210"為產(chǎn)生該跟蹤文件會(huì)話(huà)所使用的服務(wù)器進(jìn)程ID號(hào)。如何知道我的ORACLE_SID和會(huì)話(huà)所使用的服務(wù)器進(jìn)程ID呢?
三、如何確定跟蹤文件?
為了演示的方便,我們給一個(gè)普通用戶(hù)scott授予dba的角色。
1、使用管理登錄,并授予scott授予dba的角色
[oracle@oracle12c ~]$ sqlplus / as sysdba SQL> grant dba to scott; Grant succeeded. SQL>
2、確定Oracle SID,如下所示。這里的SID就是:orcl
SQL> select instance_name from V$instance; INSTANCE_NAME ---------------- orcl SQL>
3、切換到scott用戶(hù),并確定會(huì)話(huà)ID
SQL> conn scott/tiger
Connected.
SQL> select sid from v$mystat where rownum=1;
SID
----------
70
SQL>
4、根據(jù)會(huì)話(huà)ID,確定會(huì)話(huà)的地址信息
SQL> select paddr from v$session where sid=70; PADDR ---------------- 000000006DAB6588 SQL>
5、根據(jù)會(huì)話(huà)的地址信息,確定操作系統(tǒng)的進(jìn)程號(hào)
SQL> select spid from v$process where addr='000000006DAB6588'; SPID ------------------------ 54685 SQL>
進(jìn)入目錄/u01/app/oracle/diag/rdbms/orcl/orcl/trace會(huì)發(fā)現(xiàn),此時(shí)并不存在包含54685的跟蹤文件,原因是要使用跟蹤文件需要手動(dòng)開(kāi)啟會(huì)話(huà)的跟蹤。
6、開(kāi)啟會(huì)話(huà)的跟蹤
SQL> alter session set sql_trace=true; Session altered. SQL>
7、執(zhí)行一條簡(jiǎn)單的SQL語(yǔ)句,并檢查/u01/app/oracle/diag/rdbms/orcl/orcl/trace目錄,這時(shí)候就可以看到生成的跟蹤文件。
[oracle@oracle12c trace]$ pwd /u01/app/oracle/diag/rdbms/orcl/orcl/trace [oracle@oracle12c trace]$ ls *54685.trc orcl_ora_54685.trc [oracle@oracle12c trace]$
四、使用跟蹤文件診斷SQL
根據(jù)跟蹤對(duì)于診斷SQL語(yǔ)句是非常有用的,下面通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)說(shuō)明。
1、執(zhí)行下面的的SQL語(yǔ)句
select * from scott.emp where deptno=10; select * from scott.emp where deptno=20; select * from scott.emp where deptno=30;
這三條SQL分別查詢(xún)10、20和30號(hào)部門(mén)的員工。通過(guò)觀察發(fā)現(xiàn),這三條SQL除了where的條件的參數(shù)值不一樣,其他部分都是一樣的。這樣的SQL語(yǔ)句叫做“重復(fù)的SQL”。如果數(shù)據(jù)庫(kù)中存在大量的重復(fù)SQL,會(huì)使得每次在執(zhí)行的時(shí)候都會(huì)進(jìn)行SQL的解析,再生成執(zhí)行計(jì)劃。從而影響數(shù)據(jù)庫(kù)的性能。
下面通過(guò)跟蹤文件來(lái)驗(yàn)證上面的結(jié)論。
2、由于前面開(kāi)啟了會(huì)話(huà)的跟蹤,如果不再需要進(jìn)行跟蹤了,需要手動(dòng)關(guān)閉一下。
SQL> alter session set sql_trace=false; Session altered. SQL>
3、使用tkprof工具格式化跟蹤文件
[oracle@oracle12c trace]$ tkprof orcl_ora_54685.trc /home/oracle/a.txt sys=no sort=fchela TKPROF: Release 12.2.0.1.0 - Development on Mon Jun 28 10:37:48 2021 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. [oracle@oracle12c trace]$
4、查看生成的a.txt文件,如下所示:
SQL ID: 1mvxd868z75nf Plan Hash: 3956160932 select * from scott.emp where deptno=30 SQL ID: 2nbac4n9hnzth Plan Hash: 3956160932 select * from scott.emp where deptno=20 SQL ID: 062r5atccuyv4 Plan Hash: 3956160932 select * from scott.emp where deptno=10
可以看成盡管三條SQL對(duì)應(yīng)的SQL ID不一樣,但是生成的Plan Hash是一樣的。這就說(shuō)明這三條SQL的執(zhí)行計(jì)劃是一樣的。既然如此,我們可以使用綁定變量的方式來(lái)改寫(xiě)這三條SQL。讓這三條SQL語(yǔ)句在執(zhí)行的時(shí)候,不用每次都生成執(zhí)行計(jì)劃。只需要復(fù)用第一次生成的執(zhí)行計(jì)劃即可。從而提高性能。
以上就是使用Oracle的跟蹤文件的詳細(xì)內(nèi)容,更多關(guān)于Oracle跟蹤文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
oracle iSQL*PLUS配置設(shè)置圖文說(shuō)明
iSQL*PLUS是從ORACLE 9i開(kāi)始提供的新功能,是SQL*PLUS的Web形式(ORACLE 11g已經(jīng)不支持)是基于三層結(jié)構(gòu)設(shè)計(jì)的,需要的朋友可以了解下2012-12-12
Oracle索引(B*tree與Bitmap)的學(xué)習(xí)總結(jié)
本篇文章是對(duì)Oracle索引(B*tree與Bitmap)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
ORACLE正則匹配查詢(xún)LIKE查詢(xún)多個(gè)值檢索數(shù)據(jù)庫(kù)對(duì)象
這篇文章主要介紹了ORACLE正則匹配查詢(xún),LIKE查詢(xún)多個(gè)值檢索數(shù)據(jù)庫(kù)對(duì)象,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
處理Oracle 監(jiān)聽(tīng)文件listener.log問(wèn)題
這篇文章主要介紹了處理Oracle 監(jiān)聽(tīng)文件listener.log問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵
本節(jié)文章主要介紹了oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵,示例代碼如下,需要的朋友可以參考下2014-07-07
oracle創(chuàng)建用戶(hù)過(guò)程詳解
這篇文章主要介紹了oracle創(chuàng)建用戶(hù)過(guò)程詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Oracle 10g 服務(wù)器端安裝預(yù)備步驟(詳細(xì)圖文教程)
這篇文章主要介紹了Oracle 10g 服務(wù)器端安裝預(yù)備步驟(詳細(xì)圖文教程),需要的朋友可以參考下2017-03-03

