MySQL 8部分新特性(8.0.17)

gaopengtttt發表於2019-09-08

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

MySQL 8.0 Reference Manual

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

image.png


  • 資料字典使用事務性儲存引擎。以前版本資料字典儲存在檔案或者非事務引擎表中
    參考第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
  4. 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個引數需要再研究
  5. innodb_log_buffer_size:可動態修改回收記憶體
  6. undo 日誌對 small LOB data支援 8.0.12
  7. 瞬間增加欄位支援,演算法為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_buffer_pool_size
    innodb_log_file_size
    innodb_flush_method

  • 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
  5. 8.0.16 半連線支援EXISTS子查詢
  6. 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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2656414/,如需轉載,請註明出處,否則將追究法律責任。

相關文章