Spanner 提供下列內建資料表:
SPANNER_SYS.TABLE_SIZES_STATS_1HOUR:列出資料庫中資料表和索引的大小。SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR:列出各個位置群組的資料庫中,資料表和索引的大小。
資料表大小以位元組為單位。資料表大小包含資料版本。您可以使用這些內建資料表,監控資料表和索引大小的變化。您也可以在建立、刪除及修改索引時 (例如在索引中插入更多資料列或新增資料欄),監控索引的大小。此外,您也可以查看異動串流資料表的大小。
您可以使用資料庫儲存空間總量指標監控資料庫儲存空間。您可以使用 SPANNER_SYS.TABLE_SIZES_STATS_1HOUR 和 SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR 查看資料庫儲存空間的細目。
存取資料表大小統計資料
。Spanner 會在 SPANNER_SYS 結構定義中提供資料表大小統計資料。您可以透過下列方式存取 SPANNER_SYS 資料:
Google Cloud 控制台中的資料庫 Spanner Studio 頁面。
gcloud spanner databases execute-sql指令。
Spanner 提供的下列單一讀取方法不支援 SPANNER_SYS:
- 從資料表中的單一資料列或多個資料列執行強式讀取。
- 從資料表中的單一資料列或多個資料列執行過時讀取。
- 從次要索引中的單一資料列或多個資料列讀取。
TABLE_SIZES_STATS_1HOUR
SPANNER_SYS.TABLE_SIZES_STATS_1HOUR 包含資料庫中所有資料表的大小,並依 interval_end 排序。間隔時間以時鐘時間為準,在整點結束。Spanner 內部每 5 分鐘會從所有伺服器收集資料,並在不久後將資料提供至 TABLE_SIZES_STATS_1HOUR 資料表。然後計算每小時的平均值。舉例來說,在上午 11:59:30,TABLE_SIZES_STATS_1HOUR 會顯示上午 10:00:00 至 10:59:59 期間的平均資料表大小。
資料表結構定義
| 資料欄名稱 | 類型 | 說明 |
|---|---|---|
INTERVAL_END |
TIMESTAMP |
收集資料表大小的時間間隔結束時間。 |
TABLE_NAME |
STRING |
資料表或索引的名稱。 |
USED_BYTES |
FLOAT64 |
資料表或索引使用的資料列式儲存空間,以位元組為單位。 |
USED_SSD_BYTES |
FLOAT64 |
資料表或索引使用的 SSD 資料列儲存空間,以位元組為單位。 |
USED_HDD_BYTES |
FLOAT64 |
資料表或索引使用的 HDD 資料列儲存空間,以位元組為單位。 |
COLUMNAR_USED_BYTES |
FLOAT64 |
資料表或索引使用的資料欄儲存空間,以位元組為單位。 |
COLUMNAR_USED_SSD_BYTES |
FLOAT64 |
資料表或索引使用的資料欄 SSD 儲存空間,以位元組為單位。 |
COLUMNAR_USED_HDD_BYTES |
FLOAT64 |
資料表或索引使用的資料欄 HDD 儲存空間,以位元組為單位。 |
COLUMNAR_COVERAGE_RATIO |
FLOAT64 |
對於已啟用資料欄政策的資料表或索引,資料欄格式資料與總資料的比率。值介於 0.0 到 1.0 之間。 |
COLUMNAR_SSD_COVERAGE_RATIO |
FLOAT64 |
已啟用資料欄政策的資料表或索引中,資料欄格式 SSD 資料與總 SSD 資料的比率。值介於 0.0 到 1.0 之間。 |
COLUMNAR_HDD_COVERAGE_RATIO |
FLOAT64 |
資料表或索引啟用資料欄政策後,資料欄格式 HDD 資料與總 HDD 資料的比率。值介於 0.0 到 1.0 之間。 |
查詢範例
本節提供幾個 SQL 陳述式範例,可擷取匯總資料表大小統計資料。您可以使用用戶端程式庫、gcloud spanner 或 Google Cloud 控制台執行這些 SQL 陳述式。
查詢最近時間間隔內 4 個最大的資料表和索引
下列查詢會傳回最近時間間隔內最大的 4 個資料表和索引:
SELECT interval_end,
table_name,
used_bytes + columnar_used_bytes AS total_used_bytes
FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end = (
SELECT MAX(interval_end)
FROM spanner_sys.table_sizes_stats_1hour)
ORDER BY total_used_bytes DESC
LIMIT 4;
查詢輸出
| interval_end | table_name | total_used_bytes |
|---|---|---|
2022-11-15 13:00:00-07:00 |
order_item |
60495552 |
2022-11-15 13:00:00-07:00 |
orders |
13350000 |
2022-11-15 13:00:00-07:00 |
item_inventory |
2094549 |
2022-11-15 13:00:00-07:00 |
customer |
870000 |
特定資料表或索引在過去 24 小時內的查詢大小趨勢
下列查詢會傳回過去 24 小時內的資料表大小:
GoogleSQL
SELECT interval_end,
used_bytes + columnar_used_bytes AS total_used_bytes
FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -24 HOUR)
AND table_name = "<var>table_name</var>"
ORDER BY interval_end DESC;
其中:
table_name必須是資料庫中現有的資料表或索引。
PostgreSQL
SELECT interval_end,
used_bytes + columnar_used_bytes AS total_used_bytes
FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '24 HOUR')
AND table_name = '<var>table_name</var>'
ORDER BY interval_end DESC;
其中:
table_name必須是資料庫中現有的資料表或索引。
查詢輸出
| interval_end | total_used_bytes |
|---|---|
2022-11-15 13:00:00-07:00 |
13350000 |
2022-11-15 12:00:00-07:00 |
13350000 |
2022-11-15 11:00:00-07:00 |
13350000 |
2022-11-15 10:00:00-07:00 |
13350000 |
2022-11-15 09:00:00-07:00 |
13350000 |
2022-11-15 08:00:00-07:00 |
12350000 |
2022-11-15 07:00:00-07:00 |
12350000 |
2022-11-15 06:00:00-07:00 |
12350000 |
2022-11-15 05:00:00-07:00 |
11350000 |
2022-11-15 04:00:00-07:00 |
11350000 |
2022-11-15 03:00:00-07:00 |
11350000 |
2022-11-15 02:00:00-07:00 |
11350000 |
2022-11-15 01:00:00-07:00 |
11350000 |
2022-11-15 00:00:00-07:00 |
10350000 |
2022-11-14 23:00:00-07:00 |
10350000 |
2022-11-14 22:00:00-07:00 |
10350000 |
2022-11-14 21:00:00-07:00 |
10350000 |
2022-11-14 20:00:00-07:00 |
10350000 |
2022-11-14 19:00:00-07:00 |
10350000 |
2022-11-14 18:00:00-07:00 |
10350000 |
2022-11-14 17:00:00-07:00 |
10350000 |
2022-11-14 16:00:00-07:00 |
10350000 |
2022-11-14 15:00:00-07:00 |
10350000 |
2022-11-14 14:00:00-07:00 |
10350000 |
2022-11-14 13:00:00-07:00 |
10350000 |
查詢最近時間間隔的資料欄儲存空間用量和涵蓋率
下列查詢會傳回最近時間間隔內,資料表和索引的資料列儲存空間大小、資料欄儲存空間大小,以及資料欄涵蓋率:
GoogleSQL
SELECT interval_end,
table_name,
used_bytes,
columnar_used_bytes,
columnar_coverage_ratio
FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end = (
SELECT MAX(interval_end)
FROM spanner_sys.table_sizes_stats_1hour)
ORDER BY columnar_used_bytes DESC;
PostgreSQL
SELECT interval_end,
table_name,
used_bytes,
columnar_used_bytes,
columnar_coverage_ratio
FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end = (
SELECT MAX(interval_end)
FROM spanner_sys.table_sizes_stats_1hour)
ORDER BY columnar_used_bytes DESC;
查詢輸出
| interval_end | table_name | used_bytes | columnar_used_bytes | columnar_coverage_ratio |
|---|---|---|---|---|
2022-11-15 13:00:00-07:00 |
order_item |
45371664 |
15123888 |
0.95 |
2022-11-15 13:00:00-07:00 |
orders |
10012500 |
3337500 |
0.85 |
2022-11-15 13:00:00-07:00 |
item_inventory |
2094549 |
0 |
0 |
2022-11-15 13:00:00-07:00 |
customer |
870000 |
0 |
0 |
查詢特定資料表或索引在過去 24 小時內的資料欄儲存空間和涵蓋率趨勢
下列查詢會傳回特定資料表或索引在過去 24 小時內的單欄式儲存空間大小和涵蓋率:
GoogleSQL
SELECT interval_end,
columnar_used_bytes,
columnar_coverage_ratio
FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -24 HOUR)
AND table_name = "<var>table_name</var>"
ORDER BY interval_end DESC;
其中:
table_name必須是資料庫中現有的資料表或索引。
PostgreSQL
SELECT interval_end,
columnar_used_bytes,
columnar_coverage_ratio
FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '24 HOUR')
AND table_name = '<var>table_name</var>'
ORDER BY interval_end DESC;
其中:
table_name必須是資料庫中現有的資料表或索引。
查詢輸出
| interval_end | columnar_used_bytes | columnar_coverage_ratio |
|---|---|---|
2022-11-15 13:00:00-07:00 |
3337500 |
0.85 |
2022-11-15 12:00:00-07:00 |
3337500 |
0.85 |
2022-11-15 11:00:00-07:00 |
3140000 |
0.8 |
2022-11-15 10:00:00-07:00 |
2945000 |
0.75 |
2022-11-15 09:00:00-07:00 |
2750000 |
0.7 |
2022-11-15 08:00:00-07:00 |
2355000 |
0.6 |
TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR
SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR 包含資料庫中所有資料表的大小,並依 interval_end 排序,適用於每個位置群組。間隔時間以時鐘時間為準,在整點結束。在內部,Spanner 每 5 分鐘會從所有伺服器收集資料,並在不久後將資料提供至 TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR 資料表。然後計算每小時的平均值。舉例來說,在上午 11:59:30,TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR 會顯示上午 10:00:00 至上午 10:59:59 期間,每個位置群組的平均資料表大小。
資料表結構定義
| 資料欄名稱 | 類型 | 說明 |
|---|---|---|
INTERVAL_END |
TIMESTAMP |
收集資料表大小的時間間隔結束時間。 |
TABLE_NAME |
STRING |
資料表或索引的名稱。 |
LOCALITY_GROUP |
STRING |
地區群組名稱。 |
USED_BYTES |
FLOAT64 |
資料表大小 (以位元組為單位)。 |
USED_SSD_BYTES |
FLOAT64 |
資料表使用的 SSD 儲存空間 (以位元組為單位)。 |
USED_HDD_BYTES |
FLOAT64 |
資料表使用的 HDD 儲存空間 (以位元組為單位)。 |
資料保留
Spanner 至少會保留過去 30 天內 SPANNER_SYS.TABLE_SIZES_STATS_1HOUR 的資料。
後續步驟
- 瞭解其他自我檢查工具。
- 如要瞭解 Spanner 為每個資料庫儲存的其他資訊,請參閱資料庫的資訊結構定義資料表。
- 進一步瞭解 Spanner 的 SQL 最佳做法。
- 進一步瞭解如何調查 CPU 使用率過高的問題。
- 瞭解資料欄引擎。
- 瞭解如何監控資料欄引擎。