本頁說明 Spanner 導向讀取作業,以及如何使用這項功能。
Spanner 中的導向讀取功能可彈性將唯讀交易和單一讀取作業,導向至雙區域或多區域執行個體設定中的特定備用資源類型或區域,或是導向至自訂區域設定(可選用唯讀區域)。
優點
直接讀取具有下列優點:
- 進一步控管多個區域的負載平衡工作負載,達到更平均的 CPU 使用率,並避免過度佈建 Spanner 執行個體。
- 啟用工作負載隔離功能。您可以將分析工作負載和變更串流讀取作業導向特定 Spanner 副本,盡量減少對相同 Spanner 資料庫上執行的交易工作負載造成的影響。
支援的查詢作業
查詢作業 | 是否支援導向讀取? |
---|---|
過時讀取 | 是 |
強讀 | 是 |
讀寫交易 | 否 |
讀寫交易和分區 DML 類型的批次更新不支援導向讀取。這是因為讀寫交易必須在主要區域中處理。如果在讀寫交易中使用導向讀取,交易會失敗並顯示 BAD_REQUEST
錯誤。
限制
Spanner 導向讀取作業有下列限制:
- 您只能在 Spanner 執行個體中使用導向讀取,該執行個體必須採用雙區域執行個體設定、多區域執行個體設定,或自訂區域設定(含選用的唯讀區域)。
- 您無法搭配讀取/寫入要求使用導向讀取,因為寫入要求一律由主要地區提供服務。
- 您無法在 Google Cloud 控制台或 Google Cloud CLI 中使用導向讀取。您可以使用 REST 和 RPC API,以及 Spanner 用戶端程式庫存取這項功能。
- 單一導向讀取最多可指定 10 個副本。
事前準備
使用導向讀取功能前,請先考量以下事項:
- 如果將讀取作業轉送至距離應用程式最遠的備用資源或區域,應用程式可能會產生額外延遲。
- 您可以根據下列條件設定流量路徑:
- 區域名稱 (例如:
us-central1
)。 - 備用資源類型 (可能的值為
READ_ONLY
和READ_WRITE
)。
- 區域名稱 (例如:
- 導向讀取作業的自動容錯移轉選項預設為啟用。如果啟用自動容錯移轉選項,且所有指定的備用資源都無法使用或不正常,Spanner 會將要求轉送至
includeReplicas
清單以外的備用資源。如果停用自動容錯移轉選項,且所有指定的副本都無法使用或不正常,導向讀取要求就會失敗。
導向讀取參數
如果您使用 REST 或 RPC API 執行導向讀取作業,則必須在 directedReadOptions
參數中定義這些欄位。只能加入 includeReplicas
或 excludeReplicas
其中之一,不能同時加入兩者。
includeReplicas
:包含重複的replicaSelections
集合。這份清單會指出應考慮導向特定地區或副本類型的讀取作業順序。最多可指定 10 個includeReplicas
。replicaSelections
:由提供導向讀取要求的location
或副本type
組成。如果您使用includeReplicas
,則必須提供下列至少其中一項欄位:location
:提供導向讀取要求的位置。位置必須是資料庫雙區域或多區域設定中的其中一個區域。如果位置並非資料庫雙區域或多區域設定中的其中一個區域,要求就不會如預期般轉送。而是由最接近的區域提供服務。舉例來說,您可以將讀取作業導向多區域執行個體設定nam6
中資料庫的us-central1
位置。您也可以使用
leader
或non-leader
字串常值指定location
參數。如果您輸入leader
值,Spanner 會將要求導向資料庫的主要副本。反之,如果您輸入non-leader
值,Spanner 會在最接近的非領導者副本中完成要求。type
:提供導向讀取要求的副本類型。可能的類型包括READ_WRITE
和READ_ONLY
。
autoFailoverDisabled
:預設值為False
,表示已啟用自動容錯移轉。啟用自動容錯移轉選項後,如果所有指定的副本都無法使用或狀況不佳,Spanner 會將要求傳送至includeReplicas
清單以外的副本。如果停用自動容錯移轉選項,且所有指定的備用資源都無法使用或不正常,導向讀取要求就會失敗。可能的值包括TRUE
(停用) 和FALSE
(啟用)。
excludeReplicas
:包含一組重複的replicaSelections
,這些replicaSelections
會從放送要求中排除。Spanner 不會將要求傳送至這個清單中的副本。replicaSelections
:從提供導向讀取要求中排除的位置或副本類型。如果您使用excludeReplicas
,則必須提供下列至少其中一項欄位:location
:排除在提供導向讀取要求服務之外的位置。type
:從提供導向讀取要求服務中排除的副本類型。可能的類型包括READ_WRITE
和READ_ONLY
。
如要查看 REST 要求主體的範例,請按一下「Use directed reads」(使用導向讀取) 部分的「REST」分頁標籤。
使用導向朗讀功能
您可以使用 Spanner 用戶端程式庫,以及 REST 和 RPC API 執行導向讀取作業。
用戶端程式庫
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
您可以使用下列 REST API 執行導向讀取:
舉例來說,如要在 us-central1
中使用 executeSQL
執行導向讀取作業:
在「session」中輸入:
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
更改下列內容:
- PROJECT-ID:專案 ID。
- INSTANCE-ID:執行個體 ID。
- DATABASE-ID:資料庫 ID。
- SESSION-ID:工作階段 ID。
建立工作階段時,您會收到
SESSION-ID
值。
在「Request body」中,使用下列內容:
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
按一下 [Execute] (執行)。回應會顯示查詢結果。
RPC
您可以使用下列 RPC API 執行導向讀取作業:
監控
Spanner 提供延遲指標,協助您監控執行個體中的導向讀取活動。這項指標可在 Cloud Monitoring 中使用。
spanner.googleapis.com/api/read_request_latencies_by_serving_location
您可以使用 /serving_location
或 /is_directed_read
欄位篩選這個指標。/serving location
欄位會指出要求提供服務的 Spanner 伺服器位置。/is_directed_read
欄位會指出是否已啟用導向讀取選項。
如需可用指標的完整清單,請參閱 Spanner 的指標清單。
後續步驟
- 瞭解如何執行交易以外的讀取作業。