Mysql8.0Mysql5.7Mysql5.6Mysql5.5特性对比
Mysql5.5 特性,相對于Mysql5.1
性能提升
默認(rèn)InnoDB plugin引擎。具有提交、回滾和crash恢復(fù)功能、ACID兼容。
行級鎖(一致性的非鎖定讀 MVCC)。
表與索引存儲在表空間、表大小無限制。
支持dynamic(primary key緩存內(nèi)存 避免主鍵查詢引起的IO )與compressed(支持?jǐn)?shù)據(jù)及索引壓縮)行格式。
InnoDB plugin文件格式Barracuda、支持表壓縮、節(jié)約存儲、提供內(nèi)存命中率、truncate table速度更快。
原InnoDB只有一個UndoSegment,最多支持1023的并發(fā);現(xiàn)在有128個Segments,支持128K個并發(fā)(同樣,解決高并發(fā)帶來的事務(wù)回滾)。
Innodb_thread_concurrency默認(rèn)為0,線程并發(fā)數(shù)無限制,可根據(jù)具體應(yīng)用設(shè)置最佳值。
Innodb_io_capacity可以動態(tài)調(diào)整刷新臟頁的數(shù)量,改善大批量更新時刷新臟頁跟不上導(dǎo)致的性能下降問題。Default:200,跟硬盤的IOPS有關(guān)。
充分利用CPU多核處理能力innodb_read_io_threads閾值:1-64innodb_write_io_threads 閾值:1-64根據(jù)數(shù)據(jù)庫的讀寫比靈活設(shè)置,充分發(fā)揮多CPU、高性能存儲設(shè)備的性能,不支持動態(tài)加載 。
自適應(yīng)刷新臟頁
熱數(shù)據(jù)存活更久
buffer pool多實(shí)例 :innodb_buffer_pool_instances 參數(shù)增加innodb_buffer_pool實(shí)例個數(shù),大大降低buffer pool的mutex爭搶過熱情況。
Linux上實(shí)現(xiàn)異步IO
重新支持組提交
穩(wěn)定性提升
支持半同步Replication。
增加Relay Log 自我修復(fù)功能。
Crash recovery。
引入紅-黑樹做插入排序的中間數(shù)據(jù)結(jié)構(gòu),時間復(fù)雜度大大降低,減少恢復(fù)時間。
Thread Pool 分組排隊(duì) 限流
Mysql5.6 特性,相比5.5
默認(rèn)參數(shù)的改變
Back_log ?排隊(duì)隊(duì)列
支持全文索引
支持online DDL create,alter,drop
可以在建表時指定表空間位置
????????create table external (x int unsigned not null primary key)data directory = '/volumes/external1/data';
新增參數(shù)innodb_page_size可以設(shè)置page大小
整合了memcached API,可以使用API來直接訪問innodb表,并非SQL(減少SQL解析、查詢優(yōu)化代價)
innodb只讀事務(wù),不需要設(shè)置TRX_ID字段,
減少內(nèi)部數(shù)據(jù)結(jié)構(gòu)開銷,減少read view
僅僅非只讀事務(wù)依然需要TRX_ID
innodb改進(jìn)點(diǎn)
innodb表空間在線遷移(TransportableTablespaces)
undo log可獨(dú)立出系統(tǒng)表空間
redo log最大可增長到512G
innodb后臺線程獨(dú)立出來
優(yōu)化器改進(jìn)
ICP
????????可以在引擎層直接過濾數(shù)據(jù),避免二次回表
????????節(jié)省BP空間,提高查詢性能
BKA
????????全稱Batch Key Access:
????????SQL通過輔助索引要訪問表數(shù)據(jù)時候,將大量的隨機(jī)訪問放入緩存,交給MRR接口合并為順序訪問。
MRR
????????全稱Multi Range Read:
????????在BKA算法應(yīng)用之后,通過MRR接口合并隨機(jī)訪問為順序訪問,再去檢索表數(shù)據(jù)。
????????變大量隨機(jī)為順序訪問。在通過輔助索引檢索大量數(shù)據(jù)時,性能提升明顯
????????磁頭無需來回尋道,page只需讀取一次,且較好利用了innodb線性預(yù)讀功能(每次預(yù)讀64個連續(xù)page)。
統(tǒng)計(jì)信息持久化,mysqld重啟后不丟失
explain語句支持insert,update,delete,replace語句,并且支持JSON格式
子查詢優(yōu)化提升。
Mysql5.7 特性,相比5.5 5.6
?安全性
用戶表 mysql.user 的 plugin字段不允許為空, 默認(rèn)值是 mysql_native_password,而不是 mysql_old_password,不再支持舊密碼格式;
增加密碼過期機(jī)制,過期后需要修改密碼,否則可能會被禁用,或者進(jìn)入沙箱模式;
增加密碼過期機(jī)制,過期后需要修改密碼,否則可能會被禁用,或者進(jìn)入沙箱模式;
提供了更為簡單SSL安全訪問配置,并且默認(rèn)連接就采用SSL的加密方式。
靈活性
MySQL數(shù)據(jù)庫從5.7.8版本開始,也提供了對JSON的支持。
可以混合存儲結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),同時擁有關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn)
能夠提供完整的事務(wù)支持
generated column是MySQL 5.7引入的新特性,所謂generated column,就是數(shù)據(jù)庫中這一列由其他列計(jì)算而得
易用性
在MySQL 5.7 之前,如果用戶輸入了錯誤的SQL語句,按下 ctrl+c ,雖然能夠”結(jié)束”SQL語句的運(yùn)行,但是,也會退出當(dāng)前會話,MySQL 5.7對這一違反直覺的地方進(jìn)行了改進(jìn),不再退出會話。
MySQL 5.7可以explain一個正在運(yùn)行的SQL,這對于DBA分析運(yùn)行時間較長的語句將會非常有用。
sys schema是MySQL 5.7.7中引入的一個系統(tǒng)庫,包含了一系列視圖、函數(shù)和存儲過程, 該項(xiàng)目專注于MySQL的易用性。
例如:如何查看數(shù)據(jù)庫中的冗余索引;如何獲取未使用的索引;如何查看使用全表掃描的SQL語句。
可用性
在線設(shè)置 復(fù)制的過濾規(guī)則 不再需要重啟MySQL,只需要停止SQLthread,修改完成以后,啟動SQLthread。
在線修改buffer pool的大小。
Online DDL MySQL 5.7支持重命名索引和修改varchar的大小,這兩項(xiàng)操作在之前的版本中,都需要重建索引或表。
在線開啟GTID ,在之前的版本中,由于不支持在線開啟GTID,用戶如果希望將低版本的數(shù)據(jù)庫升級到支持GTID的數(shù)據(jù)庫版本,需要先關(guān)閉數(shù)據(jù)庫,再以GTID模式啟動,所以導(dǎo)致升級起來特別麻煩。
性能
臨時表的性能改進(jìn)。
????????臨時表只在當(dāng)前會話中可見
????????臨時表的生命周期是當(dāng)前連接(MySQL宕機(jī)或重啟,則當(dāng)前連接結(jié)束)
只讀事務(wù)性能改進(jìn)。
MySQL 5.7通過 避免為只讀事務(wù)分配事務(wù)ID ,不為只讀事務(wù)分配回滾段,減少鎖競爭等多種方式,優(yōu)化了只讀事務(wù)的開銷,提高了數(shù)據(jù)庫的整體性能。
加速連接處理。
在MySQL 5.7之前,變量的初始化操作(THD、VIO)都是在連接接收線程里面完成的,現(xiàn)在將這些工作下發(fā)給工作線程,以減少連接接收線程的工作量,提高連接的處理速度。這個優(yōu)化對那些頻繁建立短連接的應(yīng)用,將會非常有用。
復(fù)制性能的改進(jìn) (支持多線程復(fù)制(Multi-Threaded Slaves, 簡稱MTS)
MySQL的默認(rèn)配置是庫級別的并行復(fù)制,為了充分發(fā)揮MySQL 5.7的并行復(fù)制的功能,我們需要將slave-parallel-type配置成LOGICAL_CLOCK。
支持多源復(fù)制(Multi-source replication)
嚴(yán)格性改變
默認(rèn)啟用 STRICT_TRANS_TABLES 模式。
對 ONLY_FULL_GROUP_BY 模式實(shí)現(xiàn)了更復(fù)雜的特性支持,并且也被默認(rèn)啟用。
其他被默認(rèn)啟用的sql mode還有 NO_ENGINE_SUBSTITUTION。
默認(rèn)參數(shù)的改變
默認(rèn)binlog格式調(diào)整為ROW格式
默認(rèn)binlog錯誤后的操作調(diào)整為ABORT_SERVER
在先前的選項(xiàng)下(binlog_error_action=IGNORE_ERROR),如果一個錯誤發(fā)生,導(dǎo)致無法寫入binlog,mysql-server會在錯誤日志中記錄錯誤并強(qiáng)制關(guān)閉binlog功能。這會使mysql-server在不記錄binlog的模式下繼續(xù)運(yùn)行,導(dǎo)致從庫無法繼續(xù)獲取到主庫的binlog。
默認(rèn)開啟mysql崩潰時的binlog安全。
默認(rèn)調(diào)低slave_net_timeout。
安裝不同
mysql_install_db已經(jīng)不再推薦使用了,建議改成mysqld --initialize 完成實(shí)例初始化。如果 datadir 指向的目標(biāo)目錄下已經(jīng)有數(shù)據(jù)文件,則會有[ERROR] Aborting;
在初始化時如果加上 --initial-insecure,則會創(chuàng)建空密碼的 root@localhost 賬號,否則會創(chuàng)建帶密碼的 root@localhost 賬號,密碼直接寫在 log-error 日志文件中;新用戶登入后需要立刻修改密碼,否則無法繼續(xù)后續(xù)的工作。
Mysql8.0 特性,相比5.7
新的系統(tǒng)字典表
整合了存儲有關(guān)數(shù)據(jù)庫對象信息的事務(wù)數(shù)據(jù)字典,所有的元數(shù)據(jù)都用InnoDB引擎進(jìn)行存儲
安全和用戶管理
新增caching_sha2_password認(rèn)證插件,并且是默認(rèn)的身份認(rèn)證插件。性能和安全方面加強(qiáng)
權(quán)限支持role
新增密碼歷史記錄功能,限制重復(fù)使用以前的密碼
?innodb 增強(qiáng)
新增INFORMATION_SCHEMA.INNODB_CACHED_INDEXES,查看每個索引緩存在InnoDB緩沖池中的索引頁數(shù)
InnoDB臨時表都將在共享臨時表空間ibtmp1中創(chuàng)建
對于SELECT ... FOR SHARE和SELECT ... FOR UPDATE語句,InnoDB支持NOWAIT和SKIP LOCKED
innodb_undo_tablespaces的最小值為2,并且不再允許將innodb_undo_tablespaces設(shè)置為0。 最小值2確保回滾段始終在撤消表空間中創(chuàng)建,而不是在系統(tǒng)表空間中創(chuàng)建
支持 ALTER TABLESPACE ... RENAME TO 語法
新增INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF視圖
新增了動態(tài)配置項(xiàng) innodb_deadlock_detect,用來禁用死鎖檢查,因?yàn)樵诟卟l(fā)系統(tǒng)中,當(dāng)大量線程等待同一個鎖時,死鎖檢查會大大拖慢數(shù)據(jù)庫
支持使用innodb_directories選項(xiàng)在服務(wù)器脫機(jī)時將表空間文件移動或恢復(fù)到新位置
新增innodb_dedicated_server,讓InnoDB根據(jù)服務(wù)器上檢測到的內(nèi)存量自動配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method。當(dāng)innodb_dedicated_server啟用時,InnoDB根據(jù)服務(wù)器上檢測到的內(nèi)存量自動配置以下選項(xiàng):
innodb_dedicated_server:自動配置緩沖池大小
檢測到的服務(wù)器內(nèi)存
緩沖池大小
<1G
128M(在innodb_buffer_pool_size 默認(rèn)設(shè))
<= 4G
檢測到的服務(wù)器存儲器* 0.5
> 4G
檢測到的服務(wù)器內(nèi)存* 0.75
innodb_log_file_size:自動配置的日志文件大小
檢測到的服務(wù)器內(nèi)存
日志文件的大小
<1GB
48M(在innodb_log_file_size 默認(rèn)設(shè)置)
<= 4GB
128M
<= 8GB
512M
<= 16GB
1024M
> 16GB
2048M
innodb_flush_method:O_DIRECT_NO_FSYNC
MySQL 8.0更好支持文檔型數(shù)據(jù)庫和JSON
不可見索引,開始支持invisible index,在優(yōu)化SQL的過程中可以設(shè)置索引為不可見,優(yōu)化器不會利用不可見索引
支持降序索引,可以對索引定義 DESC,之前,索引可以被反序掃描,但影響性能,而降序索引就可以高效的完成
支持RANK(), LAG()、NTILE()等函數(shù)
正則表達(dá)式增強(qiáng),提供了REGEXP_LIKE(),EGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR()等函數(shù) ?
新增備份鎖,允許在線備份期間的DML,同時防止可能導(dǎo)致快照不一致的操作。 備份鎖由LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE語法支持
默認(rèn)字符集由latin1變?yōu)閡tf8mb4
配置文件增強(qiáng)
MySQL 8.0版本支持在線修改全局參數(shù)持久化,通過加上PERSIST關(guān)鍵字,可以將調(diào)整持久化到新的配置文件中,再次重啟db還可以應(yīng)用到最新的參數(shù)。對于加上 PERSIST 關(guān)鍵字修改參數(shù)命令,MySQL系統(tǒng)會生成一個包含json格式數(shù)據(jù)的 mysqld-auto.cnf 文件,比如執(zhí)行:
set PERSIST??binlog_expire_logs_seconds = 604800 ; #內(nèi)存和json文件都修改,重啟還生效
set GLOBAL??binlog_expire_logs_seconds = 604800 ; #只修改內(nèi)存,重啟丟失
系統(tǒng)會在數(shù)據(jù)目錄下生成一個包含如下內(nèi)容的 mysqld-auto.cnf 的文件:
{ "mysql_server": {" binlog_expire_logs_seconds ": "604800" } }
當(dāng) my.cnf 和 mysqld-auto.cnf 同時存在時,后者具有高優(yōu)先級。
直方圖
MySQL 8.0 版本開始支持期待已久直方圖。優(yōu)化器會利用column_statistics的數(shù)據(jù),判斷字段的值的分布,得到更準(zhǔn)確的執(zhí)行計(jì)劃。
可以使用 ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS |DROP HISTOGRAM ON??clo_name] 來收集或者刪除直方圖信息
支持會話級別SET_VAR 動態(tài)調(diào)整部分參數(shù),有利于提升語句性能。
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拆分成多個,提高并發(fā)拆分LOCK_thd_list 和 LOCK_thd_remove 這兩個mutex,大約可提高線程鏈接效率5%。
行緩存
MySQL8.0的優(yōu)化器可以估算將要讀取的行數(shù),因此可以提供給存儲引擎一個合適大小的row buffer來存儲需要的數(shù)據(jù)。大批量的連續(xù)數(shù)據(jù)掃描的性能將受益于更大的record buffer。
改進(jìn)掃描性能
改進(jìn)InnoDB范圍查詢的性能,可提升全表查詢和范圍查詢 5-20%的性能。
成本模型
InnoDB緩沖區(qū)可以估算緩存區(qū)中的有多少表和索引,這可以讓優(yōu)化器選擇訪問方式時知道數(shù)據(jù)是否可以存儲在內(nèi)存中還是必須存儲到磁盤上。
?
---------------------?
原文:https://blog.csdn.net/liang_0609/article/details/77334959?
?
總結(jié)
以上是生活随笔為你收集整理的Mysql8.0Mysql5.7Mysql5.6Mysql5.5特性对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解模板方法设计模式
- 下一篇: MySQL在DOS指令里面的使用以及增删