成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[242239]]

引言

時隔三個月,MySQL 8.0.12 有什么新內容?

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

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

如果有想要看全文的人,可以直接去看官方的發布內容: 

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

filesort 算法的緩存設置優化 

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

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

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

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

rewrite插件支持DML語句 

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

SELECT ORDER BY與GROUP BY語法變更 

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

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

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

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

測試表數據

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

With rollup語法:

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

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

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

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

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

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

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

Group Replication繼續優化 

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

InnoDB Alter Table優化 

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

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

alter table 的 inplace 算法,實質上解決的,是主庫 DDL 不會導致讀寫鎖表,但對于主從結構,當 SQL 傳輸到從庫執行的時候,從庫依然會有相當大的延遲出現。因此實際上,對于延遲敏感性業務,依然是前面提到那倆工具的天下。

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

目前支持的操作是:

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

  • 不能與其他不支持INSTANT算法的alter子語句合并在一起。
  • 只能添加在表列的末尾。
  • 不能用于innodb的壓縮表(ROW_FORMAT=COMPRESSED)。
  • 目標表不能包含全文索引。
  • 目標表不能是臨時表。
  • 目標表不能是數據字典表。
  • 這種添加方式下,不會計算行長度是否合適,這個計算會在發生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  

當一條drop 語句里面包含了關聯的父子表,則會直接刪除,不在額外要求父子表順序正確 

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

MySQL 外鍵關聯刪表:

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

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

報錯 3730

在更早的版本(5.7)中:

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

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

如果執行 drop table father,child:

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

必須寫成:

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

但是,在 8.0.12 開始:

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

 

ADMIN成為關鍵字 

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

是誰關閉了數據庫? 

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

MySQL 關閉數據庫:

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

 

那些或許很好玩的bug 

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

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

2015-07-17 13:27:16

MySQL 5.7

2015-07-17 13:43:09

MySQL 5.7

2015-07-17 13:45:12

MySQL 5.7

2019-12-25 14:03:42

JavaScript開發

2019-12-25 09:00:00

JavascriptWeb前端

2015-07-17 13:59:33

MySQL 5.7

2010-10-08 09:54:30

IBM AIX 7

2011-04-19 18:42:54

Windows Emb特性

2021-06-23 09:46:16

Python 3.10結構模式管理器

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復制特性測試

2017-09-16 15:55:54

ChromeJavaScriptAndroid

2011-07-29 09:43:52

Java SE 7

2021-05-19 15:06:44

MySQL數據庫命令

2009-08-28 08:46:15

Windows 7防火墻

2011-05-20 09:43:23

JDK7

2011-03-24 09:22:36

Java 7JDBC4

2011-05-20 09:35:22

JDK7
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 看羞羞视频 | 免费黄色大片 | 久久精品这里精品 | 罗宾被扒开腿做同人网站 | 日本成人在线免费视频 | 成人区精品一区二区婷婷 | 久久免费看 | 国产精品视频一区二区三区不卡 | 日韩在线电影 | 91看片网址| 中文字幕日韩欧美 | 亚洲精品自在在线观看 | 成人在线亚洲 | 精品一区二区三区视频在线观看 | 日本亚洲欧美 | 日韩图区 | 亚洲精品久久久一区二区三区 | 狠狠干影院 | 91麻豆精品国产91久久久更新资源速度超快 | 国产高清视频在线观看 | 日本综合在线观看 | 免费在线a视频 | 国产视频一区二区 | 激情欧美一区二区三区 | 午夜影院网站 | 亚洲欧美中文字幕在线观看 | 成人在线观看免费 | 欧美一区二区视频 | 日本精品免费 | 中文字幕乱码视频32 | 国产精品日韩在线观看 | 粉色午夜视频 | 欧美激情一区二区三区 | 九九精品在线 | 日韩av一区二区在线观看 | 久久99蜜桃综合影院免费观看 | 精品一区精品二区 | 国产精品美女久久久久久免费 | 美国十次成人欧美色导视频 | 欧美精品中文字幕久久二区 | 91av入口|