索引鍵的熱視圖模式

本頁展示多個 Key Visualizer 熱視圖模式範例,這些模式有助於排解特定效能問題。

用量平均分配

熱視圖顯示均勻分布的讀取與寫入

如果熱視圖顯示暗色與亮色交織的粒狀混合,則代表索引鍵的寫入/刪除作業均勻地分布在整個資料庫當中。這個熱視圖可能代表 Datastore 模式的使用模式符合效益。

連續鍵的索引

如果熱視圖中只有一條明亮的對角線,表示索引鍵嚴格遞增或遞減,例如時間戳記。不建議使用連續鍵建立索引,因為這可能會產生熱點。發生資源使用率不均時,您可能會發現延遲時間相應增加。

以下列舉一些常見的索引熱點:

時間戳記遞增導致資源使用率不均

熱視圖顯示因時間戳記增加而導致的熱點

在這個範例中,如果熱視圖上只有一條明亮的對角線,可能表示資料庫在時間戳記屬性上,使用嚴格遞增或遞減的索引寫入/刪除作業。

因屬性名稱增加而導致熱點

熱視圖:顯示因房地產增加而出現的熱點

在本範例中,如果熱視圖上只有一條明亮的對角線,可能表示資料庫在遞增屬性 (例如自動產生的發票號碼) 上,使用嚴格遞增或遞減的索引寫入/刪除作業。

如要找出熱點問題,請使用 Key Visualizer 工具並瞭解索引鍵結構,判斷是哪個索引造成問題,然後根據最佳做法排除這些索引。

瞭解索引鍵結構

如要瞭解 Key Visualizer 工具中顯示的索引鍵結構,請先瞭解 Datastore 模式中的索引

下列程式碼顯示索引鍵格式範例,將滑鼠游標懸停在熱視圖中受影響的鍵範圍上時,就會看到這個格式。

NAMESPACE: NS KIND: Users 
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),`UserList`,1)
VALUES: (16500000000000001,'Alice')
ENTITY:KEY(PROJECT('PROJECT_ID'),NAMESPACE(''),`UserList`,1,`User`,5000000000000001)

其中:

  • NAMESPACE:實體的命名空間
  • KIND:實體的種類,可將實體分類。
  • PROPERTIES:與實體相關的屬性。只有在索引定義會修改預設排序時,才會顯示 __key__ 排序屬性。
  • ANCESTOR:選用的祖系路徑,可在資料庫階層結構中找到實體的位置。
  • VALUES:各屬性的值。
  • ENTITY:作業中更新的實體 ID。

從先前的範例中,找出 PROPERTIES 值中的屬性,以找出受影響的索引。

如要尋找索引,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Datastore mode Indexes」(Datastore 模式索引) 頁面。

    前往 Datastore 模式索引

    您可以分析「PROPERTIES」欄位,判斷索引類型。詳情請參閱索引鍵範例

  2. 按一下「篩選器」,選取「欄位」,然後輸入欄位名稱。

    如果是複合式索引,請使用 OR 運算子新增更多屬性。

找出造成問題的索引後,您可以採取下列解決方案:

  • 內建索引:排除屬性,讓索引不會保留該屬性的索引項目。詳情請參閱「排除的屬性」。
  • 複合索引:修改 index.yaml 檔案中的索引,確保系統不會選取包含單調遞增或遞減值的欄位做為索引的第一個欄位,或刪除索引。詳情請參閱「關於 index.yaml」。

熱視圖上的索引鍵項目範例

類型 說明 範例
內建索引項目 Timestamp 屬性的單一屬性索引項目,NS 命名空間的排序順序為遞減。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),使用者, 5000000000000001)
內建索引項目 預設命名空間中單一屬性索引的索引項目。 NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),使用者, 5000000000000001)
複合式索引項目 複合式索引的索引項目,以遞減順序排列 Timestamp 屬性和 Name 屬性,且未啟用祖先。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),使用者,5000000000000001)
包含祖系的複合式索引項目 複合式索引的索引項目,Timestamp 屬性為遞減順序,Name 屬性為遞減順序,且已啟用祖先查詢。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)
含有 __key__ 的複合式索引項目 複合式索引的索引項目 (Timestamp 屬性遞增排序,__key__ 屬性遞減排序,且未啟用祖先查詢)。您可以在索引定義中使用 __key__ 做為最終屬性,變更結果的預設排序方式。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)

後續步驟