建立及管理變更串流

本頁說明如何建立、修改及查看 Google SQL 方言資料庫和 PostgreSQL 方言資料庫的 Spanner 變更串流。如要進一步瞭解變更串流,請參閱「關於變更串流」。

由於變更串流是結構定義物件,因此您可以透過相同的 DDL 驅動結構定義更新建立及管理變更串流,這些更新可用於任何其他類型的資料庫定義工作,例如建立資料表或新增索引。

提交用於變更結構定義的 DDL 陳述式 (包括用於建立、變更或刪除變更串流的陳述式) 後,Spanner 就會開始執行長時間運作作業。這項長時間執行作業完成後,新變更串流或變更的串流就會開始監控新設定指定的資料欄或資料表。

建立變更串流

如要建立變更串流,您必須提供名稱和要監控的結構定義物件:整個資料庫,或是特定表格和欄的清單。您可以選擇使用下列任一項目設定變更串流:

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

您無法在此處指定主鍵資料欄,因為每個變更串流都會一律追蹤所監控的每個資料表的主鍵。這樣一來,每個資料變更記錄都能透過主鍵識別變更的資料列。

在單一串流中觀看表格和欄

您可以在單一變更資料流中結合前兩個範例中的表格監控和資料欄監控語法:

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

指定較長的保留期限

如要指定比預設值一天的變更資料流資料保留期限,請將 retention_period 設為最長 30 天的期限,以小時 (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' );

篩選以存留時間為依據的刪除作業

您可以使用 exclude_ttl_deletes 篩選器,從變更串流的範圍中篩除以 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 為依據的刪除篩選器

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

如要進一步瞭解這些篩選器的運作方式,請參閱「以存留期限為依據的刪除篩選器」。

在現有變更資料流中新增以 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。如果一次要移除多個篩選條件,請以半形逗號分隔。

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

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。如果一次要移除多個篩選條件,請以半形逗號分隔。

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

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:現有變更串流的名稱

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

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:現有變更串流的名稱

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

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 執行個體頁面。

    開啟「Instances」(執行個體) 頁面

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

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

這會顯示該資料庫的所有變更串流清單,並摘要列出每個串流的設定。按一下資料流名稱,即可進一步瞭解該資料流監控的資料表和欄。

以 DDL 格式查看變更串流定義

以 DDL 形式查看資料庫的結構定義,其中包含所有變更串流的說明,並以 CREATE CHANGE STREAM 陳述式顯示。

  • 如要在控制台中執行這項操作,請在 Google Cloud 控制台的資料庫頁面中,按一下「Show equivalent DDL」連結。

  • 如要透過指令列執行這項操作,請使用 Google Cloud CLI 的 ddl describe 指令

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

您可以直接查詢資料庫的資訊結構定義,瞭解其變更串流。以下表格包含定義變更資料流名稱、監控的資料表和資料欄,以及保留期間的中繼資料:

變更串流最佳做法

以下是設定及管理變更串流的最佳做法。

考慮使用獨立的中繼資料資料庫

變更串流會使用中繼資料資料庫來維護內部狀態。中繼資料資料庫可以與包含變更串流的資料庫相同,也可以不同。建議您建立專用資料庫來儲存中繼資料。

Spanner 變更串流連接器需要中繼資料資料庫的讀寫權限。您不需要使用結構定義準備這個資料庫,連接器會負責處理這項作業。

使用獨立的中繼資料資料庫,可避免讓連接器直接寫入應用程式資料庫時,可能產生的複雜性:

  • 透過使用變更串流將中繼資料資料庫與正式版資料庫分開,連接器只需要正式版資料庫的讀取權限。

  • 將連接器的流量限制在個別中繼資料資料庫中,這樣就不會將連接器本身執行的寫入作業納入實際變更串流中。這對於監控整個資料庫的變更串流特別重要。

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

基準測試新的變更串流,並視需要調整大小

在正式環境執行個體中新增變更串流之前,建議您先在啟用變更串流的測試環境執行個體中,基準測試實際工作負載。這可讓您判斷是否需要為執行個體新增節點,以便提高其運算和儲存空間容量。

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

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

多區域執行個體設定中使用變更資料流時,請考慮在與預設主要區域不同的區域中執行處理管道。這有助於在非領導者副本之間分散串流負載。不過,如果您需要將串流延遲時間降到最低,而非負載平衡,請在領導區域中執行串流負載。

後續步驟