資料表大小統計資料

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 指令。

  • executeSql 或 executeStreamingSql 方法。

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 的資料。

後續步驟