type
status
date
slug
summary
tags
category
icon
password
以下非全部的更新內容,此為小弟查看官方文檔後所節錄,主要以可能使用到的功能、曾經遇到的 BUG 和重大 BUG 更新為主。

功能新增或變動

  1. ALTER TABLE ... RENAME COLUMN 支持且默認使用 ALGORITHM=INSTANT。
  1. tmp_table_size 是用來限制單個 internal tempoary table 占用的內存大小,在 8.0.28 之前限制的是 MEMORY 引擎,從 8.0.28 開始也限制 TempTable 引擎的 internal tempoary table。
    1. 💡
      在 8.0.13 版本之前,是使用 MEMORY 引擎來建立 internal tempoary table,其不足之處在於不支援可變長度的資料型態,這導致了以下問題: 1. 當欄位出現 TEXT、BLOB 型態會直接改為在 disk 上建立 tempoary table。 2. 對於 VARCHAR 型態總會映射為 CHAR 型態,導致內存浪費。 因此在 8.0.13 開始引進了 TempTable 引擎解決這些問題,且預設 internal tempoary table 使用 TempTable 引擎。 延伸閱讀: MySQL · 引擎特性 · 临时表改进 (taobao.org) MySQL · 源码分析 · 临时表与TempTable存储引擎Allocator (taobao.org)
      notion image
      參數調整方針:
  1. 此版本引入了 global 和 per-user 的內存分配監控和限制:
      • 新增 system variable:connection_memory_limit 用來限制單個 user connection 可以使用的最大內存量,如果任何 user connection 超過此用量,則後續的查詢會 ER_CONN_LIMIT 錯誤並拒絕。
      • 新增 system variable:global_connection_memory_limit 用來限制所有 user connection 可以使用的總內存量,也就是不能超過 Global_connection_memory 的數量,如果超過後續的查詢,則來自所有 user 的查詢都會返回 ER_GLOBAL_CONN_LIMIT 並拒絕。
  1. FROM_UNIXTIME()UNIX_TIMESTAMP()CONVERT_TZ() 從 8.0.28 開始在 64 位元版本下最大值由 UTC 2038-01-19 03:14:07.999999 調整為 UTC 3001-01-18 23:59:59.99999
    1. 需要注意的是 TIMESTAMP 型態的欄位最大值仍舊是 UTC 2038-01-19 03:14:07.999999

BUG 修復

  1. 當包含了 JSON、TEXT 欄位的排序有時會耗盡 sort buffer,這會發生在如果 sort buffer size 沒有超過排序中最大的 row 大小的 15 倍。現在 sort buffer size 只要超過最大的 sort key 其 15 倍大小即可。(Bug #103325, Bug #105532)
  1. 當在有 partition 上的表使用 PK 外的索引查詢有時會導致過多的 CPU loading。 (Bug #104576)
    1. 補充:查看 bug report 的重現,看起來在欄位較多的表上較可能出現,案例上的數量是 300 個欄位,並在此文章中看到在修復前的避免方式:分區表欄位不要過多、避免用 SELECT * 語句。
  1. 修復 functional index 在 stored function 內的查詢中無法被使用。(BUG #102359)
  1. 修復查詢 SHOW PROCESSLIST、INFORMATION_SCHEMA.PROCESSLIST 在特定配置下會導致 server crash 的問題。
    1. 此狀況發生在 8.0.26、8.0.27 版本,當 terminology_use_previous 設置為 BEFORE_8_0_26 並且對 INFORMATION_SCHEMA.PROCESSLIST 訪問時就會導致服務 crash。
      在 MySQL 8.0.26 中進行了術語上的調整,例如: master → source 和 slave → replica ......等。為避免影響依賴原有舊名稱的監控工具無法正常使用,新增了 terminology_use_previous 參數,有預設值 NONEBEFORE_8_0_26 兩種值,當設定為 BEFORE_8_0_26 時可以使用舊有的名稱。
      具體可參考:

參考