為協助您進一步瞭解、改善及診斷交易問題,Spanner 可讓您存取交易提交統計資料。目前,您可以擷取交易的變異總數。
使用提交統計資料的時機
在下列情況下,瞭解交易的變異數計數可能會很有幫助。
針對往返程進行最佳化
為改善應用程式效能,您可以在每個交易中盡可能執行更多工作,藉此減少資料庫往返次數。在這種情況下,您希望盡可能增加每筆交易的變異數量,同時維持在系統限制內。
如要判斷每筆交易可提交多少列,且不超過限制,請先在交易中提交一列。這可讓您瞭解每個資料列的變異數計數基準。接著,將系統限制除以基準值,即可取得每筆交易的資料列數。如要進一步瞭解如何計算突變事件,請參閱這份附註。
請注意,針對往返程進行最佳化不一定有益,尤其是如果這會導致更多鎖定競爭的情況。您可以使用鎖定統計資料,排解資料庫中的鎖定衝突問題。
監控交易,避免達到系統限制
隨著應用程式用量增加,交易中的突變數量也可能隨之增加。為避免觸及系統限制而導致交易最終失敗,您可以主動監控變異數計數提交統計資料。如果您發現同一個交易的這個值有增加的趨勢,可能就該按照前面章節所述,重新最佳化交易了。
如何存取提交統計資料
根據預設,系統不會傳回提交統計資料。相反地,您需要在每個 CommitRequest 上將 return_commit_stats
標記設為 true。如果提交作業超過交易可用的變異上限,提交作業就會失敗,並傳回 INVALID_ARGUMENT 錯誤。
以下範例說明如何使用 Spanner 用戶端程式庫傳回提交統計資料。
擷取修訂統計資料
以下範例說明如何使用 Spanner 用戶端程式庫取得提交統計資料。
C++
下列程式碼會在 CommitOptions
上呼叫 set_return_stats()
,並傳回 6 的突變數,因為我們會插入或更新 2 列和每列 3 欄。
C#
在 C# 中,系統不會直接透過 API 傳回提交統計資料。而是由預設記錄器以「資訊」記錄層級記錄。
以下程式碼會將 SpannerConnectionStringBuilder
的 LogCommitStats
屬性設為 true,為所有交易啟用提交統計資料記錄功能。程式碼也會實作範例記錄器,保留對上次看到的提交回應的參照。接著,系統會從這個回應中擷取 MutationCount
並顯示。
Go
以下程式碼會設定 ReturnCommitStats
標記,並在交易成功提交時列印出突變數量。
Java
Node.js
以下程式碼會設定 returnCommitStats
旗標,並傳回 6 個突變數,因為我們會在每個資料列中插入或更新 2 列和 3 欄。
PHP
Python
Python 用戶端程式庫不會直接透過 API 傳回提交統計資料,而是使用 stdout
記錄這些資料,層級為 Info
。
以下程式碼會設定 database.log_commit_stats = True
,為所有交易啟用提交統計資料記錄功能。程式碼也會實作範例記錄器,以便保留最近看到的修訂回應參照。接著,系統會從這個回應中擷取 mutation_count
,並顯示該值。
Ruby
以下程式碼會設定 return_commit_stats
旗標,並傳回 6 個突變數,因為我們會在每個資料列中插入或更新 2 列和 3 欄。