分层存储概览

本页面介绍和说明了分层存储在 Spanner 中的运作方式。GoogleSQL 方言数据库和 PostgreSQL 方言数据库都支持此功能。

Spanner 分层存储是一种全托管式存储功能,可让您选择是将数据存储在固态硬盘 (SSD) 还是普通硬盘 (HDD) 上。默认情况下,如果您不使用分层存储,您的数据会存储在 SSD 存储空间中。根据您使用或访问数据的频率,您可以考虑使用分层存储,并在 SSD 和 HDD 存储空间中存储数据。

  • 对于大多数应用场景而言,SSD 存储空间是性能最高(每秒查询次数更高)且最具成本效益的选择。您应使用它来存储具有高写入和读取吞吐量的活跃数据以及需要低延迟数据访问权限的数据。
  • HDD 存储空间有时适用于对延迟不敏感、不常访问的大型数据集,或者存储成本是重要考虑因素的情况。

使用分层存储,您可以同时利用 SSD 存储空间(支持活跃数据的高性能)和 HDD 存储空间(支持低成本的非频繁数据访问权限)。

在 SSD 和 HDD 存储设备之间选择

下表列出了 SSD 和 HDD 存储空间之间的异同。如果不确定,我们建议您选择 SSD 存储空间。

SSD 存储空间 HDD 存储空间
目标应用场景 需要高写入和读取吞吐量以及低延迟数据访问权限的数据 对延迟不敏感或不常访问的大型数据集
每个节点的预期吞吐量
区域级配置
读取速度高达 22,500 QPS
写入速度高达 3,500 QPS
读取速度高达 1,500 QPS
写入速度高达 3,500 QPS
每个节点的预期吞吐量
双区域和多区域配置
每个区域读取速度高达 1,500 QPS
写入速度高达 2,700 QPS
每个区域读取速度高达 1,000 QPS
写入速度高达 2,700 QPS
支持的操作 读取、写入、更新和删除 读取、写入、更新和删除

使用吞吐量优化写入可提高写入吞吐量,使其超出表中的数字。如需了解详情,请参阅性能概览

优势

分层存储可让您同时使用 SSD 和 HDD 存储空间,从而提供以下优势:

  • 显著降低总拥有成本:HDD 存储空间可为对延迟不敏感或不常访问的大型数据集提供成本更低的选择。
  • 易于管理:提供全托管式分层服务,而无需额外的流水线和拆分逻辑的复杂性。
  • 统一且一致的体验:提供统一的数据访问权限,并针对热数据和(可变)冷数据提供一组指标
  • 提升性能:通过将数据整理在不同的存放区域群组中来提高查询性能,从而提供跨列的数据存放区域和隔离。同一存放区域群组中的数据在物理上存储在一起。

分层存储的运作方式

默认情况下,当您创建新实例时,数据仅存储在 SSD 存储空间中。同样,现有实例中的数据也只能存储在 SSD 存储空间中。

如果您选择使用分层存储将部分数据存储在 HDD 存储空间中,则必须创建存放区域群组,以便为架构中的数据定义分层存储政策。创建存放区域群组时,您可以定义存储空间类型,即 ssdhdd。您也可以选择定义数据在 SSD 存储空间中存储的时间(在数据移至 HDD 存储空间之前)。在指定时间过去后,Spanner 会在正常压缩周期内将数据迁移到 HDD 存储空间,该周期通常在指定时间后的 7 天内发生。这种政策称为基于存储时长的分层存储政策。使用基于存储时长分层存储空间政策时,数据必须在 SSD 中存储的最短时间(在将其移至 HDD 存储空间之前)为 1 小时。

定义存放区域群组后,在创建表时,您可以在数据库、表、列或二级索引级别设置分层存储政策。分层存储政策决定了数据的存储方式和存储位置。如需了解相关说明,请参阅创建和管理存放区域群组

备份和恢复

您可以使用 Spanner 备份来备份和恢复数据。备份包含所有存储架构信息,包括 INFORMATION_SCHEMA.LOCALITY_GROUP_OPTIONS,用于指定每个存放区域群组的存储类型。如需将包含存放区域群组的备份恢复到新实例,目标实例必须是 Spanner 企业版或 Spanner 企业 Plus 版。

Data Boost

您可以使用 Spanner Data Boost 访问 SSD 或 HDD 存储空间中的数据。查询 HDD 中的数据会使用实例的 HDD 磁盘负载容量,这是计算容量的一部分。

搜索索引

全文搜索向量索引会继承在数据库对象上设置的存放区域群组。

可观测性

分层存储提供以下可观测性功能。

Cloud Monitoring 指标

Spanner 提供以下指标,可帮助您使用 Cloud Monitoring 监控分层存储空间用量和数据:

  • spanner.googleapis.com/instance/storage/used_bytes(总存储空间):显示 SSD 和 HDD 存储空间中存储的数据总字节数。
  • spanner.googleapis.com/instance/storage/combined/limit_bytes:显示 SSD 和 HDD 存储空间限制的总计。
  • spanner.googleapis.com/instance/storage/combined/limit_bytes_per_processing_unit:显示每个处理单元的 SSD 和 HDD 存储空间限制总计。
  • spanner.googleapis.com/instance/storage/combined/utilization:显示 SSD 和 HDD 存储空间利用率的总计,并与存储空间限制总计进行比较。
  • spanner.googleapis.com/instance/disk_load:以百分比显示 HDD 用量。如果您的实例达到 100% 的 HDD 磁盘负载,您会遇到延迟时间显著增加的情况。

如果您有现有查询会按 storage_class:ssd 过滤现有指标,则必须移除该过滤条件才能查看 HDD 用量。

如需详细了解如何监控 Spanner 资源,请参阅使用系统分析洞见监控实例使用 Cloud Monitoring 监控实例

信息架构

INFORMATION_SCHEMA.LOCALITY_GROUP_OPTIONS 包含 Spanner 数据库中的存放区域群组和选项列表。它包含 default 存放区域群组的信息。如需了解详情,请参阅 GoogleSQL 方言数据库的 locality_group_optionsPostgreSQL 方言数据库的 locality_group_options

内置统计信息表

以下内置统计信息表适用于使用分层存储的数据库:

  • SPANNER_SYS.TABLE_SIZES_STATS_1HOUR:显示数据库中每个表的 HDD 和 SSD 存储空间用量。
  • SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR:显示数据库中每个存放区域群组的 HDD 和 SSD 存储空间用量。

如需了解详情,请参阅表大小统计信息

查询统计信息表和读取统计信息表具有以下与分层存储相关的列:

  • AVG_DISK_IO_COST:此查询在 Spanner HDD 磁盘负载方面的平均成本。使用此值可在数据库中运行的读取操作之间比较相对 HDD I/O 成本。值越高,表示您使用的 HDD 磁盘负载越多,并且查询的速度可能比在 SSD 上运行时慢。此外,如果您的 HDD 磁盘负载达到容量上限,您的查询性能可能会受到进一步影响。

如需了解详情,请参阅查询统计信息读取统计信息

价格

使用分层存储不会产生额外费用。您需要根据实例使用的计算容量和数据库使用的存储空间支付标准 Spanner 价格。存储在 SSD 和 HDD 上的数据会按各自的存储费率计费。您在 SSD 和 HDD 存储空间之间移动数据时不会产生费用。查询 HDD 中的数据会使用实例的 HDD 磁盘负载容量,这是计算容量价格的一部分。如需了解详情,请参阅 Spanner 价格

后续步骤