建立及管理變更串流

本頁面說明如何建立、修改及查看 GoogleSQL 方言資料庫和 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:新變更串流的名稱

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

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

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

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 控制台的資料庫頁面中,按一下「Show equivalent DDL」(顯示對等 DDL) 連結。

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

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

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

變更串流最佳做法

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

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

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

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

使用獨立的中繼資料庫可避免複雜情況,因為允許連接器直接寫入應用程式資料庫可能會導致複雜情況:

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

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

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

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

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

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

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

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

後續步驟