分层存储概览

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

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

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

通过使用分层存储,您可以同时利用 SSD 存储(支持高性能的活跃数据)和 HDD 存储(支持不经常访问的数据,且费用较低)。

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

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

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

优势

分层存储可让您同时使用 SSD 和 HDD 存储空间,从而带来以下好处:

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

分层存储空间的运作方式

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

如果您选择使用分层存储在 HDD 存储空间中存储部分数据,则必须创建一个本地群组,用于为架构中的数据定义分层存储政策。创建位置组时,您可以定义存储类型(ssdhdd)。您还可以根据需要定义数据在 SSD 存储空间中存储之前,需要在 HDD 存储空间中存储的时间。指定时间过后,Spanner 会在其正常压缩周期(通常在指定时间后的 7 天内)将数据迁移到 HDD 存储空间。这称为基于存在时间的分层存储政策。使用基于时长的分层存储政策时,数据在 SSD 中存储的最短时间为 1 小时,之后才会移至 HDD 存储空间。

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

备份和恢复

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

Data Boost

您可以使用 Spanner Data Boost 访问 SSD 或 HDD 存储空间中的数据。由于 I/O 操作增加,在 HDD 存储空间上查询数据会产生更高的费用。如需了解详情,请参阅价格

搜索索引

全文搜索向量索引会继承在数据库对象上设置的本地性组。

可观测性

分层存储支持以下可观测性功能。

Cloud Monitoring 指标

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

  • spanner.googleapis.com/instance/storage/used_bytes(总存储空间):显示存储在 SSD 和 HDD 存储空间中的数据总字节数。在 Google Cloud 控制台的 Spanner 实例和数据库系统数据分析页面上,有一个用于此指标的存储类型下拉菜单。使用下拉菜单可显示存储在“全部”存储空间、“仅 HDD”存储空间或“仅 SSD”存储空间中的数据总字节数。
  • 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%,延迟时间会大幅增加。

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

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

信息架构

INFORMATION_SCHEMA.LOCALITY_GROUP_OPTIONS 包含 Spanner 数据库中的本地性组和选项列表。其中包含 default 本地化组的信息。如需了解详情,请参阅 适用于 GoogleSQL 方言数据库的 locality_group_options适用于 PostgreSQL 方言数据库的 locality_group_options

内置统计信息表

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

  • SPANNER_SYS.TABLE_SIZES_STATS_1HOUR:显示数据库中每个表的 HDD 和 SSD 存储用量。
  • SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR:显示数据库中每个本地化组的 HDD 和 SSD 存储用量。

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

价格

使用分层存储无需额外付费。系统会根据实例使用的计算容量和数据库使用的存储空间量,按标准 Spanner 价格向您收费。存储在 SSD 和 HDD 中的数据的计费标准各不相同。您无需为在 SSD 和 HDD 存储空间之间迁移数据支付费用。如需了解详情,请参阅 Spanner 价格

后续步骤