設定資料庫旗標

本頁說明如何為 Cloud SQL 設定資料庫旗標,並列出可為執行個體設定的旗標。您可以使用資料庫旗標執行許多作業,包括調整 SQL Server 參數、調整選項,以及設定和調整執行個體。

設定、移除或修改資料庫執行個體的標記時,資料庫可能會重新啟動。移除之前,系統都會保留執行個體的旗標值。如果執行個體是副本的來源,且執行個體已重新啟動,副本也會重新啟動,以配合執行個體的目前設定。

設定資料庫旗標

下列各節將說明常見的旗標管理工作。

設定資料庫旗標

控制台

  1. Google Cloud 控制台中,選取包含要設定資料庫旗標的 Cloud SQL 執行個體的專案。
  2. 開啟執行個體並按一下 [編輯]
  3. 前往「旗標」部分。
  4. 如要設定先前未在執行個體上設定的標記,請按一下「新增項目」,從下拉式選單選擇標記,然後設定其值。
  5. 按一下 [儲存] 以儲存變更。
  6. 在「總覽」頁面的「標記」下方,確認您所做的變更。

gcloud

編輯執行個體:

gcloud sql instances patch INSTANCE_NAME --database-flags=FLAG1=VALUE1,FLAG2=VALUE2

這項指令會覆寫先前設定的所有資料庫標記。如要保留這些標記並新增標記,請加入要在執行個體上設定的所有標記值;任何未明確加入的標記都會設為預設值。對於未設定值的旗標,請指定旗標名稱,然後加上等號「=」。

舉例來說,如要設定 1204remote accessremote query timeout (s) 標記,可以使用下列指令:

gcloud sql instances patch INSTANCE_NAME \
  --database-flags="1204"=on,"remote access"=on,"remote query timeout (s)"=300

Terraform

如要新增資料庫旗標,請使用 Terraform 資源

resource "google_sql_database_instance" "instance" {
  name             = "sqlserver-instance-flags"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    database_flags {
      name  = "1204"
      value = "on"
    }
    database_flags {
      name  = "remote access"
      value = "on"
    }
    database_flags {
      name  = "remote query timeout (s)"
      value = "300"
    }
    tier = "db-custom-2-7680"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

套用變更

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案 。

    每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在學習教學課程,可以複製每個章節或步驟中的程式碼範例。

    將程式碼範例複製到新建立的 main.tf 中。

    視需要從 GitHub 複製程式碼。如果 Terraform 片段是端對端解決方案的一部分,建議您使用這個方法。

  3. 查看並修改範例參數,套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 查看設定,確認 Terraform 即將建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,套用更新的 Terraform 設定:
    terraform apply
  1. 執行下列指令,並在提示中輸入 yes,即可移除先前透過 Terraform 設定套用的資源:

    terraform destroy

REST v1

如要為現有資料庫設定旗標,請按照下列步驟操作:

使用任何要求資料之前,請先修改下列項目的值:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

JSON 要求主體:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

如果資料庫目前已設有標記,請修改前一指令以併入這些標記。PATCH 指令會以要求中指定的值覆寫現有的標記。

REST v1beta4

如要為現有資料庫設定旗標,請按照下列步驟操作:

使用任何要求資料之前,請先修改下列項目的值:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

JSON 要求主體:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

如果資料庫目前已設有標記,請修改前一指令以併入這些標記。PATCH 指令會以要求中指定的值覆寫現有的標記。

將所有旗標清除為預設值

控制台

  1. Google Cloud 控制台中,選取含有要清除所有標記的 Cloud SQL 執行個體的專案。
  2. 開啟執行個體並按一下 [編輯]
  3. 開啟「資料庫標記」區段。
  4. 按一下畫面上所有顯示標記旁的 [X]
  5. 按一下 [儲存] 以儲存變更。

gcloud

清除執行個體中所有標記並轉為預設值:

gcloud sql instances patch INSTANCE_NAME \
--clear-database-flags

系統會提示您將重新啟動執行個體。

REST v1

清除現有執行個體的所有標記:

使用任何要求資料之前,請先修改下列項目的值:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

JSON 要求主體:

{
  "settings":
  {
    "databaseFlags": []
  }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

REST v1beta4

清除現有執行個體的所有標記:

使用任何要求資料之前,請先修改下列項目的值:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

JSON 要求主體:

{
  "settings":
  {
    "databaseFlags": []
  }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

判斷執行個體已設定哪些資料庫旗標

如要查看 Cloud SQL 執行個體已設定的旗標:

控制台

  1. Google Cloud 控制台中,選取含有 Cloud SQL 執行個體的專案,查看已設定的資料庫標記。
  2. 選取執行個體,開啟「Instance Overview」(執行個體總覽) 頁面。

    在「資料庫標記」區段下方會列出已設定的資料庫標記。

gcloud

取得執行個體狀態:

gcloud sql instances describe INSTANCE_NAME

在輸出中,資料庫標記會列示為 settings 底下的 databaseFlags 集合。如要進一步瞭解輸出內容中的旗標表示法,請參閱「執行個體資源表示法」。

REST v1

列出已針對執行個體設定的標記:

使用任何要求資料之前,請先修改下列項目的值:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

在輸出中,找出 databaseFlags 欄位。

REST v1beta4

列出已針對執行個體設定的標記:

使用任何要求資料之前,請先修改下列項目的值:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

在輸出中,找出 databaseFlags 欄位。

支援的標記

Cloud SQL 僅支援本節列出的旗標。

Cloud SQL 標記 類型
可接受的值與附註
需要重新啟動
嗎?
1204 (追蹤標記) boolean
on | off
1222 (追蹤標記) boolean
on | off
1224 (追蹤標記) boolean
on | off
2528 (追蹤標記) boolean
on | off
3205 (追蹤標記) boolean
on | off
3226 (追蹤旗標) boolean
on | off
3625 (追蹤記錄旗標) boolean
on | off
4199 (追蹤旗標) boolean
on | off
4616 (追蹤旗標) boolean
on | off
7806 (追蹤標記) boolean
on | off
13702 (追蹤標記) boolean
on | off
存取檢查快取 bucket 數量 integer
0 ... 65536
存取檢查快取配額 integer
0 ... 2147483647
親和性遮罩 integer
2147483648 ... 2147483647
親和性 I/O 遮罩 integer
2147483648 ... 2147483647
agent xps boolean
on | off
automatic soft-numa disabled boolean
on | off
cloud sql xe bucket name string
bucket 名稱開頭必須為 gs:// 前置字元。
cloud sql xe output total disk size (mb) integer
10 ... 512
cloud sql xe file retention (mins) integer
0 ... 10080
cloud sql xe upload interval (mins) integer
1 ... 60
cloudsql enable linked servers boolean
on | off
平行處理費用門檻 integer
0 ... 32767
contained database authentication boolean
on | off
cross db ownership chaining boolean
on | off
游標門檻 integer
-1 ... 2147483647
預設全文語言 integer
0 ... 2147483647
預設語言 integer
0 ... 32
已啟用預設追蹤 boolean
on | off
不允許觸發條件傳回結果 boolean
on | off
external scripts enabled boolean
on | off
ft 檢索頻寬 (上限) integer
0 ... 32767
每分鐘的檢索頻寬 (英尺) integer
0 ... 32767
ft 通知頻寬 (上限) integer
0 ... 32767
ft notify bandwidth (min) integer
0 ... 32767
填充係數 (%) integer
0 ... 100
索引建立記憶體 (KB) integer
704 ... 2147483647
智慧門鎖 integer
5000 ... 2147483647
平行處理工作數量上限 (MAXDOP) integer
0 ... 32767
伺服器記憶體上限 (MB) integer
1000 ... 2147483647
Cloud SQL 可能會根據 Microsoft 的建議值,為執行個體設定這個旗標的值。詳情請參閱「特殊旗標」。
max text repl size (b) integer
-1 ... 2147483647
max worker threads integer
128 ... 65535
巢狀觸發條件 boolean
on | off
針對臨時工作負載進行最佳化 boolean
on | off
ph timeout (s) integer
1 ... 3600
cloud sql enable polybase boolean
on | off
cloud sql enable sp_help_revlogin boolean
on | off
查詢控管工具費用限制 integer
0 ... 2147483647
查詢等待時間 (秒) integer
-1 ... 2147483647
恢復間隔 (分鐘) integer
0 ... 32767
遠端存取 boolean
on | off
遠端登入逾時 (秒) integer
0 ... 2147483647
遠端查詢逾時 (秒) integer
0 ... 2147483647
轉換噪音字詞 boolean
on | off
兩位數年份的截斷值 integer
1753 ... 9999
使用者連線 integer
010 ... 32767
使用者選項 integer
0 ... 32767

特殊旗標

本節提供 SQL Server 適用的 Cloud SQL 旗標相關資訊。

max degree of parallelism (MAXDOP)

Max degree of parallelism (MAXDOP) 是 Microsoft 資料庫旗標,可在 SQL Server 適用的 Cloud SQL 中使用。這個標記可讓您限制在平行計畫中執行單一查詢時使用的執行緒數量上限。

如果保留預設值 0,資料庫執行個體就會使用所有可用的處理器。不過,如果管理數百個資料庫的執行個體,這種做法可能不一定有效率,甚至不切實際。

設定旗標值時,建議您遵循 Microsoft 文件建議,因為這類值會因 NUMA 節點數量和可用邏輯處理器數量而異。

您可以使用 dynamic management view (DMV) sys.dm_os_sys_info,檢查 NUMA 節點設定。如要檢查 NUMA 節點設定,請使用類似下列程式碼片段的程式碼:

      SELECT socket_count,cores_per_socket,numa_node_count 
FROM sys.dm_os_sys_info

您可以使用 MAXDOP 限制平行計畫執行作業可用的處理器數量上限,也可以使用平行處理成本門檻功能,指出單一處理器要擴展平行作業至另一個處理器之前,您要設定的最低成本。這些功能可協助您更有效地控管平行計畫執行的效率和成本。

這些功能的建議值因情況而異,且會受到伺服器和應用程式工作負載需求的影響。

如要判斷伺服器最佳的 MAXDOP 和並行費用門檻值,請參閱下列資源:

變更預設值有助於解決下列潛在問題:

  • 如果 max degree of parallelism (MAXDOP) 旗標設為 0,則需要 SharePoint 下載作業的執行個體或用戶端應用程式會失敗。SharePoint 下載作業會執行預先檢查,要求旗標使用數值,且不接受小於 1 的值。
  • 將 MAXDOP 旗標保留為預設值 0,表示沒有限制,所有可用的處理器都可以用於平行作業。如果伺服器經常執行小型查詢,這個值可能沒問題,但如果也需要定期執行大型查詢,就可能會產生費用問題。

您可以使用 max degree of parallelism (MAXDOP) 標記,在三個層級控制執行緒數量:

  • 執行個體層級,使用資料庫標記
  • 資料庫範圍 (使用 TSQL)
  • 查詢層級,使用查詢提示

請注意,如果執行個體大小調整,旗標值不會變更。

max server memory (mb)

max server memory (mb) 標記會限制 Cloud SQL 可分配給內部集區的記憶體量。

建議您不要為這個旗標設定值,讓 Cloud SQL 管理值。如果必須手動管理這個值,一般建議將 max server memory (mb) 值設為可用記憶體的 80% 左右,以防 SQL Server 耗用所有記憶體。

反之,對於記憶體容量大的執行個體,可用記憶體的 80% 可能過低,導致記憶體使用量浪費。

如果未設定這個旗標的值,Cloud SQL 會根據執行個體的 RAM 大小自動管理值。此外,如果您調整執行個體大小,Cloud SQL 會自動調整旗標值,以符合新執行個體大小的建議。這項調整大小作業也會移除此旗標的所有手動設定值。這有助於資料庫更有效率地運用資源,避免過度分配資源、減少因記憶體不足而當機的可能性,並避免執行個體效能下降。

詳情請參閱「伺服器記憶體上限」和「最佳化高記憶體用量」。

cloud sql enable sp_help_revlogin

cloud sql enable sp_help_revlogin 旗標可啟用或停用 msdb 資料庫中的 sp_help_revlogin 預存程序。

如果將這個旗標設為 on,Cloud SQL 會在 msdb 資料庫中安裝預存程序,並將執行權授予 sqlserver 管理員使用者。您可以匯出 SQL Server 登入資訊、密碼雜湊和 SID,協助在執行個體之間遷移及同步處理登入資訊。

如果將這個旗標設為 off,Cloud SQL 會從 msdb 資料庫移除預存程序。

詳情請參閱匯出 SQL Server 登入資訊

疑難排解

問題 疑難排解
您想修改 Cloud SQL 執行個體的時區。

如要瞭解如何更新執行個體的時區,請參閱「執行個體設定」。

在 SQL Server 適用的 Cloud SQL 中,您可以使用 AT TIME ZONE 函式進行時間轉換等作業。如要進一步瞭解這項函式,請參閱「 AT TIME ZONE (Transact-SQL)」。

後續步驟