创建和管理地区组

本页介绍了如何创建和管理 Spanner 本地群组。您可以使用位置组为数据库架构中的数据定义分层存储政策。如需了解分层存储的工作原理,请参阅分层存储

创建地理区域组

您可以创建没有任何分层存储政策的本地化组,也可以创建本地化组来为数据库架构中的数据定义存储政策。

控制台

  1. 前往 Google Cloud 控制台中的 Spanner 实例页面。

    实例

  2. 选择要使用分层存储空间的实例。

  3. 选择要使用分层存储空间的数据库。

  4. 在导航菜单中,点击 Spanner Studio

  5. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。

  6. 使用 GoogleSQLPostgreSQL 输入 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';
    
  7. 点击运行

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 会在其正常压缩周期(通常在指定时间后的 7 天内)将数据迁移到 HDD 存储空间。使用基于时长的分层存储政策时,数据在 SSD 中存储的最短时间为 1 小时,之后才会移至 HDD 存储空间。

如需创建基于年龄的地区组,请使用 CREATE LOCALITY GROUP DDL 语句。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入 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';
    
  3. 点击运行

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'"

为数据设置分层存储政策

创建位置组后,您可以为数据设置分层存储政策。分层存储政策决定了数据使用的本地化组。您可以在数据库、表、列或次级索引级设置分层存储政策。除非明确替换,否则每个数据库对象都会从其父级继承分层存储政策。

设置数据库级别的本地性群组

默认的分层存储政策是将所有数据存储在 SSD 存储空间中。您可以通过更改 default 本地化组来更改数据库级分层存储政策。对于 GoogleSQL 方言数据库,您的 ALTER LOCALITY GROUP DDL 语句必须在反引号 (`default`) 中包含 default。您只需为 default 本地化组添加反引号。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入 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';
    
  3. 点击运行

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';"

设置表级别的本地性群组

您可以为数据设置表级分层存储政策,以替换数据库级分层存储政策。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入 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;
    
  3. 点击运行

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;"

设置列级替换分层存储政策

您可以为数据设置列级替换分层存储政策。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入包含列级替换分层存储策略的 CREATE TABLE DDL 语句。

    例如,以下 DDL 语句会创建一个使用本地性组 ssd_onlySingers 表。不过,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;
    
  3. 点击运行

gcloud

如需使用 gcloud CLI 命令设置列级替换分层存储政策,请使用 gcloud spanner databases ddl update

例如,以下 DDL 语句会创建一个使用本地性组 ssd_onlySingers 表。不过,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;"

设置二级索引级别的替换分层存储空间政策

您可以为数据设置次级索引级替换分层存储政策。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入包含次级索引级替换分层存储策略的 CREATE INDEX DDL 语句。

    例如,以下 DDL 语句会创建一个使用本地性组 ssd_onlySingers 表。该数据库还针对数据库中的所有 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;
    
  3. 点击运行

gcloud

如需使用 gcloud CLI 命令设置辅助索引级替换分层存储空间政策,请使用 gcloud spanner databases ddl update

例如,以下 DDL 语句会创建一个使用本地性组 ssd_onlySingers 表。数据库还会按名字和姓氏为数据库中的所有 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;"

设置列级本地性群组

您可以为数据设置列级本地性群组,即使该本地性群组没有分层存储政策也是如此。从此列读取数据的速度比从与其他列分组的数据读取数据的速度更快。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 输入使用 GoogleSQLPostgreSQL 将列分配给某个本地化组的 CREATE TABLE DDL 语句。

    例如,以下 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;
    
  3. 点击运行

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 天。

更改表所使用的本地性组

您可以在表选项中设置新的或其他本地群组,以更改表所使用的本地群组。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 输入使用 GoogleSQLPostgreSQL 更改表所用本地化组的 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;
    
  3. 点击运行

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;"

更改表列使用的本地性群组

您可以在列选项中设置本地群组,以更改表的列使用的本地群组。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 输入使用 GoogleSQLPostgreSQL 更改表所用本地化组的 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;
    
  3. 点击运行

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。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入 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';
    
  3. 点击运行

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 存储空间之前的时间,来更改某个位置组的基于时长的政策。

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入 ALTER LOCALITY GROUP DDL 语句。

    例如,以下 DDL 语句会将数据在 SSD 中存储的时长延长到 20 天,从而更改了本地化组 spill_to_hdd 的基于时长的政策:

    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';
    
  3. 点击运行

gcloud

如需使用 gcloud CLI 命令更改地区组的年龄段政策,请使用 gcloud spanner databases ddl update

例如,以下 DDL 语句会将数据在 SSD 中存储的时长延长到 20 天,从而更改了基于时长的本地性组 spill_to_hdd 的政策:

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';"

删除地理区域组

如果某个地区组包含数据,则无法将其删除。您必须先将该位置群组中的所有数据移至另一个位置群组。如需了解详情,请参阅更改表所使用的本地性群组

控制台

  1. Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
  2. 使用 GoogleSQLPostgreSQL 输入 DROP LOCALITY GROUP DDL 语句。

    例如,您可以运行以下命令来删除位置组 ssd_only

    GoogleSQL

    DROP LOCALITY GROUP ssd_only;
    

    PostgreSQL

    DROP LOCALITY GROUP ssd_only;
    
  3. 点击运行

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"

后续步骤