設定資料庫旗標

本頁說明如何設定 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
存取檢查快取 bucket 數量 integer
0 ... 65536
存取檢查快取配額 integer
0 ... 2147483647
親和性遮罩 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
每秒檢索頻寬 (上限) integer
0 ... 32767
ft 檢索頻寬 (分鐘) integer
0 ... 32767
ft notify 頻寬 (上限) integer
0 ... 32767
ft notify bandwidth (min) integer
0 ... 32767
填充係數 (%) integer
0 ... 100
index create memory (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
查詢控管工具費用上限 integer
0 ... 2147483647
查詢等待時間 (秒) integer
-1 ... 2147483647
恢復間隔 (分鐘) integer
0 ... 32767
遠端存取 boolean
on | off
remote login timeout (s) 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 節點數量和可用邏輯處理器數量而異。

您可以使用 sys.dm_os_sys_info 中的動態管理檢視 (DMV),檢查 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 執行個體的時區。

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

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

後續步驟