一、什么是跟蹤檔案?
跟蹤檔案中包含了大量而詳細的診斷和除錯資訊,通過對跟蹤檔案的解讀和分析,我們可以定位問題、分析問題和解決問題,從跟蹤檔案的產生的來源來看,跟蹤檔案又可以分為兩類:一類是資料庫的操作人員有意生成的;另一類則是由于出現了例外錯誤,由資料庫自動生成的,對于后一類,只對Oracle內部的技術支持人員是有用的,但對于我們,則多半看不懂,前一類,則是我們經常用到的,幫助我們分析、調整和優化應用性能,處理并解決問題,
那么在哪里可以找到跟蹤檔案呢?通過查詢資料字典v$diag_info可以確定跟蹤檔案的存盤路徑,如下所示,
select * from v$diag_info;
進入目錄/u01/app/oracle/diag/rdbms/orcl/orcl/trace可以看到以trc為后綴的跟蹤檔案,如下圖所示,
二、跟蹤檔案的命名規則
一個跟蹤檔案的名字一般由以下幾部分組成:
- ORACLE_SID
- 固定字符
- 服務器的行程ID號
- 檔案后綴名 .trc
- 各部分之間以下劃線連接,
例如:orcl_mmon_12210.trc,其中:“orcl" 是本環境下資料庫的SID,"12210"為產生該跟蹤檔案會話所使用的服務器行程ID號,如何知道我的ORACLE_SID和會話所使用的服務器行程ID呢?
三、如何確定跟蹤檔案?
為了演示的方便,我們給一個普通用戶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用戶,并確定會話ID
SQL> conn scott/tiger
Connected.
SQL> select sid from v$mystat where rownum=1;
SID
----------
70
SQL>
4、根據會話ID,確定會話的地址資訊
SQL> select paddr from v$session where sid=70;
PADDR
----------------
000000006DAB6588
SQL>
5、根據會話的地址資訊,確定作業系統的行程號
SQL> select spid from v$process where addr='000000006DAB6588';
SPID
------------------------
54685
SQL>
進入目錄/u01/app/oracle/diag/rdbms/orcl/orcl/trace會發現,此時并不存在包含54685的跟蹤檔案,原因是要使用跟蹤檔案需要手動開啟會話的跟蹤,
6、開啟會話的跟蹤
SQL> alter session set sql_trace=true;
Session altered.
SQL>
7、執行一條簡單的SQL陳述句,并檢查/u01/app/oracle/diag/rdbms/orcl/orcl/trace目錄,這時候就可以看到生成的跟蹤檔案,
[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
根據跟蹤對于診斷SQL陳述句是非常有用的,下面通過一個簡單的示例來說明,
1、執行下面的的SQL陳述句
select * from scott.emp where deptno=10;
select * from scott.emp where deptno=20;
select * from scott.emp where deptno=30;
這三條SQL分別查詢10、20和30號部門的員工,通過觀察發現,這三條SQL除了where的條件的引數值不一樣,其他部分都是一樣的,這樣的SQL陳述句叫做“重復的SQL”,如果資料庫中存在大量的重復SQL,會使得每次在執行的時候都會進行SQL的決議,再生成執行計劃,從而影響資料庫的性能,
下面通過跟蹤檔案來驗證上面的結論,
2、由于前面開啟了會話的跟蹤,如果不再需要進行跟蹤了,需要手動關閉一下,
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對應的SQL ID不一樣,但是生成的Plan Hash是一樣的,這就說明這三條SQL的執行計劃是一樣的,既然如此,我們可以使用系結變數的方式來改寫這三條SQL,讓這三條SQL陳述句在執行的時候,不用每次都生成執行計劃,只需要復用第一次生成的執行計劃即可,從而提高性能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308497.html
標籤:Oracle
下一篇:Oracle筆記
