MySQL 8.0 技術詳解

MySQL 8.0 簡介
MySQL 5.7 到 8.0,Oracle 官方跳躍了 Major Version 版本號,隨之而來的就是在 MySQL 8.0 上作了許多重大更新,在往企業級數據庫的路上大步前行,全新 Data Dictionary 設計,支持 Atomic DDL,全新的版本升級策略,安全和帳號管理增強,InnoDB 功能加強等,目前小版本已經 release 到 8.0.16,新的功能仍然在持續推出。
RDS MySQL 8.0 產品是阿里雲推出的 MySQL 系列雲產品之一,使用徹底兼容 MySQL 8.0 的阿 裏雲 AliSQL 8.0 分支,除了官方在 MySQL 8.0 推出的全新功能外,AliSQL 沉澱了許多在 Alibaba 集團電商業務和雲上幾十萬客戶在使用 MySQL 過程當中遇到的問題和需求,以此來加固AliSQL, 提高 AliSQL 的性能和穩定性。
下面分別對 MySQL 8.0 和 AliSQL 8.0 相關的版本和功能作簡短的介紹:html

MySQL 8.0 版本更新mysql

  1. 數據字典

MySQL 8.0 摒棄了 Server Layer 定義的 FRM 文件和其它非事務表,使用了一組 InnoDB 表來 保存數據字典,支持事務特性。正則表達式

  1. Atomic DDL

在 Data Dictionary 支持事務特性的基礎上,8.0 增長了一個 DDL log 字典表,用來協調在
DDL 過程當中,對數據字典,文件系統 和 事務系統的修改,作到原子性。sql

  1. 升級

從 8.0.16 開始,對於系統表的修改,拋棄了 mysql_upgrade工具,使用在系統重啓的時候,進 行升級。數據庫

  1. 安全和帳號管理

帳號方面,從 8.0 開始,支持 role 對權限進行便捷管理,以及新增多個系統權限,分別對應新 增了 ROLE_EDGES,GLOBAL_GRANTS 兩個系統表;mysql schema 下的涉及權限和用戶相關的表 更改爲 InnoDB 引擎,支持事務特性,保證了帳號管理語句的原子性。express

認證方面,caching_sha2_password 做爲默認的認證 plugin,以提高安全,但要注意並不能和 8.0 以前的client進行兼容。
鏈路加密,若是編譯了OpenSSL 1.1.1 及以上,MySQL 8.0 SSL 將支持到 TLSv1.3 版本。
系統帳號,在 8.0.16 新增 SYSTEM_USER 權限,用於區分 系統帳號仍是普通帳戶,能夠對用戶 進行分類管理。安全

  1. Auto increment 持久化

在 InnoDB 引擎中,新增了一個引擎私有的系統表 innodb_dynamic_metadata,自增值就保存 在這個表裏,在對每張表進行修改 auto increment 值的時候,都使用 redo log 進行保護,在作
heckpoint 的時候,持久化到這個系統表中,保證下次重啓後,auto increment 可以從持久化中恢 復出來,而且不受事務上下文回滾而影響。性能優化

  1. 死鎖檢測

在高併發的狀況下,InnoDB 引擎中對於事務鎖的死鎖檢測,將是影響性能 scale 的重要因素,
8.0 後提供了一個參數innodb_deadlock_detect:https://dev.mysql.com/doc/ref...,用來打開或者關閉引擎的死鎖檢測,在業 務可以明確相關風險的狀況下,關閉死鎖檢測,能大幅提高併發能力。session

  1. 臨時表

在 InnoDB 引擎中,用戶建立的臨時表將統一到 ibtmp 文件的臨時表空間中; 對於系統運行過 程中產生內存臨時表,8.0後啓用了新的 TempTable 引擎,支持 blob 字段,功能上優於 memory ngine。併發

  1. Lock

SELECT ... FOR SHARE 和 SELECT ... FOR UPDATE 新增了 NOWAIT 和SKIP LOCKED 語法,減小長時間和非必要的阻塞。

  1. Instant add column

InnoDB 解決了長期困擾 DBA 的加字段要 copy 整張表數據的問題。如今能夠快速的增長字段,只修改數據字典,而不用修改表中的記錄自己。

  1. 並行查詢

InnoDB 目前支持在 clustered index 上進行並行查詢,提供innodb_parallel_read_threads,https://dev.mysql.com/doc/ref...,參數控制session內的並行度。

  1. Redo優化

Redo的寫入一直是 InnoDB 高併發狀況下的瓶頸,8.0 開始:

用戶線程能夠併發的copy redo 日誌到 log buffer中
用戶線程能夠以更鬆散的方式把 dirty block 加入到髒塊鏈表中
獨立的寫線程完成 redo 的持久化

  1. Json增強

在Json上,8.0 增長了更多的功能性,詳見 MySQL 8.0 的 document。

  1. Partial update on lob

InnoDB 繼續優化 partial update on lob data,對於僅僅修改不多字節的 lob 字段,可以大幅 減小 undo data,並提高效率。

  1. 優化器和對象相關

1) 支持 invisible index,方便用戶和 DBA 調試 statement。
2)descending indexes,提高降序掃描的效率。
3)Common table expressions,支持 with 語法完成。
4)Window functions,增長大量窗口函數
5)Regular expression,從新設計了正則表達式的支持。

AliSQL 8.0 功能介紹
除了 MySQL 8.0 官方的特性之外,AliSQL 8.0 在新功能,性能提高,穩定性保證,可診斷性上 作了大量的改進:

  1. 診斷

Top SQL:
AliSQL 在 statement 級別上,增長了新的性能診斷指標,方便更快更準確的量化 SQL 的開銷:
圖片描述
效果以下所示:
圖片描述

表和索引統計
新增表和索引級別的統計:
圖片描述

InnoDB IO 統計
圖片描述

  1. Sequence

AliSQL 8.0 增長對 Sequence 對象的支持,方便和高效的獲取單調惟一值:
圖片描述

  1. 大文件異步刪除

InnoDB 大文件刪除帶來穩定性開銷,因此 AliSQL 8.0 提供了異步刪數據文件的機制:
參數設置:
圖片描述
展現臨時文件列表:
圖片描述

  1. 隱含主鍵

AliSQL 針對用戶沒有建 PK 的表,默認添加一個隱含主鍵,以加速 slave 端的 SQL apply。 查看方法:
圖片描述
圖片描述

  1. 事務超時

AliSQL 新增 kill_idle_transaction_timeout 參數,以便對超時的事務鏈接進行 kill,防止事務長時間未提交帶來的系統風險。

  1. Rotate slow log

AliSQL 8.0 針對 slow log 收集過程當中,對用戶實例的影響,以及truncate帶來的阻塞可能,提 供了rotate slow log table的功能,影響更小,更快捷,並保證零數據丟失的收集方式。
圖片描述

  1. 審計日誌

AliSQL 8.0 從新設計的 audit log 模塊,提供了四種刷新策略,分別是:
圖片描述
提供適合不一樣業務模式的 audit log 配置供用戶選擇。

  1. 安全特性

AliSQL 針對 SSL 鏈路,靜態編譯了OpenSSL 1.0 版本,目前支持到 TLSv1.2 版本。

  1. 優化

AliSQL 針對 semi sync 和 MDL 進行了性能優化,提高了 semi sync 的性能,大幅減小了 MDL 鎖阻塞的可能性。

相關文章
相關標籤/搜索