建立及管理變更串流

本頁介紹如何為 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫建立、修改和檢視 Spanner 變更流。要瞭解有關變更串流的更多資訊,請參閱關於變更串流

因為變更流是模式對象,所以您可以透過與建立表或新增索引等任何其他類型的資料庫定義工作相同的 DDL 驅動的 模式更新 來建立和管理它們。

Spanner 會在您提交更改模式的 DDL 語句(包括用於建立、變更或刪除變更串流的語句)後開始 長時間運行的操作。新的或修改後的變更串流會在該長時間執行的作業完成後開始監視其新配置指定的列或資料表。

建立變更串流

要建立變更流,您需要提供其名稱以及它監視的模式物件:可以是整個資料庫,也可以是特定表和列的清單。您可以視需要透過下列任一方式設定變更串流:

GoogleSQL

使用 GoogleSQL 建立變更串流的 DDL 語法如下:

CREATE CHANGE STREAM CHANGE_STREAM_NAME
  [FOR column_or_table_watching_definition[, ... ] ]
  [
    OPTIONS (
      retention_period = timespan,
      value_capture_type = type,
      exclude_ttl_deletes = boolean,
      exclude_insert = boolean,
      exclude_update = boolean,
      exclude_delete = boolean,
      allow_txn_exclusion = boolean
    )
  ]

PostgreSQL

使用 PostgreSQL 建立變更串流的 DDL 語法如下:

CREATE CHANGE STREAM CHANGE_STREAM_NAME
  [FOR column_or_table_watching_definition[, ... ] ]
  [
    WITH (
      retention_period = timespan,
      value_capture_type = type,
      exclude_ttl_deletes = boolean,
      exclude_insert = boolean,
      exclude_update = boolean,
      exclude_delete = boolean,
      allow_txn_exclusion = boolean
    )
  ]

建立變更串流的長時間執行的作業完成後,新的變更串流就會立即開始監控指派的結構定義物件。

下列範例說明如何使用各種設定建立變更串流。

觀看整個資料庫

若要建立監視資料庫表中每次資料變更的變更流,請使用 ALL 關鍵字:

CREATE CHANGE STREAM EverythingStream
FOR ALL;

ALL設定會隱含納入資料庫日後建立的所有資料表和資料欄。不包括檢視區塊、資訊結構定義資料表,或一般資料表以外的其他物件。

觀看特定表格

若要將變更流的範圍限制在特定表而不是整個資料庫,請指定一個或多個表的清單:

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

Spanner 自動更新監視整個表的變更流,以反映影響這些表的任何架構變更,例如新增或刪除列。

關注特定專欄

使用 table(column_1[, column_2, ...]) 語法可以監視您指定的表中一個或多個特定非鍵列的變更:

CREATE CHANGE STREAM NamesAndTitles
FOR Singers(FirstName, LastName), Albums(Title);

您無法在此處指定主鍵列,因為每個變更流 always 都會追蹤它監視的每個表的主鍵。這樣,每個資料變更記錄都可以透過其主鍵來識別已變更的行。

在單一資料流中監控表格和資料欄

您可以將前兩個範例中的表格監視和列監視語法合併到單一變更流中:

CREATE CHANGE STREAM NamesAndAlbums
FOR Singers(FirstName, LastName), Albums;

指定更長的保留期限

若要指定 變更串流資料保留期限 比預設的七天更長,請將 retention_period 設定為最多三十天的期限,以小時 (h) 或天 (d) 表示。

舉兩個例子:

GoogleSQL

CREATE CHANGE STREAM LongerDataRetention
FOR ALL
OPTIONS ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
OPTIONS ( retention_period = '7d' );

PostgreSQL

CREATE CHANGE STREAM LongerDataRetention
FOR ALL
WITH ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
WITH ( retention_period = '7d' );

指定不同的值捕獲類型

若要指定除 OLD_AND_NEW_VALUES 之外的 變更流值擷取類型,請將 value_capture_type 設為 NEW_VALUESNEW_ROW,如下例所示:

GoogleSQL

CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_VALUES' );

PostgreSQL

CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_VALUES' );

過濾基於 TTL 的刪除

您可以使用 exclude_ttl_deletes 過濾器從更改流的作用域中過濾 基於 TTL 的刪除

有關此過濾器如何工作的更多信息,請參閱 基於存留時間 (TTL) 的刪除過濾器

GoogleSQL

若要建立具有基於 TTL 的刪除過濾器的變更流,請執行以下範例:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (exclude_ttl_deletes = true)

更改下列內容:

  • CHANGE_STREAM_NAME: 您的新變更流的名稱

以下範例會建立名為 NewFilterChangeStream 的變更串流,並排除所有以 TTL 為準的刪除作業:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_ttl_deletes = true)

PostgreSQL

如要建立含有 TTL 刪除篩選器的變更串流,請執行下列範例:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (exclude_ttl_deletes = true)

更改下列內容:

  • CHANGE_STREAM_NAME: 您的新變更流的名稱

以下範例會建立名為 NewFilterChangeStream 的變更串流,並排除所有以 TTL 為準的刪除作業:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_ttl_deletes = true)

如要從現有變更串流新增或移除以 TTL 為準的刪除篩選器,請參閱「修改以 TTL 為準的刪除篩選器」。您可以以 DDL 形式查看變更串流的定義,確認變更串流篩選器。

依表格修改類型篩選

使用下列可用篩選選項,從變更串流的範圍中篩選一或多個表格修改項目:

  • exclude_insert: 排除所有 INSERT 表修改
  • exclude_update:排除所有 UPDATE 資料表修改
  • exclude_delete:排除所有 DELETE 資料表修改

有關這些過濾器如何工作的更多信息,請參閱 表修改類型過濾器

GoogleSQL

如要建立變更串流,並使用一或多個表格修改類型篩選器,請執行下列指令:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (MOD_TYPE_FILTER_NAME = true)

更改下列內容:

  • CHANGE_STREAM_NAME: 您的新變更流的名稱
  • MOD_TYPE_FILTER_NAME: 你要新增的濾鏡:exclude_insertexclude_updateexclude_delete。 如要一次新增多個篩選條件,請以半形逗號分隔。

以下範例會建立名為 NewFilterChangeStream 的變更串流,並排除 INSERTUPDATE 資料表修改類型:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_insert = true, exclude_update = true)

PostgreSQL

如要建立變更串流,並使用一或多個表格修改類型篩選器,請執行下列指令:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (MOD_TYPE_FILTER_NAME = true)

更改下列內容:

  • CHANGE_STREAM_NAME: 您的新變更流的名稱
  • MOD_TYPE_FILTER_NAME: 你要新增的濾鏡:exclude_insertexclude_updateexclude_delete。 如要一次新增多個篩選條件,請以半形逗號分隔。

以下範例會建立名為 NewFilterChangeStream 的變更串流,並排除 INSERTUPDATE 資料表修改類型:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_insert = true, exclude_update = true)

若要從現有變更流中新增或刪除表修改類型篩選器,請參閱按表修改類型修改篩選器。 如要確認變更串流有哪些資料表修改類型篩選器,請以 DDL 形式查看變更串流的定義

啟用排除交易級記錄的功能

您可以建立變更串流時設定 allow_txn_exclusion 選項,或修改現有變更串流,啟用變更串流來排除特定寫入交易的記錄。

如要進一步瞭解這個選項的運作方式,請參閱「排除交易層級記錄」。

GoogleSQL

如要建立可從指定寫入交易排除記錄的變更串流,請執行下列指令:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (allow_txn_exclusion = true)

更改下列內容:

  • CHANGE_STREAM_NAME:新變更串流的名稱

以下範例建立一個名為 NewChangeStream 的變更流,該變更流可以從指定的寫入交易中排除記錄:

CREATE CHANGE STREAM NewChangeStream FOR ALL
OPTIONS (allow_txn_exclusion = true)

PostgreSQL

若要建立可以從指定寫入交易中排除記錄的變更流,請執行下列命令:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (allow_txn_exclusion = true)

更改下列內容:

  • CHANGE_STREAM_NAME: 新變更流的名稱

以下範例建立一個名為 NewChangeStream 的變更流,該變更流可以從指定的寫入交易中排除記錄:

CREATE CHANGE STREAM NewChangeStream FOR ALL
WITH (allow_txn_exclusion = true)

若要啟用或停用現有變更流中的事務級記錄排除,請參閱修改事務級記錄排除。 如要查看這項選項的設定,請參閱以 DDL 形式查看變更串流定義

指定要從變更串流中排除的寫入交易

若要指定要從變更串流中排除的寫入交易,必須將 exclude_txn_from_change_streams 參數設為 true。以下程式碼範例展示如何使用用戶端程式庫指定要從變更串流中排除的寫入事務。

Go


import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/spanner"
)

// readWriteTxnExcludedFromChangeStreams executes the insert and update DMLs on
// Singers table excluded from tracking change streams with ddl option
// allow_txn_exclusion = true.
func readWriteTxnExcludedFromChangeStreams(w io.Writer, db string) error {
	// db = `projects/<project>/instances/<instance-id>/database/<database-id>`
	ctx := context.Background()
	client, err := spanner.NewClient(ctx, db)
	if err != nil {
		return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.NewClient: %w", err)
	}
	defer client.Close()

	_, err = client.ReadWriteTransactionWithOptions(ctx, func(ctx context.Context, txn *spanner.ReadWriteTransaction) error {
		stmt := spanner.Statement{
			SQL: `INSERT Singers (SingerId, FirstName, LastName)
					VALUES (111, 'Virginia', 'Watson')`,
		}
		_, err := txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprintln(w, "New singer inserted.")
		stmt = spanner.Statement{
			SQL: `UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111`,
		}
		_, err = txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprint(w, "Singer first name updated.")
		return nil
	}, spanner.TransactionOptions{ExcludeTxnFromChangeStreams: true})
	if err != nil {
		return err
	}
	return nil
}

Java

static void readWriteTxnExcludedFromChangeStreams(DatabaseClient client) {
  // Exclude the transaction from allowed tracking change streams with alloww_txn_exclusion=true.
  // This exclusion will be applied to all the individual operations inside this transaction.
  client
      .readWriteTransaction(Options.excludeTxnFromChangeStreams())
      .run(
          transaction -> {
            transaction.executeUpdate(
                Statement.of(
                    "INSERT Singers (SingerId, FirstName, LastName)\n"
                        + "VALUES (1341, 'Virginia', 'Watson')"));
            System.out.println("New singer inserted.");

            transaction.executeUpdate(
                Statement.of("UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111"));
            System.out.println("Singer first name updated.");

            return null;
          });
}

修改變更串流

如要修改變更串流的設定,請使用 ALTER CHANGE STREAM DDL 陳述式。它使用類似於 CREATE CHANGE STREAM 的語法。您可以變更串流監控的資料欄,或資料保留期限長度。您也可以完全暫停其監視功能,同時保留其資料變更記錄。

修改變更流的監視內容

這個範例會將整個 Songs 資料表新增至先前設定的 NamesAndAlbums 變更串流:

ALTER CHANGE STREAM NamesAndAlbums
SET FOR Singers(FirstName, LastName), Albums, Songs;

長時間執行的作業完成後,Spanner 會以新設定取代具名變更串流的行為。這項作業會更新資料庫結構定義中的變更串流定義。

修改變更串流的資料保留期限

若要修改變更流保留其內部記錄的時間長度,請在 ALTER CHANGE STREAM DDL 語句中設定 retention_period

這個範例會將資料保留期限調整為先前建立的變更串流:NamesAndAlbums

GoogleSQL

ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( retention_period = '36h' );

PostgreSQL

ALTER CHANGE STREAM NamesAndAlbums
SET ( retention_period = '36h' );

修改變更串流的值擷取類型

若要修改變更流的值擷取類型,請在 ALTER CHANGE STREAM DDL 語句中設定 value_capture_type 子句。

本範例會將值擷取類型調整為 NEW_VALUES

GoogleSQL

ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( value_capture_type = 'NEW_VALUES' );

PostgreSQL

ALTER CHANGE STREAM NamesAndAlbums
SET ( value_capture_type = 'NEW_VALUES' );

修改以存留時間為準的刪除篩選器

如要修改變更串流的 TTL 刪除作業篩選器,請在 ALTER CHANGE STREAM DDL 陳述式中設定 exclude_ttl_deletes 篩選器。您可以使用這個方式,在現有的變更串流中新增或移除篩選器。

有關這些過濾器如何工作的更多信息,請參閱 基於存留時間 (TTL) 的刪除過濾器

將基於 TTL 的刪除過濾器新增至現有變更流中

GoogleSQL

若要將基於 TTL 的刪除過濾器新增至現有變更流,請執行下列命令將過濾器設定為 true

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)

更改下列內容:

  • CHANGE_STREAM_NAME:現有變更串流的名稱

在下列範例中,exclude_ttl_deletes 篩選器會新增至名為 NewFilterChangeStream 的現有變更串流,排除所有以 TTL 為準的刪除作業:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)

這將從變更流中排除所有未來基於 TTL 的刪除操作。

PostgreSQL

如要將以 TTL 為準的刪除篩選器新增至現有變更串流,請執行下列指令,將篩選器設為 true

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = true)

更改下列內容:

  • CHANGE_STREAM_NAME:現有變更串流的名稱

在下列範例中,exclude_ttl_deletes 篩選器會新增至名為 NewFilterChangeStream 的現有變更串流,排除所有以 TTL 為準的刪除作業:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = true)

這會將所有日後以 TTL 為準的刪除作業從變更串流中排除。

從現有變更串流中移除以 TTL 為準的刪除篩選器

GoogleSQL

如要從現有變更串流中移除以 TTL 為準的刪除篩選器,請執行下列指令,將篩選器設為 false

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)

更改下列內容:

  • CHANGE_STREAM_NAME:新變更串流的名稱

在下列範例中,exclude_ttl_deletes 過濾器將從名為 NewFilterChangeStream 的現有變更流中移除:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)

包括日後所有以 TTL 為準的變更串流刪除作業。

您也可以將篩選器設為 null,移除以 TTL 為依據的刪除篩選器。

PostgreSQL

如要從現有變更串流中移除以 TTL 為準的刪除篩選器,請執行下列指令,將篩選器設為 false

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = false)

更改下列內容:

  • CHANGE_STREAM_NAME:新變更串流的名稱

在下列範例中,exclude_ttl_deletes 過濾器將從名為 NewFilterChangeStream 的現有變更流中移除:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = false)

包括日後所有以 TTL 為準的變更串流刪除作業。

您也可以將篩選器設為 null,移除以 TTL 為依據的刪除篩選器。

依表格修改類型修改篩選條件

若要修改變更流的資料表修改類型篩選器,請在 ALTER CHANGE STREAM DDL 語句中設定篩選器類型。您可以使用這項功能,在變更串流中新增或移除現有篩選器。

在現有變更串流中新增資料表修改類型篩選器

GoogleSQL

若要為現有變更流新增一個或多個新的表修改類型篩選器,請執行下列命令將篩選器設定為 true

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

更改下列內容:

  • CHANGE_STREAM_NAME:取代為現有變更串流的名稱
  • MOD_TYPE_FILTER_NAME: 替換為要新增的過濾器:exclude_insertexclude_updateexclude_delete。 如要一次新增多個篩選條件,請以半形逗號分隔。

在下列範例中,exclude_delete 篩選器會新增至名為 NewFilterChangeStream 的現有變更串流:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

若要為現有變更流新增一個或多個新的表修改類型篩選器,請執行下列命令將篩選器設定為 true

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

更改下列內容:

  • CHANGE_STREAM_NAME:取代為現有變更串流的名稱
  • MOD_TYPE_FILTER_NAME: 替換為要新增的過濾器:exclude_insertexclude_updateexclude_delete。 如要一次新增多個篩選條件,請以半形逗號分隔。

在下列範例中,exclude_delete 過濾器被加入到名為 NewFilterChangeStream 的現有變更流中:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

從現有變更流中移除表格修改類型篩選器

GoogleSQL

若要從變更流中刪除一個或多個現有的表修改類型篩選器,請執行下列命令將篩選器設定為 false

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

更改下列內容:

  • CHANGE_STREAM_NAME: 替換為您現有變更流的名稱
  • MOD_TYPE_FILTER_NAME: 替換為要刪除的過濾器:exclude_insertexclude_updateexclude_delete。 如果一次移除多個過濾器,請用逗號分隔每個過濾器。

在下列範例中,系統會從名為 NewFilterChangeStream 的現有變更串流中移除 exclude_delete 篩選器:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

您也可以將篩選器設回預設值,移除表格修改篩選器。為此,請將篩選值設為 null

PostgreSQL

若要從變更流中刪除一個或多個現有的表修改類型篩選器,請執行下列命令將篩選器設定為 false

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

更改下列內容:

  • CHANGE_STREAM_NAME: 替換為您現有變更流的名稱
  • MOD_TYPE_FILTER_NAME: 替換為要刪除的過濾器:exclude_insertexclude_updateexclude_delete。 如果一次移除多個過濾器,請用逗號分隔每個過濾器。

在下列範例中,系統會從名為 NewFilterChangeStream 的現有變更串流中移除 exclude_delete 篩選器:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

您也可以將篩選器設定回預設值來刪除表格修改篩選器。做法是將篩選器值設為 null

修改變更串流,允許排除交易層級記錄

您可以修改變更流,使其能夠從指定的寫入交易中排除記錄。如要這麼做,請在 ALTER CHANGE STREAM DDL 陳述式中,將 allow_txn_exclusion 選項設為 true。如未設定這個選項,或將其設為 false,變更串流就會監控所有寫入交易。

如要進一步瞭解這個方式的運作原理,請參閱「排除交易層級記錄」一文。

為現有變更流啟用事務級記錄排除

GoogleSQL

如要為現有變更串流啟用交易層級記錄排除功能,請執行下列指令:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = true)

更改下列內容:

  • CHANGE_STREAM_NAME: 您現有變更流的名稱

在下列範例中,現有變更串流 NewAllowedChangeStream 已啟用 allow_txn_exclusion 選項:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = true)

這可讓變更串流排除特定寫入交易的記錄。

PostgreSQL

如要為現有變更串流啟用交易層級記錄排除功能,請執行下列指令:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = true)

更改下列內容:

  • CHANGE_STREAM_NAME: 您現有變更流的名稱

在下列範例中,現有變更串流 NewAllowedChangeStream 已啟用 allow_txn_exclusion 選項:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = true)

這可讓變更串流排除特定寫入交易的記錄。

為現有變更串流停用交易層級記錄排除功能

GoogleSQL

如要停用現有變更串流的交易層級記錄排除功能,請執行下列指令:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = false)

更改下列內容:

  • CHANGE_STREAM_NAME: 您的變更流的名稱

在下列範例中,現有變更串流 (名為 NewAllowedChangeStream) 的 allow_txn_exclusion 選項已停用:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = false)

變更流監視所有寫入事務。

PostgreSQL

如要停用現有變更串流的交易層級記錄排除功能,請執行下列指令:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = false)

更改下列內容:

  • CHANGE_STREAM_NAME: 您的變更流的名稱

在下列範例中,現有變更串流 (名為 NewAllowedChangeStream) 的 allow_txn_exclusion 選項已停用:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = false)

變更流監視所有寫入事務。

暫停變更串流

如果您希望變更串流停止其活動但保留其內部記錄(至少在其資料保留期限內),您可以對其進行更改,使其不監視任何內容。

為此,發出 ALTER CHANGE STREAM DDL 語句,將變更流的定義替換為特殊片語 DROP FOR ALL。 例如:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

串流會繼續存在於資料庫中,但不會監看任何物件,也不會產生任何資料變更記錄。現有的變更記錄會維持不變,但須遵守串流的資料保留政策。

如要恢復已暫停的串流,請使用先前的設定發出另一項 ALTER CHANGE STREAM 陳述式。

刪除變更串流

如要永久刪除變更串流,請發出包含串流名稱的 DROP CHANGE STREAM 陳述式:

DROP CHANGE STREAM NamesAndAlbums;

Spanner 會立即停止串流、從資料庫的結構定義中移除串流,並刪除資料變更記錄。

列出並查看變更串流

您可以在 Google Cloud 控制台的網頁介面中,列出及查看資料庫的變更串流定義。您也可以將變更串流的結構視為其等效的 DDL 陳述式,或透過查詢資料庫的資訊結構定義來查看。

使用 Google Cloud 控制台查看變更串流

如要查看資料庫的變更串流清單並檢查定義,請按照下列步驟操作:

  1. 存取Google Cloud 控制台的 Spanner 實例頁面。

    開啟執行個體頁面

  2. 前往適當的執行個體和資料庫。

  3. 按一下導覽選單中的「變更串流」

畫面上會顯示該資料庫的所有變更串流清單,並列出每個串流的設定摘要。點擊流的名稱,即可查看有關其監視的表格和列的更多詳細資訊。

將變更串流的定義視為 DDL

將資料庫的結構定義視為 DDL 包括對其所有變更串流的描述,其中它們以 CREATE CHANGE STREAM 陳述式 的形式出現。

  • 若要從控制台執行此操作,請按一下 Google Cloud 控制台中資料庫頁面上的顯示等效 DDL連結。

  • 若要從指令列執行此操作,請使用 Google Cloud CLI 的 the ddl describe 指令

查詢有關變更串流的資訊結構定義

您可以直接查詢資料庫的 資訊模式,瞭解其變更串流。以下表格包含定義變更串流名稱、其監視的資料表和欄位以及其保留期限的元資料:

變更串流最佳實踐

以下是一些配置和管理變更流的最佳做法。

考慮使用單獨的元資料資料庫

變更串流會使用中繼資料資料庫來維護內部狀態。中繼資料庫可以與包含變更串流的資料庫相同,也可以不同。我們建議建立一個單獨的資料庫用於儲存元資料。

Spanner 變更串流連接器需要對元資料資料庫具有讀寫權限。您無需為該資料庫準備架構;連接器會自動處理。

使用單獨的元資料資料庫可以消除因允許連接器直接寫入應用程式資料庫而可能產生的複雜性:

  • 透過將元資料資料庫與生產資料庫和變更流分離,連接器只需要對生產資料庫具有讀取權限。

  • 透過將連接器的流量限制在單獨的元資料資料庫中,連接器本身執行的寫入操作不會包含在正式版群組變更串流中。這對於監視整個資料庫的變更串流尤其重要。

如果沒有使用單獨的資料庫來儲存元數據,我們建議監控變更流連接器對其執行個體的 CPU 影響。

為新的變更串流設定基準,並視需要調整大小

在正式環境執行個體中新增變更串流之前,請考慮在啟用變更串流的預先發布執行個體中,對實際工作負載進行基準化。這項資訊可協助您判斷是否需要為執行個體新增節點,以提高運算和儲存空間容量。

請執行這些測試,直到 CPU 和儲存空間指標穩定為止。理想情況下,執行個體的 CPU 使用率應低於建議最大值,且儲存空間用量不應超過執行個體的儲存空間上限。

使用不同區域進行負載平衡

多區域執行個體設定中使用變更串流時,請考慮在預設主要區域以外的區域執行處理管道。這有助於將串流負載分散到非主副本上。不過,如果需要優先考量盡可能降低串流延遲,而非負載平衡,請在主要區域中執行串流負載。

後續步驟