分析存取模式

您可以使用 Google Cloud console中的「Access patterns」(存取模式) 頁面,以視覺化方式分析應用程式在 Bigtable 中讀取及寫入資料的方式,也可以透過程式輔助方式呼叫 Cloud Monitoring API,查詢基礎存取模式指標。

閱讀本文前,請先參閱「讀取」、「寫入」和「監控」。

總覽

Bigtable 會自動將傳入的資料要求分類為 Cloud Monitoring 中的查詢類型。工作負載存取模式是不同查詢類型的組合。舉例來說,工作負載存取模式可能包含點讀取、短掃描和點寫入查詢類型。Bigtable 定義了 10 種不同的查詢類型。

「System insights」(系統洞察) 頁面會顯示整體資源使用率,Key Visualizer 則會顯示 Bigtable 如何在資料列索引鍵範圍內分配流量,而「Access patterns」(存取模式) 頁面則會以查詢為中心,在叢集、資料表和應用程式設定檔層級細分工作負載。您可以使用「Access patterns」(存取模式) 頁面執行下列工作:

  • 瞭解工作負載:查看各叢集的讀取、寫入和讀寫查詢類型比例和速率,並依資料表或應用程式設定檔將指標分組
  • 偵測效率不佳的查詢模式,並排解延遲問題:
    • 找出稀疏讀取作業,也就是 Bigtable 掃描的資料列或儲存格數量,遠多於傳回的數量,原因在於選擇性篩選器或未收集的儲存格等待垃圾收集
    • 監控反向掃描,其效率低於正向掃描
    • 比較伺服器端延遲時間百分位數,以及掃描的資料列、傳回的資料列和查看的儲存格,找出哪些存取模式導致延遲時間激增
  • 找出要採用功能的特定工作負載:
    • 找出點讀取量較高的資料表或應用程式設定檔,這些資料表或設定檔可受益於 Enterprise Plus 版本的記憶體內層
    • 找出大型掃描或批次讀取工作負載,並使用 Data Boost 無伺服器運算,將這些工作負載與服務流量區隔開來

限制

Bigtable 不會將 Bigtable 適用的 GoogleSQL 查詢歸類為存取模式,也不會將這些查詢納入資料列、儲存格或位元組存取模式指標。在「QPS distribution」(QPS 分布)、「QPS」和「Latency」(延遲時間) 圖表中,SQL 查詢和其他未分類的要求會顯示為 QUERY_TYPE_UNKNOWN。

必要的角色

如要取得在 Google Cloud 控制台查看「Access patterns」(存取模式) 頁面所需的權限,請要求管理員授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備在 Google Cloud 控制台中查看「Access patterns」(存取模式) 頁面所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

必須具備下列權限,才能在 Google Cloud 控制台查看「Access patterns」(存取模式) 頁面:

  • 查看執行個體詳細資料:bigtable.instances.get
  • 列出叢集、應用程式設定檔和資料表: bigtable.clusters.list, bigtable.appProfiles.list, bigtable.tables.list
  • 查詢監控指標: monitoring.timeSeries.list

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

存取模式

當應用程式使用 Bigtable 用戶端程式庫時,用戶端程式庫會將方法呼叫轉譯為 Bigtable Data API 要求:

Bigtable 會在伺服器上完成每項傳入的 Data API 要求後,根據下列因素 (而非僅根據用戶端程式庫方法名稱) 進行分類:

  • 要求參數:要求是否指定單一資料列索引鍵、多個資料列索引鍵或資料列範圍、要求是否設定 reversed,以及套用哪些篩選器
  • 執行統計資料:掃描及傳回的資料列和儲存格數量,以及位元組酬載

舉例來說,當您呼叫單一資料列讀取方法 (例如 readRow),或使用單一資料列索引鍵呼叫 readRows 時,Bigtable 通常會將要求歸類為點讀取,符合記憶體內層級的資格。不過,如果該單一資料列讀取作業使用複雜的篩選器,或掃描大量儲存格,Bigtable 可能會將其歸類為稀疏讀取、大量讀取或其他讀取。相反地,如果您呼叫 readRows 來讀取多個資料列索引鍵或掃描資料列範圍,Bigtable 會將要求分類為大量讀取或掃描,不符合記憶體內層級的資格。

讀取評估順序

由於單一 ReadRows Data API 要求可能符合多個類別的特徵,Bigtable 會依下列順序評估讀取要求,並指派第一個相符的存取模式:

  1. 點讀取
  2. 短掃描 (用於正向掃描) 或反向短掃描 (reversed 設為 true 時)
  3. 反向掃描 (適用於 reversed 設為 true 的其餘讀取要求)
  4. 稀疏讀取 (在大量讀取前評估,讓 Bigtable 將多鍵讀取或大量篩選排除的大型正向掃描標記為稀疏)
  5. 大量讀取
  6. 其他讀取 (適用於任何剩餘的 ReadRows 要求)

查詢類型定義

下表說明各個存取模式類別、其在 Monitoring 中對應的 query_type 標籤、適用的典型用戶端程式庫作業和基礎 Data API 方法 (method 指標標籤),以及 Bigtable 如何將要求歸入該類別。由於方法名稱因程式設計語言而異,表格列出代表性的用戶端程式庫方法名稱;如需特定語言的程式碼範例,請參閱讀取範例和寫入範例。如要瞭解簡單和複雜篩選器,請參閱本文的「簡單篩選器與複雜篩選器」一節。

查詢類型 query_type 個指標標籤 用戶端作業和 Data API 方法 分類條件
點讀取 QUERY_TYPE_POINT_READ

單列讀取,例如 readRow 或單一鍵 readRows

Data API:ReadRows

不使用篩選器或使用簡單篩選器,向前讀取單一資料列索引鍵,其中掃描和傳回的儲存格數量以及總回應大小,都保持在小型單一資料列限制內。

快速掃描 QUERY_TYPE_SHORT_SCAN

資料列範圍或前置字串掃描,例如具有單一範圍或前置字串的 readRows

Data API:ReadRows

單一連續資料列範圍的正向掃描,不使用篩選器或使用簡單篩選器,其中掃描和傳回的資料列和儲存格數量以及總回應大小保持在較小的範圍內。

反向短掃描 QUERY_TYPE_REVERSE_SHORT_SCAN

反向掃描,例如 readRows,其中包含單一範圍或反向前置字串

Data API:ReadRows

反向掃描單一連續資料列範圍,不使用篩選器或使用簡單篩選器,且與短掃描一樣,不超出相同的資料列、儲存格和位元組限制。

反向掃描 QUERY_TYPE_REVERSE_SCAN

反向掃描,例如反向 readRows

Data API:ReadRows

任何不符合反向短掃描資格的反向讀取,例如超過短掃描資料列、儲存格或位元組限制的反向掃描、指定個別資料列索引鍵、掃描多個資料列範圍,或使用複雜篩選器。

稀疏讀取 QUERY_TYPE_SPARSE_READ

使用 readRow 或 readRows,篩選讀取或掃描未收集的儲存格

Data API:ReadRows

任何正向讀取要求 (在點讀取、短掃描和反向掃描後評估),其中 Bigtable 掃描的資料列或儲存格數量遠多於傳回的數量,因為篩選器排除或未收集的儲存格等待垃圾收集。

大量讀取 QUERY_TYPE_BULK_READ

多列讀取,例如多鍵 readRows 或 bulkReadRows,或使用 readRow 的大型單列讀取

Data API:ReadRows

指定一或多個資料列索引鍵,且不含篩選器或僅含簡單篩選器的正向讀取,超出點讀取限制 (例如要求多個資料列索引鍵或讀取大型單一資料列),且不符合稀疏讀取條件。

其他讀取 QUERY_TYPE_OTHER_READ

使用 readRow 或 readRows 執行大型範圍掃描、多範圍掃描或篩選讀取

Data API:ReadRows

任何不符合上述讀取類別的 ReadRows 要求,例如大型向前範圍掃描、多範圍掃描、結合資料列索引鍵和資料列範圍的要求,或使用複雜篩選器且不符合稀疏條件的讀取。

寫入點 QUERY_TYPE_POINT_WRITE

簡單寫入、增量更新或小型批次寫入,例如 mutateRow 或 bulkMutateRows

Data API:MutateRow、MutateRows

單列 MutateRow 要求或小型 MutateRows 批次要求,可修改少量資料列和儲存格,且總位元組酬載較小。

其他寫入 QUERY_TYPE_OTHER_WRITE

大型批次寫入或大型簡易寫入,例如 bulkMutateRows 或 mutateRow

Data API:MutateRow、MutateRows

任何超過點寫入限制的 MutateRow 或 MutateRows 要求,例如較大的批次寫入,或具有大量異動或位元組酬載的寫入。

讀寫 QUERY_TYPE_READ_WRITE

條件式寫入或附加,例如 checkAndMutateRow 或 readModifyWriteRow

Data API:CheckAndMutateRow、ReadModifyWriteRow

任何條件式寫入 (CheckAndMutateRow) 或原子遞增或附加 (ReadModifyWriteRow) 要求,無論酬載大小為何。

在要求數量和延遲時間指標中,Bigtable 會將未分類的要求 (例如 GoogleSQL for Bigtable 查詢) 標示為 QUERY_TYPE_UNKNOWN。

簡單篩選器與複雜篩選器

如要符合單點讀取、短掃描、反向短掃描或大量讀取的條件,ReadRows 要求不得使用無濾鏡,或必須使用簡易篩選器。

如果篩選器僅使用下列篩選器類型 (單獨使用或在有界限的 chain 篩選器中合併使用),Bigtable 會將其歸類為簡易篩選器。詳情請參閱「鏈結」。

  • 無濾鏡 (FILTER_NOT_SET)
  • pass_all_filter或block_all_filter
  • column_range_filter、column_qualifier_regex_filter 或 family_name_regex_filter
  • cells_per_column_limit_filter、cells_per_row_limit_filter 或 cells_per_row_offset_filter
  • timestamp_range_filter

如果 ReadRows 要求使用的篩選器類型不在上述清單中 (例如下列類型),或鏈結了大量篩選器,Bigtable 會將該要求視為使用複雜篩選器:

  • value_regex_filter
  • value_range_filter
  • row_key_regex_filter
  • row_sample_filter
  • interleave
  • condition
  • sink
  • strip_value_transformer
  • apply_label_transformer

如果 reversed 為 true,Bigtable 會將這類要求歸類為反向掃描,否則會歸類為稀疏讀取 (如果掃描的資料列或儲存格數量明顯多於傳回的數量) 或其他讀取。

查看存取模式

您可以在 Google Cloud 控制台的執行個體層級或叢集層級,查看「Access patterns」(存取模式) 頁面。

查看執行個體的存取模式

  1. 在 Google Cloud 控制台中,開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下要查看指標的執行個體。

  3. 在導覽窗格的「觀測能力」下方,點選「存取模式」。

  4. 在「Cluster」(叢集) 清單中,選取要檢查存取模式的叢集。根據預設, Google Cloud 控制台會選取執行個體中的第一個叢集。

  5. 在「Group by」(分組依據) 清單中,選擇圖表的細分方式:

    • 無:預設選項,會依存取模式細分所有圖表,例如 QUERY_TYPE_POINT_READ
    • 應用程式設定檔:依應用程式設定檔 ID 和存取模式細分所有圖表
    • 資料表:依資料表 ID 和存取模式細分所有圖表
  6. 選用:如要變更日期範圍或切換自動重新整理功能,請使用日期範圍選取器。

查看叢集的存取模式

  1. 在 Google Cloud 控制台中,開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下要查看指標的執行個體。

    執行個體總覽頁面隨即開啟。

  3. 在叢集表格中,按一下叢集 ID。

  4. 在導覽窗格中,按一下「Access patterns」(存取模式)。頁面會顯示所選叢集的指標。

  5. 在「Group by」(分組依據) 清單中,選擇圖表的細分方式:

    • 無:預設選項,會依存取模式細分所有圖表,例如 QUERY_TYPE_POINT_READ
    • 應用程式設定檔:依應用程式設定檔 ID 和存取模式細分所有圖表
    • 資料表:依資料表 ID 和存取模式細分所有圖表
  6. 選用:如要變更日期範圍或切換自動重新整理功能,請使用日期範圍選取器。

「存取模式」頁面上的圖表和指標

「Access patterns」(存取模式) 頁面提供下列指標的圖表:

指標 適用於 說明
QPS 分布 叢集
資料表
應用程式設定檔

在所選日期範圍內,叢集每秒要求數 (QPS) 的匯總比例和平均速率,依query_type和所選的「Group by」(分組依據) 選項細分。

延遲 叢集
資料表
應用程式設定檔

伺服器端要求延遲時間隨時間變化的情形,按照query_type和所選「Group by」(分組依據) 選項細分。使用圖表上的百分位數選單,即可切換「99th percentile」(第 99 個百分位數) (預設)、「95th percentile」(第 95 個百分位數) 和「50th percentile」(第 50 個百分位數)。

QPS 叢集
資料表
應用程式設定檔

一段時間內每秒的要求率,依 query_type 和所選的「Group by」(分組依據) 選項細分。

傳回的資料列數 叢集
資料表
應用程式設定檔

套用篩選器後,Bigtable 每秒針對讀取和讀寫要求傳回用戶端的資料列數。

掃描的資料列數 叢集
資料表
應用程式設定檔

Bigtable 處理讀取和讀寫要求時,每秒讀取的資料列數 (套用篩選器前)。比較「Scanned rows」(掃描的資料列) 和「Returned rows」(傳回的資料列),有助於找出效率不彰的讀取篩選器。

修改的資料列數 叢集
資料表
應用程式設定檔

寫入和讀寫要求每秒修改的資料列數。

處理的儲存格數 叢集
資料表
應用程式設定檔

Bigtable 在讀取和讀寫要求期間,每秒檢查的儲存格數量 (套用篩選器前),包括篩選掉或等待垃圾收集的儲存格。

傳送的儲存格數 叢集
資料表
應用程式設定檔

套用篩選器後,Bigtable 每秒傳回用戶端的儲存格數量。比較「Cells seen」(查看的儲存格) 與「Sent cells」(傳送的儲存格),有助於找出針對每個傳回的儲存格檢查多個儲存格的讀取要求。

傳送的位元組數 叢集
資料表
應用程式設定檔

每秒傳回的已編碼資料列資料位元組數。

您也可以使用 Cloud Monitoring API,以程式輔助方式查詢這些指標、在 Metrics Explorer 中查看,或將指標新增至自訂資訊主頁。bigtable_table 受監控資源上的每項 bigtable.googleapis.com/query_type/* 指標都包含下列標籤:

  • 資源標籤:project_id、instance、cluster 和 table
  • 指標標籤:query_type、app_profile 和 method

如要進一步瞭解如何在 Monitoring 中查詢 Bigtable 指標,請參閱「使用 Monitoring 監控」和「指標」。

根據存取模式最佳化工作負載

您可以使用「Access patterns」(存取模式) 頁面上的指標,做出下列決策:

  • 啟用記憶體內層,進行低延遲時間點讀取:如果每秒查詢次數分布、每秒查詢次數和延遲時間圖表顯示,資料表或應用程式設定檔有大量QUERY_TYPE_POINT_READ要求,且讀取延遲時間目標嚴格,建議啟用 Enterprise Plus 版提供的記憶體內層。依「Table」(資料表) 或「App profile」(應用程式設定檔) 將圖表分組,找出哪些資料表和工作負載最能受惠。
  • 使用 Data Boost 隔離大型掃描和批次讀取作業:如果您發現 QUERY_TYPE_BULK_READ 或 QUERY_TYPE_OTHER_READ 要求數量龐大或定期激增,且與延遲敏感的服務流量共用叢集,請依「App profile」(應用程式設定檔) 分組依據,找出掃描作業的來源。透過專屬應用程式設定檔,轉送批次、報表或數據分析讀取作業,並設定使用 Data Boost 無伺服器運算,這樣大型掃描作業就不會與服務節點爭奪 CPU 資源。
  • 減少篩選器負擔並調整垃圾收集:如果 QUERY_TYPE_SPARSE_READ 要求率偏高、掃描的資料列遠高於傳回的資料列,或查看的儲存格遠高於傳送的儲存格,表示讀取要求掃描的資料,Bigtable 不會傳回用戶端。如要提高讀取效率,請按照下列步驟操作:
    • 在讀取要求中縮小資料列索引鍵範圍或前置字串,而不是依賴值或規則運算式篩選器捨棄資料列。
    • 如果應用程式只需要最新的儲存格版本,請加入儲存格限制篩選器,例如 cells_per_column_limit_filter。詳情請參閱「每欄儲存格數量限制」。
    • 請檢查垃圾收集政策,以免過期或過時的儲存格版本累積,導致掃描速度變慢。詳情請參閱「垃圾收集總覽」。
  • 將反向掃描替換為正向掃描:如果您發現 QUERY_TYPE_REVERSE_SCAN 或 QUERY_TYPE_REVERSE_SHORT_SCAN 要求頻繁出現且延遲時間增加,請考慮設計資料列索引鍵,讓應用程式可以發出正向掃描。詳情請參閱「結構定義設計最佳做法」。

後續步驟