新特性解讀 | MySQL 8.0.18 預覽

作者:管長龍 王均 田帥萌

前一陣圈內人士發佈了一個關於新版本的消息:《MySQL 8.0.18 Hash Join 來啦!》

該文章概括介紹了 MySQL 8.0.18 將支持 Hash Join 和推出 EXPLAIN ANALYZE 等新功能。

國慶一過,全國各處秋高氣爽,感覺到 8.0.18 的腳步也近了。除了上述的新功能之外,有關 8.0.18 的更新細節已經出現在 MySQL 官網文檔上了,對此做了一些整理,讓我們先預覽一下吧!

一、Replication

1、新的主從複製信息記錄方式

我們知道主從複製建立前,需要在 slave 通過 CHANGE MASTER TO 語句來設置 master 選項。若 slave 啓動是添加 --master-info-file=file_name 參數,則開啓記錄 master 信息的日誌文件,默認文件爲 master.info 在 datadir 下。

8.0.18 版本開始將不推薦使用 --master-info-file--master-info-repository 選項。未來將使用 crash-safe slave 表來代替 master 信息文件記錄的方式。

同理,relay_log_info_file 也將在 crash-safe slave 表中記錄,固也不推薦使用。

2、對 row-based 日誌的搜索模式優化

目前 --slave-rows-search-algorithms=list 的作用是在啓動時控制選擇如何在行中搜索匹配項。特備是是否使用 HASH_SCAN,未來將默認使用 INDEX_SCAN, HASH_SCAN 這兩種方式,它們的性能是最佳的,並可以在所有情況下正常工作。

綜上,從 8.0.18 版本後不推薦再設置此值,建議默認即可。

3、即將廢棄的壓縮協議選項

主從傳輸的壓縮協議有兩種開啓方式:

3.1 --slave-compressed-protocol[={OFF|ON}] 服務啓動選項。如果主從都支持壓縮協議,則可開啓主從壓縮協議。

默認爲禁用狀態 uncompressed,具體壓縮方式可以通過配置 my.cnf 決定。

[mysqld]
protocol_compression_algorithms=zlib,zstd,uncompressed

優先級從左到右依次嘗試。

3.2 CHANGE MASTER TO 指定的 MASTER_COMPRESSION_ALGORITHMS 選項

參數同上,還可指定壓縮等級

CHANGE MASTER TO
  MASTER_COMPRESSION_ALGORITHMS = 'zlib,zstd',
  MASTER_ZSTD_COMPRESSION_LEVEL = 7;

從 MySQL 8.0.18 開始,第一種方式開啓後,優先生效,將決定主從壓縮協議。通過第二種方式修改後重啓也無法生效。

不推薦使用該選項。它將在將來的 MySQL 版本中刪除。

4、壓縮相關的連接選項

選項 描述 新增 不推薦
--compress, -C 壓縮客戶端和服務器之間發送的所有信息 8.0.18
--compression-algorithms=value 用於連接服務器的允許壓縮算法 8.0.18
--zstd-compression-level=level 與使用zstd壓縮的服務器的連接的壓縮級別 8.0.18

二、System variables、Functions and Options

1、不再受 setting the session value 限制

  • default_collation_for_utf8mb4
  • collation_database
  • explicit_defaults_for_timestamp
  • rbr_exec_mode

2、init_file

如果指定,此變量將命名一個文件,該文件包含在啓動過程中需要讀取和執行的 SQL 語句。在 MySQL 8.0.18 之前,每個語句必須在一行上,並且不應包含註釋。從 MySQL 8.0.18 開始,文件中語句的可接受格式已擴展爲支持以下結構:

  • delimiter ;,將語句定界符設置爲 ; 字符
  • delimiter $$ ,將語句定界符設置爲 $$ 字符序列
  • 同一行上的多個語句,由當前定界符分隔
  • 多行語句
  • 從 # 字符到行尾的註釋。
  • 從-- 序列到行尾的註釋。
  • 從一個 /序列到以下/ 序列(包括多行)的 C 樣式註釋。
  • 用單引號(')或雙引號(")字符括起來的多行字符串文字。
  • 同時如果服務器使用 --initialize 或 --initialize-insecure 選項啓動 ,則它將以引導模式運行,並且某些功能不可用,該功能限制了文件中允許的語句。這些語句包括與帳戶管理(例如 CREATE USER 或 GRANT),複製和全局事務標識符有關的語句。

3、max_prepared_stmt_count

8.0.18 後最大值從 1048576 改爲 4194304

4、thread_pool_size

8.0.18 後最大值爲 64,之後的版本(8.0.19)將調整爲 512

5、新增

  • compression_algorithm:當前連接的壓縮算法
  • compression_level:當前連接的壓縮級別
  • group_replication_recovery_compression_algorithm:允許用於傳出恢復連接的壓縮算法
  • group_replication_recovery_zstd_compression_level:使用zstd壓縮的恢復連接的壓縮級別
  • innodb_idle_flush_pct:限制 InnoDB 空閒時的 I/O操作
  • protocol_compression_algorithms:允許傳入連接的壓縮算法
  • show_create_table_skip_secondary_engine:是否從 SHOW CREATE TABLE 輸出中排除 SECONDARY ENGINE 子句
  • generated_random_password_length:參數作用於生成隨機密碼允許的最大字符數 CREATE USER, ALTER USER 和 SET PASSWORD 語句

6、不推薦

  • compression:客戶端連接是否在客戶端/服務器協議中使用壓縮
  • log_bin_use_v1_row_events:服務器是否正在使用 v1 版本的二進制日誌行事件
  • master-info-file:記住主文件的文件的位置和名稱,以及 I/O 複製線程在主文件的二進制日誌中的位置
  • relay_log_info_file:從站記錄有關中繼日誌信息的文件
  • slave-rows-search-algorithms:確定用於從屬更新批處理的搜索算法
  • slave_compressed_protocol:使用主/從協議壓縮
  • slave_rows_search_algorithms:確定用於從屬更新批處理的搜索算法

7、函數不推薦

  • WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()

三、Source-Configuration Options

  1. 新增 --DADD_GDB_INDEX=bool

此選項確定是否啓用二進制文件中 .gdb_index 段的生成 ,這將使它們更快地加載到調試器中。該選項默認爲禁用。使用 lld 鏈接程序,並被禁用。如果使用 lld 或 GNU gold 以外的鏈接程序,則該鏈接無效 。

  1. 新增 --DWITH_ZSTD=zstd_type

使用該 zstd 算法的連接壓縮,需要使用 zstd 庫支持構建服務器。該 WITH_ZSTD 指示的源 zstd 支持:

  • bundled:使用 zstd 與發行版捆綁在一起的庫。這是默認值。
  • system:使用系統 zstd 庫。
  1. 刪除 --DDISABLE_SHARED=bool

是否禁用構建構建共享庫並編譯與位置相關的代碼。默認值爲 OFF(編譯與位置無關的代碼)。

  1. 刪除 --DWITH_RE2=re2_type

要包括的 RE2 庫支持的類型。re2_type 可以是以下值之一:

  • bundled:使用與發行版捆綁在一起的 RE2 庫。這是默認值。
  • system:使用系統RE2庫。

從 MySQL 8.0.18 開始,MySQL 不再使用 E2 庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章