Mysql8.0Mysql5.7Mysql5.6Mysql5.5特性對比

Mysql5.5 特性,相對于Mysql5.1

性能提升

默認InnoDB plugin引擎。具有提交、回滾和crash恢復功能、ACID兼容。

行級鎖(一致性的非鎖定讀 MVCC)。

表與索引存儲在表空間、表大小無限制。

支持dynamic(primary key緩存內存 避免主鍵查詢引起的IO )與compressed(支持數據及索引壓縮)行格式。

InnoDB plugin文件格式Barracuda、支持表壓縮、節約存儲、提供內存命中率、truncate table速度更快。

原InnoDB只有一個UndoSegment,最多支持1023的并發;現在有128個Segments,支持128K個并發(同樣,解決高并發帶來的事務回滾)。

Innodb_thread_concurrency默認為0,線程并發數無限制,可根據具體應用設置最佳值。

Innodb_io_capacity可以動態調整刷新臟頁的數量,改善大批量更新時刷新臟頁跟不上導致的性能下降問題。Default:200,跟硬盤的IOPS有關。

充分利用CPU多核處理能力innodb_read_io_threads閾值:1-64innodb_write_io_threads 閾值:1-64根據數據庫的讀寫比靈活設置,充分發揮多CPU、高性能存儲設備的性能,不支持動態加載 。

自適應刷新臟頁

熱數據存活更久

buffer pool多實例 :innodb_buffer_pool_instances 參數增加innodb_buffer_pool實例個數,大大降低buffer pool的mutex爭搶過熱情況。

Linux上實現異步IO

重新支持組提交

穩定性提升

支持半同步Replication。

增加Relay Log 自我修復功能。

Crash recovery。

引入紅-黑樹做插入排序的中間數據結構,時間復雜度大大降低,減少恢復時間。

Thread Pool 分組排隊 限流

Mysql5.6 特性,相比5.5

默認參數的改變

Back_log ?排隊隊列

支持全文索引

支持online DDL create,alter,drop

可以在建表時指定表空間位置

????????create table external (x int unsigned not null primary key)data directory = '/volumes/external1/data';

新增參數innodb_page_size可以設置page大小

整合了memcached API,可以使用API來直接訪問innodb表,并非SQL(減少SQL解析、查詢優化代價)

innodb只讀事務,不需要設置TRX_ID字段,

減少內部數據結構開銷,減少read view

僅僅非只讀事務依然需要TRX_ID

innodb改進點

innodb表空間在線遷移(TransportableTablespaces)

undo log可獨立出系統表空間

redo log最大可增長到512G

innodb后臺線程獨立出來

優化器改進

ICP

????????可以在引擎層直接過濾數據,避免二次回表

????????節省BP空間,提高查詢性能

BKA

????????全稱Batch Key Access:

????????SQL通過輔助索引要訪問表數據時候,將大量的隨機訪問放入緩存,交給MRR接口合并為順序訪問。

MRR

????????全稱Multi Range Read:

????????在BKA算法應用之后,通過MRR接口合并隨機訪問為順序訪問,再去檢索表數據。

????????變大量隨機為順序訪問。在通過輔助索引檢索大量數據時,性能提升明顯

????????磁頭無需來回尋道,page只需讀取一次,且較好利用了innodb線性預讀功能(每次預讀64個連續page)。

統計信息持久化,mysqld重啟后不丟失

explain語句支持insert,update,delete,replace語句,并且支持JSON格式

子查詢優化提升。

Mysql5.7 特性,相比5.5 5.6

?安全性

用戶表 mysql.user 的 plugin字段不允許為空, 默認值是 mysql_native_password,而不是 mysql_old_password,不再支持舊密碼格式;

增加密碼過期機制,過期后需要修改密碼,否則可能會被禁用,或者進入沙箱模式;

增加密碼過期機制,過期后需要修改密碼,否則可能會被禁用,或者進入沙箱模式;

提供了更為簡單SSL安全訪問配置,并且默認連接就采用SSL的加密方式。

靈活性

MySQL數據庫從5.7.8版本開始,也提供了對JSON的支持。

可以混合存儲結構化數據和非結構化數據,同時擁有關系型數據庫和非關系型數據庫的優點

能夠提供完整的事務支持

generated column是MySQL 5.7引入的新特性,所謂generated column,就是數據庫中這一列由其他列計算而得

易用性

在MySQL 5.7 之前,如果用戶輸入了錯誤的SQL語句,按下 ctrl+c ,雖然能夠”結束”SQL語句的運行,但是,也會退出當前會話,MySQL 5.7對這一違反直覺的地方進行了改進,不再退出會話。

MySQL 5.7可以explain一個正在運行的SQL,這對于DBA分析運行時間較長的語句將會非常有用。

sys schema是MySQL 5.7.7中引入的一個系統庫,包含了一系列視圖、函數和存儲過程, 該項目專注于MySQL的易用性。

例如:如何查看數據庫中的冗余索引;如何獲取未使用的索引;如何查看使用全表掃描的SQL語句。

可用性

在線設置 復制的過濾規則 不再需要重啟MySQL,只需要停止SQLthread,修改完成以后,啟動SQLthread。

在線修改buffer pool的大小。

Online DDL MySQL 5.7支持重命名索引和修改varchar的大小,這兩項操作在之前的版本中,都需要重建索引或表。

在線開啟GTID ,在之前的版本中,由于不支持在線開啟GTID,用戶如果希望將低版本的數據庫升級到支持GTID的數據庫版本,需要先關閉數據庫,再以GTID模式啟動,所以導致升級起來特別麻煩。

性能

臨時表的性能改進。

????????臨時表只在當前會話中可見

????????臨時表的生命周期是當前連接(MySQL宕機或重啟,則當前連接結束)

只讀事務性能改進。

MySQL 5.7通過 避免為只讀事務分配事務ID ,不為只讀事務分配回滾段,減少鎖競爭等多種方式,優化了只讀事務的開銷,提高了數據庫的整體性能。

加速連接處理。

在MySQL 5.7之前,變量的初始化操作(THD、VIO)都是在連接接收線程里面完成的,現在將這些工作下發給工作線程,以減少連接接收線程的工作量,提高連接的處理速度。這個優化對那些頻繁建立短連接的應用,將會非常有用。

復制性能的改進 (支持多線程復制(Multi-Threaded Slaves, 簡稱MTS)

MySQL的默認配置是庫級別的并行復制,為了充分發揮MySQL 5.7的并行復制的功能,我們需要將slave-parallel-type配置成LOGICAL_CLOCK。

支持多源復制(Multi-source replication)

嚴格性改變

默認啟用 STRICT_TRANS_TABLES 模式。

對 ONLY_FULL_GROUP_BY 模式實現了更復雜的特性支持,并且也被默認啟用。

其他被默認啟用的sql mode還有 NO_ENGINE_SUBSTITUTION。

默認參數的改變

默認binlog格式調整為ROW格式

默認binlog錯誤后的操作調整為ABORT_SERVER

在先前的選項下(binlog_error_action=IGNORE_ERROR),如果一個錯誤發生,導致無法寫入binlog,mysql-server會在錯誤日志中記錄錯誤并強制關閉binlog功能。這會使mysql-server在不記錄binlog的模式下繼續運行,導致從庫無法繼續獲取到主庫的binlog。

默認開啟mysql崩潰時的binlog安全。

默認調低slave_net_timeout。

安裝不同

mysql_install_db已經不再推薦使用了,建議改成mysqld --initialize 完成實例初始化。如果 datadir 指向的目標目錄下已經有數據文件,則會有[ERROR] Aborting;

在初始化時如果加上 --initial-insecure,則會創建空密碼的 root@localhost 賬號,否則會創建帶密碼的 root@localhost 賬號,密碼直接寫在 log-error 日志文件中;新用戶登入后需要立刻修改密碼,否則無法繼續后續的工作。

Mysql8.0 特性,相比5.7

新的系統字典表

整合了存儲有關數據庫對象信息的事務數據字典,所有的元數據都用InnoDB引擎進行存儲
安全和用戶管理

新增caching_sha2_password認證插件,并且是默認的身份認證插件。性能和安全方面加強
權限支持role
新增密碼歷史記錄功能,限制重復使用以前的密碼
?innodb 增強

新增INFORMATION_SCHEMA.INNODB_CACHED_INDEXES,查看每個索引緩存在InnoDB緩沖池中的索引頁數
InnoDB臨時表都將在共享臨時表空間ibtmp1中創建
對于SELECT ... FOR SHARE和SELECT ... FOR UPDATE語句,InnoDB支持NOWAIT和SKIP LOCKED
innodb_undo_tablespaces的最小值為2,并且不再允許將innodb_undo_tablespaces設置為0。 最小值2確保回滾段始終在撤消表空間中創建,而不是在系統表空間中創建
支持 ALTER TABLESPACE ... RENAME TO 語法
新增INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF視圖
新增了動態配置項 innodb_deadlock_detect,用來禁用死鎖檢查,因為在高并發系統中,當大量線程等待同一個鎖時,死鎖檢查會大大拖慢數據庫
支持使用innodb_directories選項在服務器脫機時將表空間文件移動或恢復到新位置
新增innodb_dedicated_server,讓InnoDB根據服務器上檢測到的內存量自動配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method。當innodb_dedicated_server啟用時,InnoDB根據服務器上檢測到的內存量自動配置以下選項:
innodb_dedicated_server:自動配置緩沖池大小
檢測到的服務器內存

緩沖池大小

<1G

128M(在innodb_buffer_pool_size 默認設)

<= 4G

檢測到的服務器存儲器* 0.5

> 4G

檢測到的服務器內存* 0.75

innodb_log_file_size:自動配置的日志文件大小
檢測到的服務器內存

日志文件的大小

<1GB

48M(在innodb_log_file_size 默認設置)

<= 4GB

128M

<= 8GB

512M

<= 16GB

1024M

> 16GB

2048M

innodb_flush_method:O_DIRECT_NO_FSYNC
MySQL 8.0更好支持文檔型數據庫和JSON

不可見索引,開始支持invisible index,在優化SQL的過程中可以設置索引為不可見,優化器不會利用不可見索引
支持降序索引,可以對索引定義 DESC,之前,索引可以被反序掃描,但影響性能,而降序索引就可以高效的完成
支持RANK(), LAG()、NTILE()等函數
正則表達式增強,提供了REGEXP_LIKE(),EGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR()等函數 ?
新增備份鎖,允許在線備份期間的DML,同時防止可能導致快照不一致的操作。 備份鎖由LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE語法支持
默認字符集由latin1變為utf8mb4
配置文件增強

MySQL 8.0版本支持在線修改全局參數持久化,通過加上PERSIST關鍵字,可以將調整持久化到新的配置文件中,再次重啟db還可以應用到最新的參數。對于加上 PERSIST 關鍵字修改參數命令,MySQL系統會生成一個包含json格式數據的 mysqld-auto.cnf 文件,比如執行:
set PERSIST??binlog_expire_logs_seconds = 604800 ; #內存和json文件都修改,重啟還生效
set GLOBAL??binlog_expire_logs_seconds = 604800 ; #只修改內存,重啟丟失
系統會在數據目錄下生成一個包含如下內容的 mysqld-auto.cnf 的文件:
{ "mysql_server": {" binlog_expire_logs_seconds ": "604800" } }
當 my.cnf 和 mysqld-auto.cnf 同時存在時,后者具有高優先級。
直方圖

MySQL 8.0 版本開始支持期待已久直方圖。優化器會利用column_statistics的數據,判斷字段的值的分布,得到更準確的執行計劃。
可以使用 ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS |DROP HISTOGRAM ON??clo_name] 來收集或者刪除直方圖信息
支持會話級別SET_VAR 動態調整部分參數,有利于提升語句性能。

select /*+ SET_VAR(sort_buffer_size = 16M) */ id??from test order id ;
insert??/*+ SET_VAR(foreign_key_checks=OFF) */ into test(name) values(1);
InnoDB性能提升

廢除buffer pool mutex, 將原來一個mutex拆分成多個,提高并發拆分LOCK_thd_list 和 LOCK_thd_remove 這兩個mutex,大約可提高線程鏈接效率5%。
行緩存

MySQL8.0的優化器可以估算將要讀取的行數,因此可以提供給存儲引擎一個合適大小的row buffer來存儲需要的數據。大批量的連續數據掃描的性能將受益于更大的record buffer。
改進掃描性能

改進InnoDB范圍查詢的性能,可提升全表查詢和范圍查詢 5-20%的性能。
成本模型

InnoDB緩沖區可以估算緩存區中的有多少表和索引,這可以讓優化器選擇訪問方式時知道數據是否可以存儲在內存中還是必須存儲到磁盤上。
?
---------------------?
原文:https://blog.csdn.net/liang_0609/article/details/77334959?
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537823.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring IOC實現原理

2019獨角獸企業重金招聘Python工程師標準>>> 1、BeanDefinition 對依賴翻轉模式中管理對象依賴關系的數據抽象 實現依賴翻轉功能的核心數據結構依賴翻轉功能都是圍繞對BeanDefinition 處理完成的有了這些BeanDefinition 基礎數據結構&#xff0c;容器才能發揮作用2、…

linux3.0 nand分區,OK6410(256MRAM2Gnandflash) Linux3.0.1內核移植

這里我主要移植的是增加yaffs2文件系統支持&#xff0c;修改和移植nand驅動。1.不知道為什么我這yaffs2的補丁打上了就沒發現過編譯錯誤&#xff0c;相當順利啊 呵呵。附上補丁地址-----------------------------------點擊打開鏈接修改補丁里patch‐ker.sh 文件。屏蔽下面這段…

authentication plugin caching_sha2

新電腦安裝最新版本的Mysql&#xff0c;用Navicat Premium連接&#xff0c;提示&#xff1a;authentication plugin caching_sha2 因為mysql8.0開始更新了驗證方式&#xff0c;Navicat Premium版本連接新MySQL的時候&#xff0c;還是上一個版本的認證方式。 不僅Navicat Prem…

openlayers入門開發系列之圖層控制

本篇的重點內容是利用openlayers實現地圖圖層控制功能&#xff0c;效果圖如下&#xff1a; 部分核心代碼如下&#xff1a;頁面引用ztree插件圖層管理器界面布局圖層管理器初始化jsLayerSwitcher類定義詳細的實現過程見&#xff1a;這里

linux df命令無反饋,Linux-df命令

df命令&#xff1a;說明&#xff1a;df命令用于顯示磁盤分區上的可使用的磁盤空間。默認顯示單位為KB。可以利用該命令來獲取硬盤被占用了多少空間&#xff0c;目前還剩下多少空間等信息參數&#xff1a;-a或--all&#xff1a;包含全部的文件系統&#xff1b;--block-size&…

windows版本的redis

redis官網是不提供windows版本的。 微軟的github上有windows版本下載&#xff0c;不會是redis的最新版本&#xff0c;是基于redis穩定版本制作的。 redis官網關于文檔版本的說明&#xff1a; Redis uses a standard practice for its versioning: major.minor.patchlevel. A…

一點一點看JDK源碼(五)java.util.ArrayList 后篇之removeIf與Predicate

一點一點看JDK源碼&#xff08;五&#xff09;java.util.ArrayList 后篇之removeIf與Predicate liuyuhang原創&#xff0c;未經允許禁止轉載 本文舉例使用的是JDK8的API 目錄&#xff1a;一點一點看JDK源碼&#xff08;〇&#xff09; Predicate為jdk1.8新增接口&#xff0c;由…

linux選擇運行的核數量,linux – 如何根據可用內核的數量選擇最大負載閾值?

負載在Linux上經常被誤解.在Linux上,它是運行或不間斷睡眠狀態中所有任務的度量.請注意,這是任務,而不是進程.線程包含在此值中.內核每五秒計算一次加載,并且是一個加權平均值.這是微小負載是平均5/60,五分鐘5/300和十五分之五.一般來說,作為一個純數字的負載在沒有參考點的情況…

使用nginx代理,怎么獲取真實的IP

1.在nginx.conf配置中加入配置信息 proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; 2.然后…

英語發音規則---S字母

英語發音規則---S字母 一、總結 一句話總結&#xff1a; 1、S 在音節開頭或清輔音前 /s/&#xff1f; sit /s?t/ vt.& vi.坐seat /si:t/ n.席位sell /sel/ vt.& vi.賣&#xff0c;售sold /s??ld/ v.賣&#xff0c;售sleep /sli:p/ vi.睡slow /sl??/ adj.慢的skate…

Mysql windows 安裝提示MSVCR120.dll文件丟失

電腦上已經按照了vc運行庫&#xff0c;但是報錯。 原因&#xff1a;文件被惡意程序破壞了 解決方法&#xff1a;到微軟官網下載 VC redist packages for x64。點擊跳轉 vcredist_x64.exe 如果是32位&#xff0c;則選vcredist_x32.exe 安裝完后會提示重啟電腦&#xff0c;不…

catcti監控linux主機,CentOS7搭建Prometheus 監控Linux主機

簡介prometheus可以拆分成多個節點進行指標收集。安裝prometheuswget -c https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gztar zxvf prometheus-2.23.0.linux-amd64.tar.gz -C /opt/cd /opt/ln -s prometheus-2.23.…

自己動手實現一個html2canvas

前言 昨天寫了新手引導動畫的4種實現方式, 里面用到了 html2canvas 于是就順便了解了一下實現思路. 大概就是 利用 svg 的 foreignObject 標簽, 嵌入 dom, 最后再利用 canvas 繪制 svg. 從而實現最終目的. 先讓大家看看效果 MDN示例 var canvas document.getElementById(canva…

Git fetch pull 詳解

1、簡單概括 先用一張圖來理一下git fetch和git pull的概念&#xff1a; 可以簡單的概括為&#xff1a; git fetch是將遠程主機的最新內容拉到本地&#xff0c;用戶在檢查了以后決定是否合并到工作本機分支中。 而git pull 則是將遠程主機的最新內容拉下來后直接合并&#x…

linux 安裝redis2.8.3,Linux及Windows安裝Redis(詳細)

標簽&#xff1a;Linux及Windows安裝Redis1.Windows安裝教程1.1下載https://github.com/MSOpenTech/redis/releases進入github里下載redis Windows版壓縮包將我們下載好的文件放進新建的一個Redis文件夾(我在C盤創建了一個redis的文件夾)1.2啟動服務打開我們Windows版的dos命令…

Git 少用 Pull 多用 Fetch 和 Merge

轉自&#xff1a;http://www.oschina.net/translate/git-fetch-and-merge --------------------------------------------------------------------------------- 本文有點長而且有點亂&#xff0c;但就像Mark Twain Blaise Pascal的笑話里說的那樣&#xff1a;我沒有時間讓…

IDEA生成可運行jar包

方式1: maven打包 maven 包中添加如下配置 <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptorRefs><descriptorRef&…

linux packet socket,linux Packet socket (1)簡單介紹

本文主要來自于linux自帶的man packet手冊&#xff1a;http://man7.org/linux/man-pages/man7/packet.7.html平時常常使用的INET套接字提供的是7層的抓包能力&#xff0c;抓上來的data直接就是tcp或者udp的payload&#xff0c;無需關心L3和L4的頭部信息。Packet套接字提供的是L…

TortoiseGit 修改密碼

當TortoiseGi默認設置了憑證助手為“管理器-所有windows用戶”&#xff0c;每次向遠程git推送時&#xff0c;都會去windows的憑證管理器里讀取值&#xff0c;然后推送。 如果密碼修改了&#xff0c;或者密碼不小心輸入錯了&#xff0c;每次提交都會報錯&#xff1a;HTTP Basic:…

linux系統常見操作,Linux系統基本操作

我們可以認為Linux是一套自由使用的類Unix操作系統&#xff0c;與Windows相比較而言&#xff0c;Linux具有安全、開源、穩定等特點。下面我來介紹Linux中一些的登錄登出基本操作。1. 啟動系統通常LILO是安裝在MBR上的&#xff0c;計算機啟動后&#xff0c;MBR上的程序被執行&am…