Spanner 提供內建資料表,可記錄資料表欄的讀取、查詢和寫入作業統計資料。您可以使用資料欄作業統計資料執行下列操作:
找出讀取、查詢和寫入流量超出預期的資料欄。
找出使用率高的資料欄。
無論存取的資料列數量為何,只要您查詢或寫入資料欄,Spanner 就會將該資料欄的對應作業計數加 1。
您可以透過每秒作業數、每秒作業數 (依 API 方法) 等指標,以及系統洞察圖表中的其他相關指標,監控資料庫的整體狀況。
存取資料欄作業統計資料
Spanner 會在 SPANNER_SYS
結構定義中提供資料欄作業統計資料。您可以透過下列方式存取 SPANNER_SYS
資料:
資料庫在 Google Cloud 控制台中的 Spanner Studio 頁面
Spanner 提供的下列單一讀取方法不支援 SPANNER_SYS
:
- 從資料表中的單一資料列或多個資料列執行強式讀取。
- 從資料表中的單一資料列或多個資料列執行過時讀取。
- 從次要索引中的單一資料列或多個資料列讀取。
詳情請參閱「單一讀取方法」。
資料欄作業統計資料
下列資料表會追蹤特定時間範圍內,資料欄的讀取、查詢和寫入統計資料:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE
:1 分鐘間隔內的作業SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
:10 分鐘間隔期間內的操作SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR
:每隔 1 小時的作業
這些資料表具備下列屬性:
每個資料表都包含資料表名稱所指定的非重疊時間間隔長度的資料。
1 分鐘間隔的開始時間是目前這一分鐘、10 分鐘間隔的開始時間是目前這個小時的每 10 分鐘,而 1 小時間隔的開始時間是目前這個小時。
舉例來說,在上午 11:59:30,SQL 查詢可存取下列最近間隔:
- 1 分鐘:上午 11:58:00–11:58:59
- 10 分鐘:上午 11:40:00–11:49:59
- 1 小時:上午 10:00:00–10:59:59
所有資料欄作業統計資料表的結構定義
資料欄名稱 | 類型 | 說明 |
---|---|---|
INTERVAL_END |
TIMESTAMP |
收集欄使用統計資料的時間間隔結束時間。 |
TABLE_NAME |
STRING |
資料表或索引的名稱。 |
COLUMN_NAME |
STRING |
資料欄名稱。 |
READ_COUNT |
INT64 |
從資料欄讀取的次數。 |
QUERY_COUNT |
INT64 |
從資料欄讀取的查詢次數。 |
WRITE_COUNT |
INT64 |
寫入資料表的查詢數。 |
IS_QUERY_CACHE_MEMORY_CAPPED |
BOOL |
統計資料收集是否因記憶體壓力而受到限制。 |
如果您使用變異將資料插入資料庫,Spanner 會針對插入陳述式存取的每個資料表,將 WRITE_COUNT
遞增 1。此外,如果查詢存取索引時未掃描基礎資料表,則只會遞增索引的 QUERY_COUNT
。
資料保留
Spanner 至少會在下列時間範圍保留每個資料表的資料:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE
:涵蓋前六個小時的間隔。SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
:涵蓋前四天的間隔。SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR
:涵蓋前 30 天的間隔。
查詢範例
本節包含多個範例 SQL 陳述式,可擷取匯總的資料欄作業統計資料。您可以使用用戶端程式庫或 Google Cloud CLI 執行這些 SQL 陳述式。
查詢最近時間間隔內寫入作業次數最多的資料表欄
GoogleSQL
SELECT interval_end, table_name, column_name, write_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY write_count DESC;
PostgreSQL
SELECT interval_end, table_name, column_name, write_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY write_count DESC;
查詢最近時間間隔內查詢作業最多的資料欄
GoogleSQL
SELECT interval_end, table_name, column_name, query_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY query_count DESC;
PostgreSQL
SELECT interval_end, table_name, column_name, query_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY query_count DESC;
查詢過去 6 小時內資料欄的使用情形
GoogleSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_minute WHERE table_name = "table_name" AND column_name = "column_name" ORDER BY interval_end DESC;
其中:
table_name
必須是資料庫中現有的資料表或索引。- 「
column_name
」必須是表格中的現有資料欄。
PostgreSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_minute WHERE table_name = 'table_name' AND column_name = 'column_name' ORDER BY interval_end DESC;
其中:
table_name
必須是資料庫中現有的資料表或索引。- 「
column_name
」必須是表格中的現有資料欄。
查詢過去 14 天的資料欄使用情形
GoogleSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_hour WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY) AND table_name = "table_name" AND column_name = "column_name" ORDER BY interval_end DESC;
請將下列項目改為對應的值:
table_name
:資料庫中的資料表或索引名稱。column_name
:資料表中的資料欄名稱。
PostgreSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_hour WHERE interval_end > spanner.timestamptz_subtract(now(), '14 DAY') AND table_name = 'table_name' AND column_name = 'column_name' ORDER BY interval_end DESC;
請將下列項目改為對應的值:
table_name
:資料庫中的資料表或索引名稱。column_name
:資料表中的資料欄名稱。