偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

連跳7個版本之后,MySQL 8.0.12有什么新特性?

數(shù)據(jù)庫 MySQL
時隔三個月,MySQL 8.0.12 有什么新內(nèi)容?今年4月份,MySQL突然直接從8.0.5跳過多個版本號到8.0.11,直接宣布8.0.11 GA,告訴大家說,這個版本已經(jīng)可以到線上用了。到今年7月底,MySQL 8.0.12版本發(fā)布,我從官方的release note里面,選取出來我認為的重點內(nèi)容,在這里展開聊一下。

[[242239]]

引言

時隔三個月,MySQL 8.0.12 有什么新內(nèi)容?

今年4月份,MySQL突然直接從8.0.5跳過多個版本號到8.0.11,直接宣布8.0.11 GA,告訴大家說,這個版本已經(jīng)可以到線上用了。

到今年7月底,MySQL 8.0.12版本發(fā)布,我從官方的release note里面,選取出來我認為的重點內(nèi)容,在這里展開聊一下。 

如果有想要看全文的人,可以直接去看官方的發(fā)布內(nèi)容: 

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html 

filesort 算法的緩存設(shè)置優(yōu)化 

眾所周知,MySQL 在處理 Order by 的時候,如果沒有索引可以用,會采用一個名為 file sort 的算法排序,但和這個算法有一個關(guān)聯(lián)的參數(shù), sort_buffer_size,估計很多人都知道這個參數(shù),這個參數(shù)在之前有個算是比較蛋疼的問題:如果 sql 會話中,執(zhí)行 sql 需要進行file sort,那么 mysql 就會給當(dāng)前回話直接分配 sort_buffer_size大小的內(nèi)存出來。

這個乍一看沒啥問題,但需要注意的是,在 MySQL 中,沒辦法像 Oracle 那樣統(tǒng)一管理 PGA(用戶線程/進程消耗的總內(nèi)存大?。?,遇到那種恰好會話數(shù)量比較多,filesort 比較多(哪怕SQL語句單拎出來性能沒啥問題),sql 查詢量比較大的情況,就非常容易讓 MySQL 的內(nèi)存使用量超標被操作系統(tǒng) OOM 了。

或者如果你有習(xí)慣設(shè)置 swap 空間,那么巨慢的 swap 會拖死整個機器,只能揮淚重啟,類似這種事故,在互聯(lián)網(wǎng)業(yè)務(wù)中,并不鮮見,也間接導(dǎo)致了很多人非常厭惡 file sort,哪怕多加幾條索引,也要全覆蓋式地處理掉所有 file sort。

但現(xiàn)在,這個內(nèi)存分配機制總算改變了,從 8.0.12 開始,這個內(nèi)存分配變成了按需分配。也就是說,對于排序量非常小的 sql(比如某個人的微博列表)這種,觸發(fā)了file sort,就再也不會直接分配 sort_buffer_size(默認256KB)的大小了,而是分配很小的內(nèi)存出來用,某種程度上可以避免了很多突發(fā)性流量導(dǎo)致的事故。 

rewrite插件支持DML語句 

MySQL 從 5.7 開始,新增了一個 plugin 的接口,rewrite,用于在服務(wù)器接受 SQL 語句后,執(zhí)行前修改 SQL 語句,最初只是支持 select,從 8.0.12 開始,支持了 insert,update,replace 這些 DML 語句。 

SELECT ORDER BY與GROUP BY語法變更 

8.0.12,8.0.13(未發(fā)布版本,但文檔中已經(jīng)更新內(nèi)容)開始,MySQL 的 Order by 支持 GROUPING函數(shù) 以及 WITH ROLLUP語法,然后,在8.0.13開始,廢棄掉group gy 中的desc,asc關(guān)鍵字,對于 WITH ROLLUP 得到的結(jié)果集合的排序,需要使用order by 語法。

對于搞數(shù)據(jù)聚合比較多的人來說,WITH ROLLUP 與 GROUPING 應(yīng)該不算陌生,這個語法變更,相當(dāng)于是把 order by 的語法補全完整,更兼容 SQL 標準語法了,如果遷移程序到 8.0,需要注意這種不兼容的變更。

順帶一提,官方文檔此處寫的是小寫的 grouping,但實際上指的是 GROUPING函數(shù) 而非普通聚合函數(shù)(普通聚合函數(shù)一直是支持的)。參考代碼:

https://github.com/mysql/mysql-server/commit/d401baf535a69d6f2a945229acecbfd5863c0a48

測試表數(shù)據(jù)

連跳7個版本之后,MySQL 8.0.12有什么新特性?

With rollup語法:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

8.0.12 之前(測試版本為 5.7.22),如果想要排序,會出現(xiàn)語法錯誤:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

需要寫為(排序關(guān)鍵字寫到 group by 里面):

連跳7個版本之后,MySQL 8.0.12有什么新特性?

8.0.12 開始可以執(zhí)行并排序(為了顯著效果增加了desc 關(guān)鍵字):

連跳7個版本之后,MySQL 8.0.12有什么新特性? 

Group Replication繼續(xù)優(yōu)化 

新增了參數(shù) group_replication_exit_state_action 來控制,如果一個實例發(fā)現(xiàn)自己屬于被拋棄(網(wǎng)絡(luò)分區(qū)發(fā)生后的少數(shù)派)的實例的情況下,這個值默認為ABORT_SERVER,也就是說,少數(shù)派會自己關(guān)閉,這個值也可以設(shè)置為 READ_ONLY,這個設(shè)置下,會以只讀(設(shè)置super read only)的形式加入集群,并設(shè)置狀態(tài)為 ERROR。 

InnoDB Alter Table優(yōu)化 

這個可以說是一個源遠流長的故事,簡單來說,就是騰訊游戲部門的 DBA 們,為了數(shù)據(jù)庫快速加列(游戲運營先天的快速變更問題),寫了補丁出來用(非常早年的時候),后來這個補丁逐漸被各個第三方發(fā)行版接受,現(xiàn)在終于進入官方發(fā)布版,讓更多的人受益。

MySQL 的 DDL一直是非常出名的問題,社區(qū)與官方都在這個問題上投入了很大的精力,從最早 percona 的 toolkit 里面帶的 pt-osc(這個基于觸發(fā)器實現(xiàn)的在線改表,由于 MySQL 早年單表只支持一個觸發(fā)器,為了避免無法使用 pt-osc,有了早年一直流傳到現(xiàn)在的 MySQL重大守則之一:不許使用觸發(fā)器),到 github 發(fā)布的 gh-ost(基于 row 格式 binlog),官方也一直在搞 alter 相關(guān)的在線修改優(yōu)化(比如加索引等操作,參考鏈接 https://dev.mysql.com/doc/refman/8.0/en/innodb-create-index-overview.html)。

alter table 的 inplace 算法,實質(zhì)上解決的,是主庫 DDL 不會導(dǎo)致讀寫鎖表,但對于主從結(jié)構(gòu),當(dāng) SQL 傳輸?shù)綇膸靾?zhí)行的時候,從庫依然會有相當(dāng)大的延遲出現(xiàn)。因此實際上,對于延遲敏感性業(yè)務(wù),依然是前面提到那倆工具的天下。

8.0.12的優(yōu)化是,新增了一個算法 ALGORITHM=INSTANT,專門處理只需要修改元數(shù)據(jù)就可以完成的變更,這個就可以相對比較方便地直接使用了,不需要擔(dān)心從庫延遲。

目前支持的操作是:

    1.添加新列。已知限制條件如下:

  • 不能與其他不支持INSTANT算法的alter子語句合并在一起。
  • 只能添加在表列的末尾。
  • 不能用于innodb的壓縮表(ROW_FORMAT=COMPRESSED)。
  • 目標表不能包含全文索引。
  • 目標表不能是臨時表。
  • 目標表不能是數(shù)據(jù)字典表。
  • 這種添加方式下,不會計算行長度是否合適,這個計算會在發(fā)生insert或者update的時候處理。

    2. 添加或者刪除虛擬列。

    3. 添加或者去掉列的默認值。

    4. 修改 enum,set 列類型的定義(題外話,有多少人知道并在用這個?)

    5. 修改索引類型。

    6. 重命名表名稱。 

binlog支持管道輸入 

對于大個頭 binlog 的處理,由于 MySQL mysqlbinlog 程序之前是不支持管道的,只能先解壓,之后再處理。從 8.0.12 開始,mysqlbinlog支持管道輸入了,簡單來說,就是下面這么一回事:

 

  1. gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot -p  

當(dāng)一條drop 語句里面包含了關(guān)聯(lián)的父子表,則會直接刪除,不在額外要求父子表順序正確 

如題,對于每次刪表都需要關(guān)閉外鍵檢查的人來說,無疑是個好消息。

MySQL 外鍵關(guān)聯(lián)刪表:

8.0,版本中,普通情況下,刪除父表:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

報錯 3730

在更早的版本(5.7)中:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

可以看出錯誤信息,在 8.0 開始更加詳細了。

如果執(zhí)行 drop table father,child:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

必須寫成:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

但是,在 8.0.12 開始:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

 

ADMIN成為關(guān)鍵字 

以后 SQL 字段又少了一個常用的詞哎=_=。 

是誰關(guān)閉了數(shù)據(jù)庫? 

MySQL 終于會在日志里面記錄,是誰發(fā)的 shutdown 命令了。

MySQL 關(guān)閉數(shù)據(jù)庫:

連跳7個版本之后,MySQL 8.0.12有什么新特性?

 

那些或許很好玩的bug 

下面是從 bugfix 記錄中,找的一些好玩被修復(fù)的內(nèi)容,注意——由于每個人笑點不同,如果只關(guān)注新特性修改的話,下面的內(nèi)容不看就不看了。

  1. 早前宣布的新事務(wù)模型 VATS,由于其需要追蹤所有等待其他事務(wù)的事務(wù)數(shù)量,為了避免死鎖,目前被修改為生成出來的近似值。
  2. gtid_purge(記錄那些gtid事務(wù)已經(jīng)被purge掉)的值,在Group Replication 運行期間,應(yīng)該是不能被修改的,然而現(xiàn)在發(fā)現(xiàn)它是可以修改的,因此改為在 group replication 運行時候不能修改。
  3. 當(dāng) expire_logs_days 與 binlog_expire_logs_seconds 參數(shù)都設(shè)置的情況下,如果設(shè)置了 skip-log-bin ,現(xiàn)在開始這個信息會被寫入錯誤日志。
  4. 當(dāng)有超大事務(wù)執(zhí)行(binlog 量超過 binlog_cache_size)的時候,在刷出到臨時文件期間,如果遇到磁盤滿導(dǎo)致的刷出失敗,事務(wù)回滾,這個信息沒有被記錄在錯誤日志里面,并且,事務(wù)回滾后,緩存也不會被清空。
  5. SUPER 權(quán)限的用戶,沒辦法修改 keyring_operations 參數(shù)。
  6. It was possible to drop the Performance Schema. 哈哈哈哈哈。
  7. slave_rows_search_algorithms 指定了 row 格式復(fù)制時候,行匹配的的方式,指定為 INDEX_SCAN 的話,如果表上有索引,則會使用索引操作。但如果主從庫的同一張表,使用了不同的列作為主鍵,并且從庫表上還有唯一索引的情況下,bug 會導(dǎo)致使用 table scan(全表掃描)而非索引。
  8. 對于 MyISAM 來說,特定的 insert 與 delete 語句順序,會導(dǎo)致表數(shù)據(jù)損壞。 
責(zé)任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2015-07-17 13:43:09

MySQL 5.7

2015-07-17 13:45:12

MySQL 5.7

2015-07-17 13:27:16

MySQL 5.7

2019-12-25 14:03:42

JavaScript開發(fā)

2019-12-25 09:00:00

JavascriptWeb前端

2015-07-17 13:59:33

MySQL 5.7

2011-04-19 18:42:54

Windows Emb特性

2010-10-08 09:54:30

IBM AIX 7

2021-06-23 09:46:16

Python 3.10結(jié)構(gòu)模式管理器

2013-02-25 14:02:07

RubyWeb

2021-03-30 14:50:41

前端TypeScript 命令

2011-07-29 09:31:32

JDK 7

2009-01-16 10:01:57

MySQL復(fù)制特性測試

2017-09-16 15:55:54

ChromeJavaScriptAndroid

2011-07-29 09:43:52

Java SE 7

2021-05-19 15:06:44

MySQL數(shù)據(jù)庫命令

2011-05-20 09:35:22

JDK7

2010-06-04 18:19:24

Windows Emb微軟嵌入式Windows Emb

2009-12-18 13:43:07

Ruby 1.9版本

2024-01-15 00:30:04

Python 3語言版本
點贊
收藏

51CTO技術(shù)棧公眾號