在專用 Exadata 基礎架構上的 Autonomous Database 上使用 SQL 追蹤

您可以使用 SQL 追蹤搭配 Autonomous Database on Dedicated Exadata Infrastructure ,協助您識別過多資料庫工作負載的來源,例如應用程式中的高負載 SQL 陳述式。

關於 SQL 追蹤

當應用程式作業花費的時間超過預期時,可以追蹤在此作業中執行的所有 SQL 敘述句,其詳細資訊包括剖析、執行以及擷取階段中的該 SQL 敘述句所花費的時間,可協助您識別並解決效能問題的原因。您可以使用 Autonomous Database 上的 SQL 追蹤來達到此目的。

Autonomous Database 中預設會停用 SQL 追蹤功能。您必須啟用它才能開始收集 SQL 追蹤資料。如果要追蹤 SQL 敘述句,請以 ADMIN 使用者的身分實行下列作業:

Autonomous Database 上設定 SQL 追蹤

若要設定 Autonomous Database 進行 SQL 追蹤,請執行下列動作:
  1. 建立一個儲存桶,將追蹤檔儲存在雲端物件儲存中。
    若要儲存 SQL 追蹤檔,儲存桶可以位於 Autonomous Database 支援的任何雲端物件存放區中。例如,若要在 Oracle Cloud Infrastructure Object Storage 中建立儲存桶,請參閱建立儲存桶

    秘訣:

    在 Oracle Cloud Infrastructure Object Storage 中建立儲存桶時,請確保選擇標準作為儲存層,因為 SQL 追蹤檔只支援在標準儲存層中建立的儲存桶。如需標準物件儲存層的資訊,請參閱瞭解儲存層
  2. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 建立您雲端物件儲存帳戶的證明資料。
    舉例而言:
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com', 
        password => 'password'
    );END;
    /

    請參閱 CREATE_CREDENTIAL 程序,瞭解不同物件儲存服務之 usernamepassword 參數的引數詳細資訊。

  3. 設定初始化參數,以指定 SQL 追蹤檔儲存桶的雲端物件儲存 URL,以及指定存取雲端物件儲存的證明資料。
    1. 設定資料庫特性 DEFAULT_LOGGING_BUCKET,以指定雲端物件儲存的日誌記錄儲存桶。
      例如,如果您使用 Oracle Cloud Infrastructure (OCI) Object Storage 建立儲存桶:
      SET DEFINE OFF;
      ALTER DATABASE PROPERTY SET 
         DEFAULT_LOGGING_BUCKET = 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucket_name/o/';

      其中 namespace-string 是 OCI 物件儲存命名空間,而 bucket_name 是您先前建立的儲存桶名稱。如需詳細資訊,請參閱瞭解 Object Storage 命名空間

      如需區域清單,請參閱區域與可用性網域

      您用於 SQL 追蹤檔的雲端物件存放區可以是 Autonomous Database 支援的任何雲端物件存放區。

    2. 將資料庫特性 DEFAULT_CREDENTIAL 設為您在步驟 2 中建立的證明資料。
      舉例而言:
      ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.DEF_CRED_NAME';

      必須要包含綱要名稱與證明資料。在此範例中,綱要為 ADMIN

Autonomous Database 上啟用 SQL 追蹤

附註:

啟用 SQL 追蹤功能可能會在啟用追蹤收集時,降低階段作業的應用程式效能。此效能影響預期是因為收集並儲存追蹤資料的超載所致。

若要啟用資料庫階段作業的 SQL 追蹤,請執行下列動作:

  1. 或者,設定應用程式的從屬端 ID。此步驟為選擇性,但建議使用。SQL 追蹤會在將追蹤檔寫入「雲端物件存放區」時,使用從屬端 ID 作為追蹤檔名稱的元件。
    舉例而言:
    BEGIN
      DBMS_SESSION.SET_IDENTIFIER('sqlt_test');
    END;
    /
  2. 或者,設定應用程式的模組名稱。此步驟為選擇性,但建議使用。SQL 追蹤會在將追蹤檔寫入「雲端物件存放區」時,使用模組名稱作為追蹤檔的元件。

    舉例而言:

    BEGIN
      DBMS_APPLICATION_INFO.SET_MODULE('modname', null);
    END;
    /
  3. 啟用「SQL 追蹤」功能。
    ALTER SESSION SET SQL_TRACE = TRUE;
  4. 執行您的工作負載。
    此步驟涉及執行整個應用程式或應用程式的特定部分。當您在資料庫階段作業中執行工作負載時,系統會收集 SQL 追蹤資料。
  5. 停用 SQL 追蹤。
    當您停用 SQL 追蹤時,系統會將階段作業的收集資料寫入階段作業中的表格,以及寫入您在設定 SQL 追蹤時所設定儲存桶中的追蹤檔。

停用 SQL 追蹤

若要停用 SQL 追蹤,請執行下列動作:
  1. 停用「SQL 追蹤」功能。
    ALTER SESSION SET SQL_TRACE = FALSE;
  2. 視需要為您的環境重設資料庫特性 DEFAULT_LOGGING_BUCKET,以清除雲端物件儲存上記錄儲存桶的值。
    舉例而言:
    ALTER DATABASE PROPERTY SET DEFAULT_LOGGING_BUCKET = '';
停用 SQL 追蹤時,會在階段作業執行並啟用追蹤時收集的追蹤資料會複製到表格,並傳送至雲端物件存放區的追蹤檔。

Autonomous Database 上檢視儲存至雲端物件存放區的追蹤檔

您可以使用 SQL 追蹤檔資料分析 Autonomous Database 上的應用程式效能。當您在資料庫階段作業中停用 SQL 追蹤時,資料會寫入使用 DEFAULT_LOGGING_BUCKET 設定的雲端物件存放區儲存桶。

「SQL 追蹤」功能會以下列格式,將階段作業中收集的追蹤資料寫入「雲端物件存放區」:

default_logging_bucket/sqltrace/clientID/moduleName/sqltrace_numID1_numID2.trc

檔案名稱的元件為:

  • default_logging_bucket :是 DEFAULT_LOGGING_BUCKET 資料庫特性的值。請參閱在 Autonomous Database 上設定 SQL 追蹤以瞭解詳細資訊。

  • clientID:是從屬端 ID。請參閱啟用 Autonomous Database 上的 SQL 追蹤以瞭解詳細資訊。

  • moduleName:是模組名稱。請參閱啟用 Autonomous Database 上的 SQL 追蹤以瞭解詳細資訊。

  • numID1_numID2:是「SQL 追蹤」功能提供的兩個 ID。numID1numID2 數值會使用追蹤功能,在雲端物件儲存的相同儲存桶中建立追蹤檔,以獨特的方式區別每個追蹤檔案名稱與其他階段作業。

    當資料庫服務支援併行執行,而階段作業執行平行查詢時,「SQL 追蹤」功能可以產生多個具有不同 numID1numID2 值的追蹤檔。

附註:

當 SQL 追蹤在同一個階段作業內多次啟用並停用時,每個追蹤重複都會產生「雲端物件存放區」中的個別追蹤檔。為了避免覆寫階段作業中產生的先前追蹤,後續產生的檔案會遵循相同的命名慣例,並在追蹤檔案名稱加上數字尾碼。此數值字尾以數字 1 開頭,之後每個追蹤反覆都會以 1 遞增。

例如,當您將從屬端 ID 設為 "sql_test",並將模組名稱設為 "modname" 時,下列為產生的追蹤檔案名稱範例:

sqltrace/sqlt_test/modname/sqltrace_5415_56432.trc

您可以執行 TKPROF,將追蹤檔轉譯成可讀取的輸出檔。

  1. 將追蹤檔從「物件存放區」複製到您的本機系統。
  2. 瀏覽至儲存追蹤檔的目錄。
  3. 使用下列語法,從作業系統提示執行 TKPROF 公用程式:
    tkprof filename1 filename2 [waits=yes|no] [sort=option] [print=n]
     [aggregate=yes|no] [insert=filename3] [sys=yes|no] [table=schema.table]
     [explain=user/password] [record=filename4] [width=n]

    輸入檔與輸出檔是唯一需要的引數。

  4. 若要檢視線上說明,請呼叫不含引數的 TKPROF
    如需有關使用 TKPROF 公用程式的資訊,請參閱 Oracle Database 19c SQL Tuning Guide 中的 Tools for End-to-End Application TracingOracle Database 23ai SQL Tuning Guide

Autonomous Database 上的 SESSION_CLOUD_TRACE 檢視中檢視追蹤資料

當您啟用「SQL 追蹤」時,在啟用追蹤之階段作業的 SESSION_CLOUD_TRACE 視觀表中,會有儲存至「雲端物件存放區」追蹤檔的相同追蹤資訊。
當您在資料庫階段作業中時,您可以在 SESSION_CLOUD_TRACE 視觀表中檢視 SQL 追蹤資料。SESSION_CLOUD_TRACE 視觀表包含兩個資料欄:ROW_NUMBERTRACE
DESC SESSION_CLOUD_TRACE

Name       Null? Type
---------- ----- ------------------------------
ROW_NUMBER       NUMBER
TRACE            VARCHAR2(32767)

ROW_NUMBER 指定在 TRACE 資料欄中找到之追蹤資料的順序。寫入追蹤檔的每一行追蹤輸出都會成為表格中的一列,且可在 TRACE 資料欄中使用。

停用階段作業的 SQL 追蹤之後,就可以在 SESSION_CLOUD_TRACE 視觀表上執行查詢。

舉例而言:
SELECT trace FROM SESSION_CLOUD_TRACE ORDERBY row_number;

SESSION_CLOUD_TRACE 中的資料會在階段作業期間持續存在。登出或關閉階段作業之後,資料就無法再使用。

如果在同一個階段作業中啟用並多次停用「SQL 追蹤」,SESSION_CLOUD_TRACE 會累計顯示所有重複項目的追蹤資料。因此,在先前停用追蹤之後,於階段作業中重新啟用追蹤並不會移除先前反覆產生的追蹤資料。