本页介绍了如何创建和管理 Spanner 位置组。您可以使用位置组为数据库架构中的数据定义分层存储空间政策。如需了解分层存储的运作方式,请参阅分层存储。
创建存储位置组
您可以创建不包含任何分层存储空间政策的位置组,也可以创建位置组来定义数据库架构中数据的存储空间政策。
如果您创建的位置组没有分层存储空间政策,则该位置组会继承 default
位置组的分层存储空间政策。如果您尚未手动设置 default
位置组的存储空间政策,则存储空间政策会设置为仅限 SSD。
控制台
前往Google Cloud 控制台中的 Spanner 实例页面。
选择要使用分层存储空间的实例。
选择要使用分层存储空间的数据库。
在导航菜单中,点击 Spanner Studio。
在 Spanner Studio 页面上,点击
新标签页或使用空白编辑器标签页。使用 GoogleSQL 或 PostgreSQL 输入
CREATE LOCALITY GROUP
DDL 语句。例如,您可以运行以下命令来创建一个位置组
separate_storage
,以便将列存储在与其他列数据不同的文件中:GoogleSQL
CREATE LOCALITY GROUP separate_storage;
PostgreSQL
CREATE LOCALITY GROUP separate_storage;
例如,您可以运行以下命令来创建一个将数据存储在 SSD 存储空间中的位置组
ssd_only
:GoogleSQL
CREATE LOCALITY GROUP ssd_only OPTIONS (storage='ssd');
PostgreSQL
CREATE LOCALITY GROUP ssd_only STORAGE 'ssd';
例如,您可以运行以下命令来创建一个将数据存储在 HDD 存储空间中的
hdd_only
位置组:GoogleSQL
CREATE LOCALITY GROUP hdd_only OPTIONS (storage='hdd');
PostgreSQL
CREATE LOCALITY GROUP hdd_only STORAGE 'hdd';
点击运行。
gcloud
如需使用 gcloud CLI 命令创建位置组,请使用 gcloud spanner databases ddl update
。
例如,您可以运行以下命令来创建一个位置组 separate_storage
,以便将列存储在与其他列数据不同的文件中:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP separate_storage"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP separate_storage"
例如,您可以运行以下命令来创建一个将数据存储在 SSD 上的位置组 ssd_only
:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP ssd_only OPTIONS (storage='ssd')"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP ssd_only STORAGE 'ssd'"
例如,您可以运行以下命令来创建一个将数据存储在 HDD 存储空间中的 hdd_only
位置组:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP hdd_only OPTIONS (storage='hdd')"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP hdd_only STORAGE 'hdd'"
为位置组创建基于存储时长的政策
具有基于存在时间的政策的位置组会将较新的数据存储在 SSD 存储空间中,并在指定时间内保留这些数据。在指定时间过去后,Spanner 会在其正常压缩周期期间将数据迁移到 HDD 存储空间,该周期通常在指定时间后的 7 天内发生。使用基于存储时长分层存储空间政策时,数据必须在 SSD 中存储的最短时间(在将其移至 HDD 存储空间之前)为 1 小时。
如需创建基于存储时长的位置组,请使用 CREATE LOCALITY GROUP
DDL 语句。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
CREATE LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会创建一个位置组
spill_to_hdd
,该组会在前 10 天将数据存储在 SSD 存储空间中,然后在正常压缩周期内将较旧的数据迁移到 HDD 存储空间:GoogleSQL
CREATE LOCALITY GROUP spill_to_hdd OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '10d');
PostgreSQL
CREATE LOCALITY GROUP spill_to_hdd STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d';
点击运行。
gcloud
如需使用 gcloud CLI 命令创建基于存储时长的位置组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个位置组 spill_to_hdd
,该组会在前 10 天将数据存储在 SSD 中,然后在正常压缩周期内将较旧的数据迁移到 HDD。
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP spill_to_hdd OPTIONS (storage='ssd', ssd_to_hdd_spill_timespan='10d')"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP spill_to_hdd STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d'"
为数据设置分层存储空间政策
创建位置组后,您可以为数据设置分层存储空间政策。分层存储空间政策决定了数据使用的位置组。您可以在数据库、表、列或二级索引级别设置分层存储空间政策。除非明确替换,否则每个数据库对象都会从其父级继承分层存储空间政策。
如果您创建的位置组没有分层存储空间政策,则该位置组会继承 default
位置组的分层存储空间政策。如果您尚未手动设置 default
位置组的存储空间政策,则存储空间政策会设置为仅限 SSD。
设置数据库级位置组
默认的分层存储空间政策是将所有数据存储在 SSD 存储空间中。您可以通过更改 default
位置组来更改数据库级分层存储空间政策。对于 GoogleSQL 方言数据库,您的 ALTER LOCALITY GROUP
DDL 语句必须在反引号 (`default`
) 内包含 default
。您只需为 default
位置组添加反引号。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会更改
default
位置组以使用基于存储时长的存储空间分层政策。数据库中的所有数据会在 10 天后移至 HDD 存储空间。GoogleSQL
ALTER LOCALITY GROUP `default` SET OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '10d');
PostgreSQL
ALTER LOCALITY GROUP "default" STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d';
点击运行。
gcloud
如需使用 gcloud CLI 命令更改 default
位置组的分层存储空间政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会更改 default
位置组以使用基于存储时长的存储空间分层政策。数据库中的所有数据在 10 天后会移至 HDD 存储空间。
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP \`default\` SET OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '10d');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP \"default\" STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d';"
设置表级位置组
您可以为数据设置表级分层存储空间政策,以替换数据库级分层存储空间政策。除非您设置了列级替换分层存储空间政策,否则表级分层存储空间政策也适用于表中的所有列。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
CREATE TABLE
DDL 语句。例如,以下 DDL 语句会创建一个使用位置组
ssd_only
的表Singers
:GoogleSQL
CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');
PostgreSQL
CREATE TABLE Singers ( SingerId bigint PRIMARY KEY, FirstName varchar(1024), LastName varchar(1024), SingerInfo bytea ) LOCALITY GROUP ssd_only;
点击运行。
gcloud
如需使用 gcloud CLI 命令设置表级分层存储空间政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个使用位置组 ssd_only
的表 Singers
。
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( SingerId INT64 NOT NULL, \
FirstName STRING(1024), \
LastName STRING(1024), \
SingerInfo BYTES(MAX) \
) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( \
SingerId bigint PRIMARY KEY, \
FirstName varchar(1024), \
LastName varchar(1024), \
SingerInfo bytea \
) LOCALITY GROUP ssd_only;"
设置列级替换分层存储空间政策
您可以为数据设置列级别的替换分层存储空间政策。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入带有列级替换分层存储空间政策的
CREATE TABLE
DDL 语句。例如,以下 DDL 语句会创建一个使用位置组
ssd_only
的Singers
表。不过,Awards
列会替换此表级位置组,并使用spill_to_hdd
位置组作为分层存储空间政策:GoogleSQL
CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), Awards ARRAY<STRING(MAX)> OPTIONS (locality_group = 'spill_to_hdd') ) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');
PostgreSQL
CREATE TABLE Singers ( SingerId bigint PRIMARY KEY, FirstName varchar(1024), LastName varchar(1024), Awards varchar[] LOCALITY GROUP spill_to_hdd ) LOCALITY GROUP ssd_only;
点击运行。
gcloud
如需使用 gcloud CLI 命令设置列级替换分层存储空间政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个使用位置组 ssd_only
的 Singers
表。不过,Awards
列会替换此表级分层存储空间政策,并使用 spill_to_hdd
位置组作为其分层存储空间政策:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( \
SingerId INT64 NOT NULL, \
FirstName STRING(1024), \
LastName STRING(1024), \
Awards ARRAY<STRING(MAX)> OPTIONS (locality_group = 'spill_to_hdd') \
) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');" \
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( \
SingerId bigint PRIMARY KEY, \
FirstName varchar(1024), \
LastName varchar(1024), \
Awards varchar[] LOCALITY GROUP spill_to_hdd \
) LOCALITY GROUP ssd_only;"
设置二级索引级替换分层存储空间政策
您可以为数据设置二级索引级别的替换分层存储空间政策。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL,输入带有二级索引级别替换分层存储空间政策的
CREATE INDEX
DDL 语句。例如,以下 DDL 语句会创建一个使用位置组
ssd_only
的Singers
表。数据库还会按名字和姓氏为数据库中的所有Singers
创建二级索引。SingersByFirstLastName
索引会替换表级分层存储空间政策,并使用spill_to_hdd
位置组作为其分层存储空间政策:GoogleSQL
CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) OPTIONS (locality_group = 'spill_to_hdd');
PostgreSQL
CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) LOCALITY GROUP spill_to_hdd;
点击运行。
gcloud
如需使用 gcloud CLI 命令设置二级索引级别的替换分层存储空间政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个使用位置组 ssd_only
的 Singers
表。数据库还会按名字和姓氏为数据库中的所有 Singers
创建二级索引。SingersByFirstLastName
索引会替换表级分层存储空间政策,并使用 spill_to_hdd
位置组作为其分层存储空间政策:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) \
OPTIONS (locality_group = 'spill_to_hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) \
LOCALITY GROUP spill_to_hdd;"
设置列级位置组
您可以为数据设置列级别的位置组,即使该位置组没有分层存储空间政策也是如此。从此列读取数据比读取与其他列分组的数据更快。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
输入
CREATE TABLE
DDL 语句,该语句会使用 GoogleSQL 或 PostgreSQL 将列分配到一个位置组。例如,以下 DDL 语句会创建一个
Songs
表,其中包含一个在hdd_only
位置组中单独存储的LyricsCompressed
列:GoogleSQL
CREATE TABLE Songs ( SingerId INT64 NOT NULL, SongId INT64 NOT NULL, Title STRING(MAX), Description STRING(MAX), LyricsCompressed BYTES(MAX) OPTIONS (locality_group = 'hdd_only') ) PRIMARY KEY (SingerId, SongId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE, OPTIONS (locality_group = 'ssd_only');
PostgreSQL
CREATE TABLE Songs ( SingerId BIGINT NOT NULL, SongId BIGINT NOT NULL, Title VARCHAR, Description TEXT, LyricsCompressed BYTEA LOCALITY GROUP hdd_only, PRIMARY KEY (SingerId, SongId) ) LOCALITY GROUP ssd_only INTERLEAVE IN PARENT Singers ON DELETE CASCADE;
点击运行。
gcloud
如需使用 gcloud CLI 命令为数据设置列级别的位置组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个 Songs
表,其中包含一个在 hdd_only
位置组中单独存储的 LyricsCompressed
列:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Songs ( \
SingerId INT64 NOT NULL, \
SongId INT64 NOT NULL, \
Title STRING(MAX), \
Description STRING(MAX),
LyricsCompressed BYTES(MAX) OPTIONS (locality_group = 'hdd_only') \
) PRIMARY KEY (SingerId, SongId), \
INTERLEAVE IN PARENT Singers ON DELETE CASCADE, \
OPTIONS (locality_group = 'ssd_only');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Songs ( \
SingerId BIGINT NOT NULL, \
SongId BIGINT NOT NULL, \
Title VARCHAR, \
Description TEXT, \
LyricsCompressed BYTEA LOCALITY GROUP hdd_only, \
PRIMARY KEY (SingerId, SongId) \
) LOCALITY GROUP ssd_only INTERLEAVE IN PARENT Singers ON DELETE CASCADE;
在存储空间选项之间移动数据
您可以在 SSD 存储空间和 HDD 存储空间之间移动数据。数据迁移最多可能需要 7 天。您可以通过查询内置的 SPANNER_SYS.TABLE_SIZES_STATS_1HOUR
表来监控迁移进度,以检查数据库中每个表的 HDD 和 SSD 存储空间用量。您还可以使用 Cloud Monitoring spanner.googleapis.com/instance/storage/used_bytes
指标来监控存储空间用量,以显示数据库或实例的 SSD 和 HDD 细分数据。如需了解详情,请参阅分层存储可观测性。
将数据从 SSD 移动到 HDD 存储空间
如需将数据从 SSD 移动到 HDD 存储空间,您可以使用基于存储时长的分层存储空间政策创建新的位置组,也可以更改现有位置组的分层存储空间政策。将数据从 SSD 移动到 HDD 最长可能需要 7 天。如需了解详情,请参阅为位置组创建基于存储时长的政策或更改存储选项。
将数据从 HDD 移动到 SSD 存储空间
如需将数据从 HDD 移动到 SSD 存储空间,您可以更改现有位置组的存储选项,或更改表所用的位置组。将数据从 SSD 移动到 HDD 最长可能需要 7 天。
更改表所使用的位置组
您可以在表选项中设置新的或不同的位置组,从而更改表所使用的位置组。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER TABLE
DDL 语句,以更改表所用的位置组。例如,以下 DDL 语句会将表
Singers
使用的位置组更改为spill_to_hdd
:GoogleSQL
ALTER TABLE Singers SET OPTIONS (locality_group = 'spill_to_hdd');
PostgreSQL
ALTER TABLE Singers SET LOCALITY GROUP spill_to_hdd;
点击运行。
gcloud
如需使用 gcloud CLI 命令更改表所使用的位置组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会将表 Singers
使用的位置组更改为 spill_to_hdd
:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers SET OPTIONS(locality_group = 'spill_to_hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers SET LOCALITY GROUP spill_to_hdd;"
更改表列所用的位置组
您可以通过在列选项中设置位置组来更改表列所使用的位置组。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER TABLE
DDL 语句,以更改表所用的位置组。例如,以下 DDL 语句会将表的列
LastName
使用的位置组更改为spill_to_hdd
:GoogleSQL
ALTER TABLE Singers ALTER COLUMN LastName SET OPTIONS(locality_group = 'spill_to_hdd');
PostgreSQL
ALTER TABLE Singers ALTER COLUMN LastName SET LOCALITY GROUP spill_to_hdd;
点击运行。
gcloud
如需使用 gcloud CLI 命令更改表所使用的位置组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会将表的列 LastName
使用的位置组更改为 spill_to_hdd
:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers ALTER COLUMN LastName SET OPTIONS(locality_group = 'spill_to_hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers ALTER COLUMN SET LOCALITY GROUP spill_to_hdd;"
更改位置组
您可以通过更改其存储选项或更改其基于存储时长的政策来更改位置组。
更改存储空间选项
您可以将某个位置组的存储空间选项从 SSD 更改为 HDD,或者从 HDD 更改为 SSD。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会将
separate_storage
的存储选项更改为 HDD:GoogleSQL
ALTER LOCALITY GROUP separate_storage SET OPTIONS (storage='hdd');
PostgreSQL
ALTER LOCALITY GROUP separate_storage STORAGE 'hdd';
点击运行。
gcloud
如需使用 gcloud CLI 命令更改位置组的存储选项,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会将 separate_storage
的存储选项更改为 HDD:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP separate_storage SET OPTIONS (storage = 'hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP separate_storage STORAGE 'hdd';"
更改基于存储时长的政策
您可以通过延长或缩短数据在 SSD 中存储的时间(在数据被移至 HDD 存储空间之前)来更改位置组的基于存储时长的政策。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会更改位置组
spill_to_hdd
的基于存储时长的政策,将数据在 SSD 中存储的时间延长至 20 天:GoogleSQL
ALTER LOCALITY GROUP spill_to_hdd SET OPTIONS (ssd_to_hdd_spill_timespan = '20d');
PostgreSQL
ALTER LOCALITY GROUP spill_to_hdd SSD_TO_HDD_SPILL_TIMESPAN '20d';
点击运行。
gcloud
如需使用 gcloud CLI 命令更改位置组的基于存储时长的政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会更改位置组 spill_to_hdd
的基于存储时长的政策,将数据在 SSD 中存储的时间延长至 20 天:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP spill_to_hdd SET OPTIONS (ssd_to_hdd_spill_timespan = '20d');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP spill_to_hdd SSD_TO_HDD_SPILL_TIMESPAN '20d';"
删除位置组
如果某个位置组包含数据,则无法将其删除。您必须先将该级别组中的所有数据移至其他级别组。如需了解详情,请参阅更改表所用的位置组。
控制台
- 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
DROP LOCALITY GROUP
DDL 语句。例如,您可以运行以下命令以删除位置组
ssd_only
:GoogleSQL
DROP LOCALITY GROUP ssd_only;
PostgreSQL
DROP LOCALITY GROUP ssd_only;
点击运行。
gcloud
如需使用 gcloud CLI 命令删除位置组,请使用 gcloud spanner databases ddl update
。
例如,如要删除 ssd_only
位置组,请运行以下命令:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="DROP LOCALITY GROUP ssd_only"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="DROP LOCALITY GROUP ssd_only"
后续步骤
- 详细了解分层存储。
- 详细了解位置组。
- 详细了解如何使用时间戳谓词下推优化查询。