天天看點

MySQL 8部分新特性(8.0.17)

參考官方文檔,記錄了部分我關注的新特性。本文僅僅是大概記錄而已,準确描述參考官方文檔:

MySQL 8.0 Reference Manual

歡迎關注我的《深入了解MySQL主從原理 32講 》,如下:

  • 資料字典使用事務性存儲引擎。以前版本資料字典存儲在檔案或者非事務引擎表中

    參考第14節。

  • 支援原子性DDL,進行原子性的資料庫字典更新,

    并且binlog的寫入和DDL操作為同一個原子性事務。參考13.1.1節

  • 更新過程,安裝新版本後自動進行更新操作,而不需要執行mysql_upgarde.--upgrade

    選項用于控制這個功能。 8.0.16

  • 安全和賬戶管理

    授權表現在是Innodb表,以前都是MyISAM這會活得以下好處:

  1. 同時更改多個使用者的時候可能某些成功某些失敗。沒有原子性
  2. 現在有原子性要麼都成功要麼都失敗。13.1.1
  3. 預設認證插件為caching_sha2_password,性能更好更安全 6.4.1.3
  4. 支援角色 6.2.10
  • 資料總管 8.12.5
  • Innodb 增強
  1. 自增字段修改加入redo 持久化
  2. 如果修改的值大于自增則持久化
  3. innodb_deadlock_detect可以關閉死鎖檢測
  4. INFORMATION_SCHEMA.INNODB_CACHED_INDEXES可以檢視緩存的資料
  5. 支援for update nowait操作
  6. innodb使用mysql的資料字典 14
  7. 臨時表存放到ibtmp1目錄
  8. 分區表使用native,支援online DDL
  9. mysql系統表和變量現在放到innodb tablespace中叫做mysql.ibd
  10. innodb_undo_log_truncate預設開啟
  11. innodb_rollback_segments參數含義,從全局變為每個undo表空間
  12. innodb_max_dirty_pages_pct_lwm參數預設值修改為10
  13. innodb_max_dirty_pages_pct從75增加到90
  14. innodb_auto_lock_mode預設設定為2,自增鎖降低
  15. innodb_dedicated_server參數加入,預設是OFF,開啟用于自動配置一些參數,包含:

innodb_buffer_pool_size

innodb_log_file_size

innodb_flush_method

  1. INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF視圖可以檢視表空間類型
  2. Innodb支援原子性DDL
  3. SDI加入Serialized dictionary information (SDI) ,除了臨時檔案和UNDO表空間,其他資料

    檔案都包含,SDI 資料是一個容易的表中繼資料,用于在資料字典損壞的情況下直接從表空間中

抽取中繼資料,是壓縮格式JSON

  1. redo 記錄優化

    開啟獨占的redo寫線程

使用者線程将髒資料寫入flush list使用relaxed order

新參數加入

innodb_log_wait_for_flush_spin_hwm:定義最大平均日志寫入時間
  innodb_log_spin_cpu_abs_lwm:定義最小CPU使用總數
  innodb_log_spin_cpu_pct_hwm:定義最大CPU使用總數           

這3個參數需要再研究

  1. innodb_log_buffer_size:可動态修改回收記憶體
  2. undo 日志對 small LOB data支援 8.0.12
  3. 瞬間增加字段支援,算法為ALGORITHM=INSTANT,優先使用INSTANT算法
  • 新增temptable存儲引擎用于參數internal_tmp_mem_storage_engine參數,允許的值包含

    temptable 預設,memory是以前的。8.0.13支援blob資料類型

  • 關閉參數innodb_buffer_pool_in_core_file
  • 8.0.13使用者建立的臨時表和内部臨時表存儲在臨時表空間中,當session斷開的時候

    ibtmp1将會釋放,但是不會将磁盤空間反還給作業系統,新增參數 innodb_temp_tablespaces_dir

設定為#innodb_tmp 當session斷開的時候将會截斷然後将空間釋放到pool中,反還給

作業系統。

  • innodb_dedicated_server 可以動态配置設定部分參數 8.0.14
  • innodb_parallel_read_threads參數并行進行聚集索引掃描用于優化check table性能
  • 如果超過temptable_max_ram記憶體大小将會使用臨時檔案或者innodb 表,預設使用mmap進行映射檔案使用 temptable_use_mmap進行控制。新增的臨時表引擎temptable和老的memory作為對比老的還是tmp_table_size or max_heap_table_size的大值
  • innodb_spin_wait_pause_multiplier 參數加入
  • innodb_parallel_read_threads 參數控制并發執行
  • 字元集變化

    預設的字元集使用utf8mb4而不是latin1,包含新增的校驗字元集utf8mb4_ja_0900_as_cs

  • 優化器增強
  1. 不可見索引
  2. 降序索引
  3. 函數索引
  4. 類型傳回檢測

    比如c是一個TINYINT UNSIGNED 占用1位元組最大255條件使用c < 256 恒成立,如果

c >= 255轉換為c=255

  1. 8.0.16 半連接配接支援EXISTS子查詢
  2. 8.0.17 反半連接配接支援not in/not EXISTS
  • WITH AS文法支援
  • 開窗函數

    RANK(), LAG(), NTILE()

  • 配置管理端口

    如果達到 max_connections設定連接配接管理端口進行管理

  1. 需要配置admin_address為IP值,預設不開啟
  2. 需要配置admin_port端口預設33062
  3. 沒有連接配接限制
  4. 需要SERVICE_CONNECTION_ADMIN權限
  • 8.0.17 innodb歸檔支援
  • 8.0.17 innodb克隆插件
  • hostname支援上限從60到255

作者微信:gp_22389860