表格大小統計資料

Spanner 提供下列內建資料表:

  • SPANNER_SYS.TABLE_SIZES_STATS_1HOUR:列出資料庫中資料表和索引的大小。
  • SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR:列出每個地區群組中資料庫內的資料表和索引大小。

資料表大小以位元組為單位。表格大小包含資料版本。您可以使用這些內建表格,監控資料表和索引的大小變化。您也可以在建立、刪除及修改索引時,監控索引的大小 (例如在索引中插入更多資料列,或在索引中新增資料欄)。此外,您也可以查看變更資料流表格的大小。

您可以使用資料庫儲存空間總計指標監控資料庫儲存空間。 您可以使用 SPANNER_SYS.TABLE_SIZES_STATS_1HOURSPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR,查看資料庫儲存空間的細目。

存取資料表大小統計資料

Spanner 會在 SPANNER_SYS 結構定義中提供資料表大小統計資料。您可以透過下列方式存取 SPANNER_SYS 資料:

  • Google Cloud 控制台中的資料庫 Spanner Studio 頁面。

  • gcloud spanner databases execute-sql 指令。

  • executeSqlexecuteStreamingSql 方法。

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 資料表使用的硬碟儲存空間 (以位元組為單位)。

查詢範例

本節包含多個擷取匯總資料表大小統計資料的範例 SQL 陳述式。您可以使用用戶端程式庫gcloud spannerGoogle Cloud 主控台執行這些 SQL 陳述式。

查詢最近間隔中最大的 4 個資料表和索引

下列查詢會傳回最近間隔中,4 個最大的資料表和索引:

    SELECT interval_end,
          table_name,
          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 used_bytes DESC
    LIMIT 4;
  

查詢輸出
interval_end table_name 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
  FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -24 HOUR)
  AND table_name = "table_name"
ORDER BY interval_end DESC;

其中:

  • table_name 必須是資料庫中現有的資料表或索引。

PostgreSQL

SELECT interval_end, used_bytes
  FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '24 HOUR')
  AND table_name = 'table_name'
ORDER BY interval_end DESC;

其中:

  • table_name 必須是資料庫中現有的資料表或索引。
查詢輸出
interval_end 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

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 資料表使用的硬碟儲存空間 (以位元組為單位)。

資料保留

Spanner 至少會保留SPANNER_SYS.TABLE_SIZES_STATS_1HOUR前 30 天的資料。

後續步驟