共用方式為


適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中的伺服器參數

本文提供在 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中設定伺服器參數的考慮和指導方針。

注意

本文包含從屬一詞的參考,Microsoft不再使用。 從軟體中移除該字詞時,我們也會將其從本文中移除。

什麼是伺服器參數?

MySQL 引擎提供許多 伺服器參數 (也稱為 變數),可用來設定和微調引擎行為。 某些參數可以在運行時間期間動態設定。 其他則是靜態的,而且在您設定伺服器之後需要重新啟動伺服器。

在 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中,您可以使用 適用於 MySQL 的 Azure 資料庫 中的設定伺服器參數來變更各種 MySQL 伺服器參數的值 - 彈性伺服器,方法是使用 Azure 入口網站在 中設定伺服器參數適用於 MySQL 的 Azure 資料庫 - 使用 Azure CLI 彈性伺服器來符合工作負載的需求。

可設定的伺服器參數

您可以使用伺服器參數來管理 適用於 MySQL 的 Azure 資料庫 彈性伺服器的組態。 當您建立伺服器時,伺服器參數會設定為預設值和建議的值。 Azure 入口網站 中的 [伺服器參數] 窗格會顯示可修改和不可修改的參數。 無法使用不可修改的伺服器參數。

支援的伺服器參數清單會不斷成長。 您可以使用 Azure 入口網站 定期檢視伺服器參數的完整清單並設定值。

如果您使用入口網站修改靜態伺服器參數,您必須重新啟動伺服器,變更才會生效。 如果您使用自動化腳本(透過 Azure Resource Manager 範本、Terraform 或 Azure CLI 之類的工具),您的腳本應該有布建來重新啟動服務,讓設定生效,即使您在建立體驗中變更設定。

如果您想要修改您環境的不可修改伺服器參數,請 透過社群意見反應張貼想法,或投票是否已經存在意見反應(這可協助我們排定優先順序)。

下列各節說明常用更新的伺服器參數限制。 伺服器的計算層和大小 (虛擬核心) 會決定限制。

lower_case_table_names

針對 MySQL 5.7 版,的預設值lower_case_table_names1 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器。 雖然可以支援的值變更為 2,但不允許從 2 還原回 1 。 如需變更預設值的協助, 請建立支援票證

針對 MySQL 8.0 版以上 ,您 lower_case_table_names 只能在初始化伺服器時進行設定。 深入了解。 禁止在初始化伺服器之後變更 lower_case_table_names 設定。

MySQL 8.0 1 版的支援值為 適用於 MySQL 的 Azure 資料庫 2 - 彈性伺服器。 預設值是 1。 如需在建立伺服器期間變更預設值的協助, 請建立支援票證

innodb_tmpdir

您可以使用 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中的 innodb_tmpdir 參數,為在重建的在線ALTER TABLE作業期間建立的暫存排序檔案定義目錄。

innodb_tmpdir 的預設值為 /mnt/temp。 此位置對應至 暫存記憶體 (SSD), 且每個伺服器計算大小都以 GIB 為單位提供。 此位置非常適合不需要大量空間的作業。

如果您需要更多空間,您可以將 設定 innodb_tmpdir/app/work/tmpdir。 此設定會利用您 適用於 MySQL 的 Azure 資料庫 彈性伺服器上的可用儲存容量。 此設定對於需要更多暫存記憶體的較大型作業很有用。

請記住,相較於預設暫存記憶體 (SSD) /mnt/temp 值,使用/app/work/tmpdir會導致效能變慢。 根據作業的特定需求做出選擇。

提供的資訊 innodb_tmpdir 適用於下列位置的參數 innodb_temp_tablespaces_dirtmpdirslave_load_tmpdir

  • 預設值 /mnt/temp 很常見。
  • 替代目錄 /app/work/tmpdir 可用來設定增加的暫存記憶體,並根據特定作業需求來取捨效能。

log_bin_trust_function_creators

在 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中,一律會啟用二進位記錄(也就是 log_bin 設定為 ON)。 log_bin_trust_function_creators參數預設會在彈性伺服器中設定為 ON

二進位記錄格式一律 ROW為 ,而且伺服器的連接一律使用數據列型二進位記錄。 使用資料列型二進位記錄時,安全性問題不存在,而且二進位記錄無法中斷,因此您可以安全地允許 log_bin_trust_function_creators 保持為 ON

如果 log_bin_trust_function_creators 設定為 OFF ,而且您嘗試建立觸發程式,您可能會收到類似如下的錯誤:「您沒有 SUPER 許可權,而且已啟用二進位記錄(您可能想要使用較不安全 log_bin_trust_function_creators 的變數)。

innodb_buffer_pool_size

若要了解 innodb_buffer_pool_size 參數,請檢閱 MySQL 檔

下表中的物理記憶體大小代表您 適用於 MySQL 的 Azure 資料庫 彈性伺服器上的可用隨機存取記憶體 (RAM),以 GB 為單位。

計算大小 虛擬核心 實體記憶體大小 (GB) 預設值 (位元組) 最小值 (位元組) 最大值 (位元組)
可高載
Standard_B1s 1 1 134217728 33554432 268435456
Standard_B1ms 1 2 536870912 134217728 1073741824
Standard_B2s 2 4 2147483648 134217728 2147483648
Standard_B2ms 2 8 4294967296 134217728 5368709120
Standard_B4ms 4 16 12884901888 134217728 12884901888
Standard_B8ms 8 32 25769803776 134217728 25769803776
Standard_B12ms 12 48 51539607552 134217728 32212254720
Standard_B16ms 16 64 2147483648 134217728 51539607552
Standard_B20ms 20 80 64424509440 134217728 64424509440
一般用途
Standard_D2ads_v5 2 8 4294967296 134217728 5368709120
Standard_D2ds_v4 2 8 4294967296 134217728 5368709120
Standard_D4ads_v5 4 16 12884901888 134217728 12884901888
標準 D4ds_v4 4 16 12884901888 134217728 12884901888
Standard_D8ads_v5 8 32 25769803776 134217728 25769803776
標準 D8ds_v4 8 32 25769803776 134217728 25769803776
Standard_D16ads_v5 16 64 51539607552 134217728 51539607552
Standard_D16ds_v4 16 64 51539607552 134217728 51539607552
Standard_D32ads_v5 32 128 103079215104 134217728 103079215104
Standard_D32ds_v4 32 128 103079215104 134217728 103079215104
Standard_D48ads_v5 48 192 154618822656 134217728 154618822656
標準 D48ds_v4 48 192 154618822656 134217728 154618822656
Standard_D64ads_v5 64 256 206158430208 134217728 206158430208
Standard_D64ds_v4 64 256 206158430208 134217728 206158430208
業務關鍵
標準 E2ds_v4 2 16 12884901888 134217728 12884901888
Standard_E2ads_v5,Standard_E2ds_v5 2 16 12884901888 134217728 12884901888
Standard_E4ds_v4 4 32 25769803776 134217728 25769803776
Standard_E4ads_v5,Standard_E4ds_v5 4 32 25769803776 134217728 25769803776
Standard_E8ds_v4 8 64 51539607552 134217728 51539607552
Standard_E8ads_v5,Standard_E8ds_v5 8 64 51539607552 134217728 51539607552
Standard_E16ds_v4 16 128 103079215104 134217728 103079215104
Standard_E16ads_v5,Standard_E16ds_v5 16 128 103079215104 134217728 103079215104
標準 E20ds_v4 20 160 128849018880 134217728 128849018880
Standard_E20ads_v5,Standard_E20ds_v5 20 160 128849018880 134217728 128849018880
Standard_E32ds_v4 32 256 206158430208 134217728 206158430208
Standard_E32ads_v5,Standard_E32ds_v5 32 256 206158430208 134217728 206158430208
標準 E48ds_v4 48 384 309237645312 134217728 309237645312
Standard_E48ads_v5,Standard_E48ds_v5 48 384 309237645312 134217728 309237645312
Standard_E64ds_v4 64 504 405874409472 134217728 405874409472
Standard_E64ads_v5 、Standard_E64ds_v5 64 512 412316860416 134217728 412316860416
Standard_E80ids_v4 80 504 405874409472 134217728 405874409472
Standard_E96ds_v5 96 672 541165879296 134217728 541165879296

innodb_file_per_table

MySQL 會根據您在建立資料表期間所提供的設定,將 InnoDB 資料表儲存在不同的數據表空間中。 系統資料表空間是 InnoDB 資料字典的儲存區域。 每個 數據表的檔案數據表空間 包含單一 InnoDB 資料表的數據和索引,並且儲存在檔案系統中自己的數據檔中。 innodb_file_per_table伺服器參數會控制此行為。

innodb_file_per_table 設定為 OFF 會導致 InnoDB 在系統資料表空間中建立資料表。 否則,InnoDB 會在 file-per-table 資料表空間中建立資料表。

適用於 MySQL 的 Azure 資料庫 - 彈性伺服器在單一數據檔中最多支援 8 TB(TB)。 如果您的資料庫大小大於 8 TB,您應該在資料表空間中 innodb_file_per_table 建立資料表。 如果您有大於 8 TB 的單一資料表大小,您應該使用分割區數據表。

innodb_log_file_size

innodb_log_file_size的值是記錄群組每個記錄檔的大小(以位元組為單位)。 記錄檔 (innodb_log_file_size innodb_log_files_in_group * ) 的組合大小不能超過略小於 512 GB 的最大值。

較大的記錄檔大小較適合效能,但缺點是當機后的復原時間很高。 您需要平衡復原時間,以取得當機的罕見事件,而不是在尖峰作業期間將輸送量最大化。 較大的記錄檔大小也會導致重新啟動時間較長。

您可以針對 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器,將 設定innodb_log_size為 256 MB(MB)、512 MB、1 GB 或 2 GB。 參數是靜態的,且需要重新啟動。

注意

如果您已從預設值變更 innodb_log_file_size 參數,請檢查的值 show global status like 'innodb_buffer_pool_pages_dirty' 是否維持在 0 30 秒,以避免重新啟動延遲。

max_connections

伺服器的記憶體大小決定的值 max_connections下表中的物理記憶體大小代表您 適用於 MySQL 的 Azure 資料庫 彈性伺服器上的可用 RAM,以 GB 為單位。

計算大小 虛擬核心 實體記憶體大小 (GB) 預設值 最小值 最大值
可高載
Standard_B1s 1 1 85 10 171
Standard_B1ms 1 2 171 10 341
Standard_B2s 2 4 341 10 683
Standard_B2ms 2 4 683 10 1365
Standard_B4ms 4 16 1365 10 2731
Standard_B8ms 8 32 2731 10 5461
Standard_B12ms 12 48 4097 10 8193
Standard_B16ms 16 64 5461 10 10923
Standard_B20ms 20 80 6827 10 13653
一般用途
Standard_D2ads_v5 2 8 683 10 1365
Standard_D2ds_v4 2 8 683 10 1365
Standard_D4ads_v5 4 16 1365 10 2731
標準 D4ds_v4 4 16 1365 10 2731
Standard_D8ads_v5 8 32 2731 10 5461
標準 D8ds_v4 8 32 2731 10 5461
Standard_D16ads_v5 16 64 5461 10 10923
Standard_D16ds_v4 16 64 5461 10 10923
Standard_D32ads_v5 32 128 10923 10 21845
Standard_D32ds_v4 32 128 10923 10 21845
Standard_D48ads_v5 48 192 16384 10 32768
標準 D48ds_v4 48 192 16384 10 32768
Standard_D64ads_v5 64 256 21845 10 43691
Standard_D64ds_v4 64 256 21845 10 43691
業務關鍵
標準 E2ds_v4 2 16 1365 10 2731
Standard_E2ads_v5,Standard_E2ds_v5 2 16 1365 10 2731
Standard_E4ds_v4 4 32 2731 10 5461
Standard_E4ads_v5,Standard_E4ds_v5 4 32 2731 10 5461
Standard_E8ds_v4 8 64 5461 10 10923
Standard_E8ads_v5,Standard_E8ds_v5 8 64 5461 10 10923
Standard_E16ds_v4 16 128 10923 10 21845
Standard_E16ads_v5,Standard_E16ds_v5 16 128 10923 10 21845
標準 E20ds_v4 20 160 13653 10 27306
Standard_E20ads_v5,Standard_E20ds_v5 20 160 13653 10 27306
Standard_E32ds_v4 32 256 21845 10 43691
Standard_E32ads_v5,Standard_E32ds_v5 32 256 21845 10 43691
標準 E48ds_v4 48 384 32768 10 65536
Standard_E48ads_v5,Standard_E48ds_v5 48 384 32768 10 65536
Standard_E64ds_v4 64 504 43008 10 86016
Standard_E64ads_v5、Standard_E64ds_v5 64 512 43691 10 87383
Standard_E80ids_v4 80 504 43008 10 86016
Standard_E96ds_v5 96 672 50000 10 100000

當連線超過限制時,您可能會收到下列錯誤:「錯誤 1040 (08004):太多連線。」

建立與 MySQL 的新用戶端連線需要時間。 建立這些連線之後,它們會佔用資料庫資源,即使它們閑置也一樣。 大部分應用程式會要求許多短期連線,這會加重這種情況。 結果是實際工作負載可用的資源較少,導致效能降低。

減少閑置連線並重複使用現有連線的連接共享器可協助您避免此問題。 為了獲得最佳體驗,我們建議您使用 ProxySQL 之類的連線共用器,有效率地管理連線。 若要瞭解如何設定 ProxySQL,請參閱 此部落格文章

注意

ProxySQL 是開放原始碼社群工具。 Microsoft盡最大努力支援它。 若要取得具有權威指引的生產支援,請連絡 ProxySQL 產品支援

innodb_strict_mode

如果您收到類似「數據列大小太大(> 8126)」的錯誤,您可能會想要關閉 innodb_strict_mode 伺服器參數。 此參數無法在伺服器層級全域修改,因為如果數據列數據大小大於8K,則會截斷數據,而不會發生錯誤。 此截斷可能會導致潛在的數據遺失。 建議您修改結構描述以符合頁面大小限制。

您可以使用 在工作階段層級 init_connect設定此參數。 如需詳細資訊,請參閱 設定非可修改的伺服器參數

注意

如果您有讀取複本伺服器,在來源伺服器上的會話層級設定 innodb_strict_modeOFF 會中斷複寫。 如果您有讀取複本,建議您將參數保持設定為 ON

time_zone

初始部署時,適用於 MySQL 的 Azure 資料庫 - 彈性伺服器實例包含時區資訊的系統數據表,但不會填入這些數據表。 您可以從 MySQL 命令行或 MySQL Workbench 等工具呼叫 mysql.az_load_timezone 預存程式,以填入時區數據表。 您也可以使用 Azure 入口網站 或 Azure CLI 來呼叫預存程式,並設定全域或會話層級時區。

binlog_expire_logs_seconds

在 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中,binlog_expire_logs_seconds參數會指定服務在刪除二進位記錄檔之前等候的秒數。

二進位記錄檔包含描述資料庫變更的事件,例如資料表建立作業或對資料表資料的變更。 二進位記錄檔也包含語句的事件,這些語句可能已進行變更。 二進位記錄主要用於兩個用途:復寫和數據復原作業。

一般而言,只要句柄從服務、備份或副本集免費,就會刪除二進位記錄檔。 如果有多個復本,二進位記錄會等候最慢的複本讀取變更,再刪除變更。

如果您想要保存較長持續時間的二進位記錄,您可以設定 binlog_expire_logs_seconds 參數。 如果 binlog_expire_logs_seconds 設定為的預設值 0,則會在釋放二進位記錄檔的句柄后立即刪除。 如果的值 binlog_expire_logs_seconds 大於 0,則會在設定的秒數之後刪除二進位記錄檔。

適用於 MySQL 的 Azure 資料庫 - 彈性伺服器會在內部處理受控功能,例如備份和讀取二進位檔刪除。 當您從 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器複寫資料輸出時,此參數必須在主要複本中設定,以避免在複本從主要複本的變更讀取之前刪除二進位記錄。 如果您設定 binlog_expire_logs_seconds 為較高的值,則不會很快刪除二進位記錄檔。 這種延遲可能會導致記憶體計費增加。

event_scheduler

在 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中,event_scheduler伺服器參數會管理建立、排程和執行事件。 也就是說,參數會管理由特殊 MySQL 事件排程器線程根據排程執行的工作。 event_scheduler當 參數設定為 ON時,事件排程器線程會列為 輸出SHOW PROCESSLIST中的精靈進程。

針對 MySQL 5.7 版伺服器,當備份起始時,伺服器參數event_scheduler會自動關閉 『OFF』,而且備份成功完成之後伺服器參數event_scheduler會回復 『ON』。 在適用於 適用於 MySQL 的 Azure 資料庫 的 MySQL 8.0 版 - 彈性伺服器中,備份期間event_scheduler不會受到影響。 為了確保作業更順暢,建議您使用 主要版本升級,將 MySQL 5.7 伺服器升級至 8.0 版。

您可以使用下列 SQL 語法來建立和排程事件:

CREATE EVENT <event name>
ON SCHEDULE EVERY _ MINUTE / HOUR / DAY
STARTS TIMESTAMP / CURRENT_TIMESTAMP
ENDS TIMESTAMP / CURRENT_TIMESTAMP + INTERVAL 1 MINUTE / HOUR / DAY
COMMENT '<comment>'
DO
<your statement>;

如需建立事件的詳細資訊,請參閱 MySQL 參考手冊中的事件排程器下列檔:

設定event_scheduler伺服器參數

下列案例說明在 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中使用 event_scheduler 參數的一種方式。

若要示範案例,請考慮下列簡單數據表範例:

mysql> describe tab1;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
| +-----------+-------------+------+-----+---------+----------------+ |
| id | int(11) | NO | PRI | NULL | auto_increment |
| CreatedAt | timestamp | YES | | NULL | |
| CreatedBy | varchar(16) | YES | | NULL | |
| +-----------+-------------+------+-----+---------+----------------+ |
| 3 rows in set (0.23 sec) |
| ``` |
| To configure the `event_scheduler` server parameter in Azure Database for MySQL - Flexible Server, perform the following steps: |

1. In the Azure portal, go to your Azure Database for MySQL - Flexible Server instance. Under **Settings**, select **Server parameters**.
1. On the **Server parameters** pane, search for `event_scheduler`. In the **VALUE** dropdown list, select **ON**, and then select **Save**.

    > [!NOTE]
    > Deployment of the dynamic configuration change to the server parameter doesn't require a restart.

1. To create an event, connect to the Azure Database for MySQL - Flexible Server instance and run the following SQL command:
    ```sql

    CREATE EVENT test_event_01
    ON SCHEDULE EVERY 1 MINUTE
    STARTS CURRENT_TIMESTAMP
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    COMMENT 'Inserting record into the table tab1 with current timestamp'
    DO
    INSERT INTO tab1(id,createdAt,createdBy)
    VALUES('',NOW(),CURRENT_USER());

    ```
1. To view the Event Scheduler details, run the following SQL statement:
    ```sql

    SHOW EVENTS;

    ```
    The following output appears:
    ```sql

    mysql> show events;
    +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+
    | Db | Name | Definer | Time zone | Type | Execute at | Interval value | Interval field | Starts | Ends | Status | Originator | character_set_client | collation_connection | Database Collation |
    | +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ |
    | db1 | test_event_01 | azureuser@% | SYSTEM | RECURRING | NULL | 1 | MINUTE | 2023-04-05 14:47:04 | 2023-04-05 15:47:04 | ENABLED | 3221153808 | latin1 | latin1_swedish_ci | latin1_swedish_ci |
    | +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ |
    | 1 row in set (0.23 sec) |
    | ``` |

1. After a few minutes, query the rows from the table to begin viewing the rows inserted every minute according to the `event_scheduler` parameter that you configured:

    ```azurecli
    mysql> select * from tab1;
    +----+---------------------+-------------+
    | id | CreatedAt | CreatedBy |
    | +----+---------------------+-------------+ |
    | 1 | 2023-04-05 14:47:04 | azureuser@% |
    | 2 | 2023-04-05 14:48:04 | azureuser@% |
    | 3 | 2023-04-05 14:49:04 | azureuser@% |
    | 4 | 2023-04-05 14:50:04 | azureuser@% |
    | +----+---------------------+-------------+ |
    | 4 rows in set (0.23 sec) |
    | ``` |
| 1. After an hour, run a `select` statement on the table to view the complete result of the values inserted into table every minute for an hour (as `event_scheduler` is configured in this case): |
    ```azurecli

    mysql> select * from tab1;
    +----+---------------------+-------------+
    | id | CreatedAt | CreatedBy |
    | +----+---------------------+-------------+ |
    | 1 | 2023-04-05 14:47:04 | azureuser@% |
    | 2 | 2023-04-05 14:48:04 | azureuser@% |
    | 3 | 2023-04-05 14:49:04 | azureuser@% |
    | 4 | 2023-04-05 14:50:04 | azureuser@% |
    | 5 | 2023-04-05 14:51:04 | azureuser@% |
    | 6 | 2023-04-05 14:52:04 | azureuser@% |
    | ..< 50 lines trimmed to compact output >.. |
    | 56 | 2023-04-05 15:42:04 | azureuser@% |
    | 57 | 2023-04-05 15:43:04 | azureuser@% |
    | 58 | 2023-04-05 15:44:04 | azureuser@% |
    | 59 | 2023-04-05 15:45:04 | azureuser@% |
    | 60 | 2023-04-05 15:46:04 | azureuser@% |
    | 61 | 2023-04-05 15:47:04 | azureuser@% |
    | +----+---------------------+-------------+ |
    | 61 rows in set (0.23 sec) |
    | ``` |

#### Other scenarios

You can set up an event based on the requirements of your specific scenario. A few examples of scheduling SQL statements to run at various time intervals follow.

To run a SQL statement now and repeat one time per day with no end:

```sql
CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 DAY
STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
COMMENT 'Comment'
DO
<your statement>;

若要每小時執行 SQL 語句,且沒有結束:

CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Comment'
DO
<your statement>;

若要每天執行不含結束的 SQL 語句:

CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 DAY
STARTS str_to_date( date_format(now(), '%Y%m%d 0200'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
COMMENT 'Comment'
DO
<your statement>;

限制

針對設定高可用性的伺服器,當故障轉移發生時,伺服器參數可能會 event_scheduler 設定為 OFF。 如果發生這種情況,當故障轉移完成時,請將 參數設定為 將值設定為 ON

不可修改伺服器參數

Azure 入口網站 中的 [伺服器參數] 窗格會顯示可修改和不可修改的伺服器參數。 無法使用不可修改的伺服器參數。 您可以在工作階段層級使用 init_connect Azure 入口網站Azure CLI 來設定非可修改的伺服器參數。