Oracle SQL_TRACE和10046事件的最佳化SQL執行個體

來源:互聯網
上載者:User

一資料庫版本

LEO1@LEO1>select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux:Version 11.2.0.1.0 - Production

NLSRTL Version11.2.0.1.0 - Production

二示範使用SQL_TRACE和10046事件對其它會話進行跟蹤,並給出trace結果

SQL_TRACE:Oracle這個功能主要是為了追蹤SQL的執行過程,分析SQL的效能,資源消耗情況。

1.查看SQL是如何操作處理資料

2.查看SQL在執行過程中產生了的等待事件

3.查看SQL的執行過程資源消耗

4.查看SQL的實際執行計畫

5.查看SQL的遞迴語句

6.如果要探索SQL如何執行的可以詳細看看

10046:用於分析SQL執行過程中效能消耗情況,可以查看綁定變數資訊,可以查看等待事件資訊,它比SQL_TRACE輸入輸出更多參數。

上述工具使用場合:1.最佳化SQL語句

2.查看SQL語句執行計畫

3.跟蹤SQL語句執行過程

4.把會話中SQL的資訊重新導向到一個檔案裡

SET AUTO TRACE:1.輸出SQL語句估算的執行計畫(猜出來的)

2.SQL語句並沒有真正執行,只關注這條SQL的執行計畫對不對

3.只是用來估算執行計畫

實驗

使用SQL_TRACE對其它會話進行跟蹤

如果對當前會話進行跟蹤只需alter session set sql_trace=true;即可,如果對其它會話進行跟蹤還需要設定另外一些參數。

我們現在做一下,從144會話跟蹤12會話的SQL

144會話我們使用leo1使用者操作

12會話我們使用leo2使用者操作

144會話

LEO1@LEO1> selectdistinct sid from v$mystat;   可以查詢當前會話ID

SID

----------------

144

我們用會話ID和串號來唯一定位一個會話,現在我們把2個會話資訊都顯示出來了

LEO1@LEO1>select sid,serial# from v$session where sid in (144,12);

SID   SERIAL#

---------------------------------

12      4472

144       979

這時我有了一個疑問,定位一個會話一般來說看sid就可以了,那麼為什麼後面還跟著個serial呢,這個serial是幹什麼用的呢,諮詢了一下Alantany查了一下官方文檔

SID NUMBER:Sessionidentifier   就是會話標識

SERIAL#  NUMBER  :是用來標識唯一一個會話操作對象的,保證這個會話發出的命令可以正確的應用到對應的會話對象上。

場合一個會話的結束和另一個會話開始都使用了同一個SID,區分這是2個不同的會話

例子

第一次leonarding登陸sid=12,操作了leo1表,退出

SID   SERIAL#

---------------------------------

12       4472

第二次Alan登陸sid=12,又操作了leo2表,退出

SID   SERIAL#

---------------------------- ----

12      4777

如果只是看SID我們不能分辨出是誰登入了會話操作了leo1表和leo2表,而serial可以分辨出不同會話的命令正確應用到對應的對象上,區分這是2個不同的人登入的會話。

LEO1@LEO1> droptable leo1;                  清理環境

Table dropped.

LEO1@LEO1>create table leo1 as select * from dba_objects;   用leo1使用者建立leo1表

Table created.

LEO1@LEO1>select count(*) from leo1;                    看看有多少條記錄

COUNT(*)

----------------

72007

LEO1@LEO1>execute dbms_stats.gather_table_stats('LEO1','LEO1',method_opt=>'for allcolumns size 254');

PL/SQL proceduresuccessfully completed.

隨便做個表分析和長條圖

LEO1@LEO1> conn/ as sysdba                  切換為管理員

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.