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 存储空间(以字节为单位)。 | 
示例查询
本部分提供了几个可检索汇总表大小统计信息的示例 SQL 语句。您可以使用客户端库、gcloud spanner 或Google 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 | 表所用的 HDD 存储空间(以字节为单位)。 | 
数据保留
Spanner 至少会保留过去 30 天内的间隔的SPANNER_SYS.TABLE_SIZES_STATS_1HOUR数据。
后续步骤
- 了解其他内省工具。
- 了解 Spanner 在数据库的信息架构表中为每个数据库存储的其他信息。
- 详细了解适用于 Spanner 的 SQL 最佳实践。
- 详细了解调查高 CPU 利用率。