type
status
date
slug
summary
tags
category
icon
password

Generated Invisible Primary Keys (GIPKs)

MySQL從 8.0.30 開始支援 GIPK 模式,此模式會在沒有顯式 PK 的 InnoDB 表中添加 GIPK,添加的 GIPK 欄位結構如下:
預設情況下不開啟此模式,如需開啟 GIPK 模式需將 sql_generate_invisible_primary_key 調整為 ON。需注意若此參數僅在 replica 設置,replication 線程從 source 跟下來的表不會產生 GIPK。
GIPK 模式產生的 my_row_id 此欄位不可進行修改,唯一的例外是修改其可見性:
GIPK 模式只支援 CREATE TABLE … SELECT 的語句在 row-based 下的 replication。
此版本的 mysqldump 支援 --skip-generate-invisible-primary-key 來排除 GIPK 的輸出。
範例如下:

添加功能

  1. innodb_doublewrite 新增 2 個值:
      • DETECT_ONLY:只有 metadata 被寫入 dublewrite buffer,因此無法用來修復不完整的 page。
      • DETECT_AND_RECOVER:等同於設置為 ON,完全啟用 duoblewrite buffer。
  1. redo log 可以動態調整
      • 新增 innodb_redo_log_capacity 變量可以動態調整 redo log 佔用的 disk 空間大小。
      • 棄用 innodb_log_files_in_groupinnodb_log_file_size
      • innodb_redo_log_capacity = innodb_log_files_in_group * innodb_log_file_size
      • redo log 位置調整:
        • 8.0.30 之前 redo log 在 data_dir 的 2 個 redo log:ib_logfile0ib_logfile1
          8.0.30 之後 data_dir 底下還會有一個 #innodb_redo 的目錄,裡面會有 32 個 redo log,每個 redo log 的大小是 innodb_redo_log_capacity * 1/32,其中檔名中包含 tmp 的表示遇先建立備用的 redo log。
      • 透過 performance_schema.innodb_redo_log_files 可以確認每個 redo log 所包含的 LSN 範圍。
    1. mysqldump 增加了 --mysqld-long-query-time 選項,可以為 mysqldump 設置 session 的 long_query_time,避免 dump 期間寫入不必要的 slow log。
     

    BUG 修復

    1. truncate table 未能成功刪除使用 ALGORITHM=INSTANT 刪除的欄位的 data dictionary entries
    1. 使用 ALGORITHM=INSTANT 新增 NULLABLE 的欄位在對其 count() 時結果錯誤
    1. 升級到 MySQL 8.0.29 時,嘗試存取具有即時添加欄位的 TABLE 時發生故障