共用方式為


在 適用於 PostgreSQL 的 Azure 資料庫 中使用索引微調所產生的索引建議 - 彈性伺服器

索引微調會將其做出的建議保存在 azure_sys 資料庫中 intelligentperformance 結構描述底下的一組資料表中。

目前,可以使用專為此目的所建置的 Azure 入口網站頁面讀取該資訊,或是執行查詢來從 azure_sys 資料庫的 intelligent performance 內提供的兩個檢視擷取資料。

透過 Azure 入口網站取用索引建議

  1. 登入 Azure 入口網站,然後選取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。

  2. 在功能表的 [智慧效能] 區段中,選取 [索引微調]。

    • 如果已啟用此功能,但尚未產生任何建議,畫面看起來會像這樣:

      螢幕快照,顯示啟用功能但沒有建議時,[索引微調] 頁面的層面。

    • 如果此功能目前已停用,而且過去從未產生建議,畫面看起來會像這樣:

      螢幕快照,顯示停用功能且沒有建議時,[索引微調] 頁面的層面。

    • 如果已啟用此功能,且尚未產生任何建議,畫面看起來會像這樣:

      螢幕快照,顯示啟用功能且沒有建議時,[索引微調] 頁面的層面。

    • 如果此功能已停用,但其曾經產生建議,畫面看起來會像這樣:

      螢幕快照,顯示停用功能且有建議時,[索引微調] 頁面的層面。

  3. 如果有可用的建議,請選取 [檢視索引建議] 摘要以存取完整清單:

    顯示 [索引微調] 頁面有建議的層面,以及取得完整清單方式的螢幕快照。

  4. 此清單會顯示所有可用的建議,其中每個建議都有一些詳細資料。 根據預設,清單會依遞減順序根據 [最後建議] 排序,其中會在最上方顯示最近的建議。 不過,您可以依任何其他資料行排序,並使用篩選方塊來減少所顯示的項目清單,僅顯示其資料庫、結構描述或資料表名稱包含所提供之文字的項目:

    顯示 [索引建議] 頁面外觀的螢幕擷取畫面,其中包含數個建議。

  5. 若要查看任何特定建議的進一步資訊,請選取該建議的名稱,然後 [索引建議詳細資料] 窗格隨即會在畫面右側開啟,以顯示有關該建議的所有可用詳細資料:

    顯示一項特定建議的 [索引建議詳細資料] 窗格外觀的螢幕擷取畫面。

透過 azure_sys 資料庫中可用的檢視來取用索引建議

  1. 使用具有連線到執行個體之權限的任何角色,連線到您伺服器中可用的 azure_sys 資料庫。 public 角色的成員可以從這些檢視中讀取。
  2. 在檢視上 sessions 執行查詢,以擷取建議會話的詳細數據。
  3. 在檢視上 recommendations 執行查詢,以擷取 CREATE INDEX 和 DROP INDEX 的索引微調所產生的建議。

檢視

azure_sys 資料庫中的檢視提供方便的方式,以存取和擷取索引微調所產生的索引建議。 具體來說,createindexrecommendationsdropindexrecommendations 檢視分別包含 CREATE INDEX 和 DROP INDEX 建議的詳細資訊。 這些檢視會公開工作階段識別碼、資料庫名稱、建議程式類型、微調工作階段的啟動和停止時間、建議識別碼、建議類型、建議原因,以及其他相關詳細資料等資料。 藉由查詢這些檢視,使用者可以輕鬆存取和分析索引微調所產生的索引建議。

intelligentperformance.sessions

檢視 sessions 會公開所有索引微調會話的所有詳細數據。

數據行名稱 資料類型 描述
session_id uuid 全域唯一標識碼指派給起始的每個新微調會話。
database_name varchar(64) 執行索引微調會話內容的資料庫名稱。
session_type intelligentperformance.recommendation_type 指出這個索引微調會話可能會產生的建議類型。 可能的值為: CreateIndexDropIndexCreateIndex類型的會話可能會產生 類型的建議CreateIndex。 類型的DropIndex工作階段可以產生 或 ReIndex 類型的建議DropIndex
run_type intelligentperformance.recommendation_run_type 指出此工作階段起始的方式。 可能的值為:Scheduled。 會話會根據的值 index_tuning.analysis_interval自動執行,會指派的 Scheduled執行類型。
state intelligentperformance.recommendation_state 指出工作階段的目前狀態。 可能的值為:Error、、SuccessInProgress。 執行失敗的工作階段會設定為 Error。 無論它們是否產生建議,都已正確完成其執行的工作階段會設定為 Success。 執行工作階段會設定為 InProgress
start_time 不含時區的時間戳 產生此建議之微調工作階段啟動的時間戳記。
stop_time 不含時區的時間戳 產生此建議之微調工作階段啟動的時間戳記。 如果工作階段正在進行或因某些失敗而中止,則為 NULL。
recommendations_count 整數 此工作階段中產生的建議總數。

intelligentperformance.recommendations

檢視 recommendations 會公開在基礎表中仍可使用數據之任何微調會話上產生之所有建議的所有詳細數據。

數據行名稱 資料類型 描述
recommendation_id 整數 可唯一識別整個伺服器建議的數位。
last_known_session_id uuid 每個索引微調會話都會指派全域唯一標識符。 此數據行中的值代表最近產生此建議之會話的值。
database_name varchar(64) 內容是在建議中產生之資料庫的名稱。
recommendation_type intelligentperformance.recommendation_type 指出產生的建議類型。 可能的值為:CreateIndex、、DropIndexReIndex
initial_recommended_time 不含時區的時間戳 產生此建議之微調工作階段啟動的時間戳記。
last_recommended_time 不含時區的時間戳 產生此建議之微調工作階段啟動的時間戳記。
times_recommended 整數 產生此建議之微調工作階段啟動的時間戳記。
reason text 說明產生此建議的原因。
recommendation_context json 包含受建議影響之查詢的查詢識別碼清單、建議的索引類型、建議的索引所在的結構描述名稱和資料表名稱、索引資料行、索引名稱,以及建議索引以位元組為單位的估計大小。
建立索引建議的原因

當索引調整建議建立索引時,它至少會新增下列其中一個原因:

原因
Column <column> appear in Join On clause(s) in query <queryId>
Column <column> appear in Equal Predicate clause(s) in query <queryId>
Column <column> appear in Non-Equal Predicate clause(s) in query <queryId>
Column <column> appear in Group By clause(s) in query <queryId>
Column <column> appear in Order By clause(s) in query <queryId>
卸除索引建議的原因

當索引微調識別任何標示為無效的索引時,它會建議以下列原因卸除它:

The index is invalid and the recommended recovery method is to reindex.

若要深入瞭解索引標示為無效的原因和時機,請參閱 PostgreSQL 官方檔中的 REINDEX

卸除索引建議的原因

當索引微調偵測到未使用的索引時,至少會在 中 index_tuning.unused_min_period設定的天數,建議以下列原因卸除該索引:

The index is unused in the past <days_unused> days.

當索引調整偵測到重複的索引時,其中一個重複專案會存留下來,並建議卸除其餘的索引。 提供的原因一律有下列起始文字:

Duplicate of <surviving_duplicate>.

後面接著另一個文字,說明每個重複專案選擇卸除的原因:

原因
The equivalent index "<surviving_duplicate>" is a Primary key, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a unique index, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a constraint, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a valid index, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" has been chosen as replica identity, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" was used to cluster the table, while "<droppable_duplicate>" was not.
The equivalent index "<surviving_duplicate>" has a smaller estimated size compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has more tuples compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has more index scans compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has been fetched more times compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has been read more times compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has a shorter length compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has a smaller oid compared to "<droppable_duplicate>".

如果索引不只因為重複而卸除式,而且因為重複而未使用,至少會使用 中的 index_tuning.unused_min_period天數,下列文字會附加至原因:

Also, the index is unused in the past <days_unused> days.

套用索引建議

索引建議包含您可以執行以實作建議的 SQL 陳述式。

下列各節將示範如何針對特定建議取得此陳述式。

擁有陳述式之後,您可以使用您偏好的任何 PostgreSQL 用戶端來連線到伺服器並套用建議。

透過 Azure 入口網站 中的 [索引微調] 頁面取得 SQL 語句

  1. 登入 Azure 入口網站,然後選取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。

  2. 在功能表的 [智慧效能] 區段中,選取 [索引微調]。

  3. 假設索引微調已經產生建議,請選取 [檢視索引建議] 摘要,以存取可用建議的清單。

    顯示 [索引微調] 頁面有建議的層面,以及取得完整清單方式的螢幕快照。

  4. 從建議清單中,其中一項:

    • 選取您要取得 SQL 陳述式之建議右側的省略符號,然後選取 [複製 SQL 指令碼]

      顯示如何從 [索引建議] 頁面複製 SQL 陳述式的螢幕擷取畫面。

    • 或選取建議的名稱,以顯示其 [索引建議詳細資料],然後選取 [SQL 指令碼] 文字輸入框中的剪貼簿圖示,以複製 SQL 陳述式。

      顯示如何從 [索引建議詳細資料] 頁面複製 SQL 陳述式的螢幕擷取畫面。