天天看點

【轉載】-MySQL+8.0資料庫新特性及測試1

目錄

一、 概述

二、 Mysql 8.0特性

  • 2.1 面向開發者特性
    • 2.1.1 NoSQL 文檔商店
    • 2.1.2 SQL
    • 2.1.3 JSON
  • 2.2 GIS(地理資訊系統)
  • 2.3 字元集
  • 2.4 資料類型 Datatypes
  • 2.5 成本模型
  • 2.6 基于擴充正規表達式Regular Expressions
  • 2.7 運維自動化特性Dev Ops features
  • 2.8 可靠性 Reliability
  • 2.9 可觀測性 Observability
  • 2.10 可管理性
  • 2.11 高可用性
  • 2.12 安全特性 Security features
  • 2.13 性能 Performance
  • 2.14 MySQL 8.0企業版
  • 2.15 MySQL 雲服務
  • 2.16 其他特性 Other Features

三、 Mysql 8.0 innodb 增強特性

四、 Mysql8.0結構變化對比

五、 Mysql 8.0資料字典

六、 Mysql 8.0配置檔案增強

七、 Mysql 8.0參數及變更

八、 mysql 8.0自适應參數( Automatic Configurations)

九、 MySQL 8.0中被廢棄的特性

十、 MySQL 8.0被移除的功能

十一、 Mysql 8.0原子性 DDL

十二、 Mysql 8.0 NOWAIT 及 SKIP LOCKED

十三、 Mysql 8.0 Resource Group

  • 13.1 什麼是Resource Group
  • 13.2 資源組資訊檢視
  • 13.3 如何使用資源組
  • 13.4 使用資源組的限制
  • 13.5 總結

十四、 Mysql 8.0使用者建立和角色管理

  • 14.1 MySQL 使用者管理
  • MySQL8.0 的角色管理

十五、 MySQL 8.0 降序索引

十六、 What’s New With MySQL Replication in MySQL 8.0

  • 16.1 Mysql 主備複制性能改進過程
  • 16.2 Mysql 8.0 複制性能提升
  • 16.3 總結

十七、 Mysql 8.0.12 快速加列功能(Instant Add Column)

  • 17.1 各版本操作對比(單表 3000W)
  • 17.2 目前 MySQL 官方支援的操作
  • 17.3 監控
  • 17.4 目前版本中對 instant add column 有限制

十八、 Mysql 8.0 通用表空間

十九、 Mysql 8.0 基準壓力性能測試

二十、 Mysql 8.0 主從延遲測試

二十一、 Msql 8.0 更新方案

二十二、 Mysql 8.0 Repliaction to Mysql 5.7

二十三、 Mysql 8.0 備份和恢複

二十四、 Mysql 8.0 監控

二十五、 Mysql 8.0 錯誤及 bug 修複

一、 概述

MySQL 8.0 正式版 8.0.11/8.0.12 已釋出,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,還帶來了大量的改進和更快的性能!
           

二、 Mysql 8.0 特性

MySQL 8.0 資料庫添加了 NoSQL 和許多新的增強功能:
1、 NoSQL 文檔存儲為開發人員提供了開發傳統 SQL 關系應用程式和 NoSQL 無模式文檔資料庫應用程式的靈活性。這消除了對單獨的 NoSQL 文檔資料庫的需要。
2、 SQL 視窗函數,公用表表達式,NOWAIT 和 SKIP LOCKED,降序索引,分組,正規表達式,字元集,成本模型和直方圖。
3、 JSON 擴充文法,新功能,改進排序和部分更新。使用 JSON 表函數,您可以使用JSON 資料的 SQL 機制。
4、 GIS 地理支援。空間參考系統(SRS),以及 SRS 感覺空間資料類型,空間索引和空間功能。
5、 可靠性 DDL 語句已變得原子性和崩潰安全,中繼資料存儲在單個事務資料字典中
6、 可觀察性 性能模式,資訊模式,不可見索引,錯誤記錄。
7、 可管理 性持久性配置變量,撤消表空間管理,重新啟動指令和建立 DDL。
8、 高可用性 InnoDB 叢集為您的資料庫提供內建的本地 HA 解決方案。
9、 安全 OpenSSL 改進,新的預設身份驗證,SQL 角色,分解超級特權,密碼強度,授權。
10、性能 比 MySQL 5.7 快兩倍。
           
  • 2.1 面向開發者特性

    MySQL 8.0 應面向 MySQL 開發人員的需求,帶來了 SQL,JSON,公共表達式,地理資訊系統等方面的特性,因為很多開發人員有存儲 EmoJi 表情的需求,在新版本中 UTF8MB4成為預設的字元集。除此之外,還有對 Binary 資料類型按位操作,和改進對 IPV6 和 UUID函數的改進。

  • 2.1.1 NoSQL 文檔商店

    MySQL 文檔庫為開發人員提供了開發傳統 SQL 關系型應用程式和 NoSQL,無模式文檔資料庫應用程式的最大靈活性。這消除了對單獨的 NoSQL 文檔資料庫的需要。MySQL 文檔存儲為無模式的 JSON 文檔提供了多文檔事務支援和完整的 ACID 合規性。

    【轉載】-MySQL+8.0資料庫新特性及測試1
  • 2.1.2 SQL

    視窗函數

    MySQL 8.0在 MySQL中提供了 SQL視窗函數。與分組集合函數類似,視窗函數對一組行進行一些計算,例如 COUNT或 SUM。但是,如果分組聚合将這組行集合到一行中,則視窗函數将為結果集中的每一行執行聚合。視窗函數有兩種形式:用作視窗函數和專用視窗函數的 SQL聚合函數。

    公用表表達式

    MySQL 8.0在 MySQL中提供[遞歸]公用表表達式(CTE)。非遞歸 CTE可以解釋為“改進的派生表”,因為它允許派生表被多次引用。遞歸 CTE是一組疊代建構的行:從最初的一組行開始,一個程序派生出新的行,然後将這些新的行重新輸入到程序中,産生更多的行,等等,直到該過程不再生成行。

    公用表表達式是一個命名的臨時結果集,僅在單個 SQL語句(例如 SELECT,INSERT,UPDATE或 DELETE)的執行範圍記憶體在。與派生表類似,CTE不作為對象存儲,僅在查詢執行期間持續。與派生表不同,CTE可以是自引用(遞歸 CTE,也可以在同一查詢中多次引用。 此外,與派生表相比,CTE提供了更好的可讀性和性能。CTE的結構包括名稱,可選列清單和定義 CTE的查詢。定義 CTE後,可以像 SELECT,INSERT,UPDATE,DELETE或 CREATE VIEW語句中的視圖一樣使用它。

    【轉載】-MySQL+8.0資料庫新特性及測試1
    MySQL Workbench 8.0中的 MySQL CTE和視窗函數

NOWAIT和 SKIP LOCKED(立即報錯或者跳過鎖持有的行)

MySQL 8.0在 SQL鎖定子句中提供了 NOWAIT和 SKIP LOCKED選項。通常,當某行由于 UPDATE或 SELECT … FOR UPDATE而被鎖定時,任何其他事務都必須等待才能通路該鎖定的行。在某些使用情況下,如果行被鎖定或忽略鎖定行,則需要立即傳回。使用NOWAIT 的鎖定子句永遠不會等待擷取行鎖。相反,查詢将失敗并顯示錯誤。使用 SKIPLOCKED 的鎖定子句永遠不會等待擷取列出的表上的行鎖。相反,鎖定的行将被跳過并且不會被讀取。

降序索引(Descending Indexes)

MySQL 8.0 帶來了對降序索引的支援。在 8.0降序索引中,資料被倒序組織,正向查找。而在之前的版本中,雖然支援建立降序排列的索引,但其實作方式是通過建立常見的正序索引,然後進行反向查找來實作的。一方面來說,正序查找要比逆序查找更快,另一方面來說,真正的降序索引在複合的 order by語句(即有 asc又有 desc)中,可以提高索引使用率,減少

filesort。

GROUPING(分組函數)

MySQL 8.0提供了 GROUPING(),SQL_FEATURE T433。GROUPING()函數将超級聚合行與正常分組行進行區分。GROUP BY擴充(如 ROLLUP)會生成超集合行,其中所有值的集合均由 null表示。使用 GROUPING()函數,您可以區分表示超常聚合行中所有值的集合的 null與正常行中的 NULL。

Optimizer Hints(優化器建議)

在 5.7版本中引入了新的優化器建議的文法,借助這個新的文法,優化器建議可以被用/+ /包裹起來直接放在 SELECT |INSERT | REPLACE | UPDATE | DELETE關鍵字的後面。在 8.0的版本中又加入了新的姿勢。

  • 8.0版本增加了 INDEX_MERGE和 NO_INDEX_MERGE,允許使用者在單個查詢中控制是否使用索引合并特性。
  • 8.0版本增加了 JOIN_FIXED_ORDER, JOIN_ORDER, JOIN_PREFIX,和 JOIN_SUFFIX,允許使用者控制 join表關聯的順序。
  • 8.0版本增加了 SET_VAR,該優化器建議可以設定一個隻在下一條語句中生效的的系統參數。

相對于之前的優化器建議和優化器特性開關參數,更傾向于推薦新形式的優化器建議,新形式的優化器建議可以在不侵入 SQL語句(指修改語句的非注釋的業務部分)的情況下,注入查詢語句的很多位置。與直接修改語句的優化器建議相比,新形勢的優化器建議在 SQL語義上更加清晰。

  • 2.1.3 JSON

    MySQL 8.0增加了新的 JSON函數,并提高了排序和分組 JSON值的性能。JSON路徑表達式中的範圍的擴充文法

    MySQL 8.0擴充了 JSON路徑表達式中範圍的文法。例如 SELECT JSON_EXTRACT(’[1,2,3,4,5]’,’$ [1至 3]’);結果為[2,3,4]。引入的新文法是 SQL标準文法的一個子集,在 SQL:2016,9.39 SQL / JSON路徑語言中描述:文法和語義。

    JSON表函數

    MySQL 8.0增加了 JSON表函數,它使得 JSON資料可以使用 SQL機制。JSON_TABLE() 建立 JSON資料的關系視圖。它将 JSON資料評估的結果映射到關系行和列。使用者可以使用 SQL查詢函數傳回的結果為正常關系表,例如 join,project和 aggregate。

    JSON聚合函數

    MySQL 8.0 添加了聚合函數 JSON_ARRAYAGG() 來生成 JSON 數組和 JSON_OBJECTAGG(來生成 JSON對象。這使得将多行中的 JSON文檔組合成 JSON數組或 JSON對象成為可能。

    JSON合并函數

    所述 JSON_MERGE_PATCH(函數實作的 JavaScript(和其他腳本語言)的由指定的語義 RFC7396,即,其由所述第二文檔的優先級删除重複。例如,JSON_MERGE(’{“a”:1,“b”:2}’,’{“a”:3,“c”:4}’);#傳回{“a”:3,“b”:2,“c”:4}。

    JSON改進排序

    MySQL 8.0通過使用可變長度的排序鍵為排序/分組 JSON提供了更好的性能。初步的基準測試顯示,根據使用情況,分類的改進度提高了 1.2至 18倍。

    JSON部分更新

    MySQL 8.0增加了對 JSON_REMOVE(JSON_SET(和 JSON_REPLACE(函數的部分更新支援 。如果隻更新 JSON文檔的某些部分,希望向處理程式提供有關更改内容的資訊,以便存儲引擎和複制無需編寫完整文檔。

  • 2.2 GIS(地理資訊系統)

    MySQL 8.0提供地理支援。這包括對空間參考系統(SRS)的中繼資料支援,以及 SRS感覺空間資料類型,空間索引和空間函數。總而言之,8.0 版本可以了解地球表面的經緯度資訊,而且可以在任意受支援的 5000個空間參照系中計算地球上任意兩點之間的距離。

    空間參照系 Spatial Reference System (SRS)

    ST_SPATIAL_REFERENCE_SYSTEMS存在于 information schema 視圖庫中,提供了可供使用的 SRS坐标系統的名稱。每個 SRS坐标系統都有一個 SRID編号。8.0版本支援 EPSG Geodetic Parameter Dataseset中的 5千多個坐标系統(包括立體模和 2D平面地球模型)

    SRID 地理資料類型 SRID aware spatial datatypes

    空間類的資料類型可以直接從 SRS坐标系統的定義中擷取,例如:使用 SRID 4326定義進行建表: CREATE TABLE t1 (g GEOMETRY SRID 4326);。SRID是适用于地理類型的資料類型。隻有同一 SRID的的資料才會被插入到行中。與目前 SRID資料類型的資料嘗試插入時,會報錯。未定義 SRID編号的表将可以接受所有 SRID編号的資料。8.0 版本增加了INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS視圖,可以顯示目前執行個體中所有地理資訊的資料行及其對應的 SRS名稱,編号,地理類型名稱。

    SRID 空間索引 SRID aware spatial indexes

    在空間資料類型上可以建立空間索引,建立空間索引的列必須非空,例如: CREATETABLE t1 (g GEOMETRY SRID 4326 NOT NULL, SPATIAL INDEX(g));

    建立空間索引的列必須具有 SRID資料辨別以用于優化器使用,如果将空間索引建在沒有 SRID資料辨別的列上,将輸出 waring資訊。

    SRID 空間函數 SRID aware spatial functions

    8.0 增加了諸如 ST_Distance()和 ST_Length()等用于判斷資料的參數是否在 SRS中,并計算其空間上的距離。到目前為止,ST_Distance 和其他的空間關系型函數諸如ST_Within,ST_Intersects,ST_Contains,ST_Crosses 都支援地理計算。其運算邏輯與行為參見SQL/MM Part 3 Spatial

  • 2.3 字元集

    MySQL 8.0使 UTF8MB4 成為預設字元集。UTF8MB4是網絡中主要的字元編碼,這一舉措将使絕大多數 MySQL使用者的生活更輕松。

    • 預設的字元集從 latin1變為 utf8mb4 ,預設排序校對規則從 latin1_swedish_ci變為utf8mb4_800_ci_ai。
    • utf8mb4同樣也成為 libmysql,服務端指令行工具,server層的預設編碼
    • utf8mb4同樣也成為 MySQL測試架構的預設編碼
    • 排序校對規則的權重與大小寫基于 Unicode委員會 16年公布的 Unicode 9.0.0版本。
    • 在以往的 MySQL版本中,latin1編碼中的 21種語言的特殊大小寫和排序校對規則被引入了 utf8mb4排序校對規則。例如:捷克語的排序校對規則變成了utf8mb4_cs_800_ai_ci。
    • utf8mb4的 utf8mb4_ja_0900_as_cs排序校驗規則對日語字元支援三級權重的排序。
    • 把 Unicode 9.0.0之前所有排序校驗規則中的不填補變成填補字元,此舉有利于提升字元串的一緻性和性能。例如把字元串末尾的空格按照其他字元對待。之前的排序校驗規則在處理這種情況時保留字元串原樣。
  • 2.4 資料類型 Datatypes

    二進制資料類型的 Bit-wise操作 Bit-wise operations on binary data types

    8.0版本擴充了 bit-wise操作(如 bit-wise AND等)的使用範圍,使得其在所有 BINARY資料類型上都适用。在此之前隻支援整型資料,若強行在二進制資料類型上使用 Bit-wise操作,将會隐式轉換為 64位的 BITINT類型,并可能丢失若幹位的資料。從 8.0版本之後,bit-wise操作可以在 BINARY和 BLOB類型上使用,且不用擔心精确度下降的問題。

    IPV6操作 IPV6 manipulation

    8.0版本通過支援 BINARY上的 Bit-wise操作提升了 IPv6資料的可操作性。5.6版本中引 入 了 支 持IPv6地 址 和16位 二 進 制 數 據 的 互 相 轉 換 的

    INET6_ATON()和 INET6_NTOA()函數。但是直到 8.0之前,由于上一段中的問題都無法講IPv6 轉換函數和 bit-wise 操作結合起來。由于 INET6_ATON()可以正确的傳回 128bit 的VARBINARY(16),如果想要将一個 IPv6 位址與網關位址進行比對,現在就可以使用 INET6_ATON(address)& INET6_ATON(network)操作。

    UUID 操作 UUID manipulations

    8.0 版本通過增加了三個新的函數(UUID_TO_BIN(), BIN_TO_UUID(), 和 IS_UUID())提升了 UUID 的可用性。 UUID_TO_BIN()可以将 UUID 格式的文本轉換成VARBINARY(16), BIN_TO_UUID()則與之相反, IS_UUID()用來校驗 UUID 的有效性。将UUID以 VARBINARY(16)的方式存儲後,就可以使用實索引了。UUID_TO_BIN()函 數可以原本轉換後的二進制值中時間相關位(UUID 生成時有間關聯)移到資料的開 頭,這樣對索引來說更加友好而且可以減少在 B樹中的随機插入,進而減少了耗時。

    【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1
【轉載】-MySQL+8.0資料庫新特性及測試1

繼續閱讀