欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 5.7新特性介紹

 更新時(shí)間:2016年06月22日 09:26:10   作者:Joker_Ye  
這篇文章主要為大家詳細(xì)介紹了MySQL 5.7新特性,了解一下MySQL 5.7的部分新功能,需要的朋友可以參考下

1. 介紹
身處MySQL這個(gè)圈子,能夠切身地感受到大家對(duì)MySQL 5.7的期待和熱情,似乎每個(gè)人都迫不及待的想要了解、學(xué)習(xí)和使用MySQL 5.7。那么,我們不禁要問(wèn),MySQL 5.7到底做了哪些改進(jìn),引入了哪些新功能,性能又提升了多少,能夠讓大家翹首以盼,甚至歡呼雀躍呢?

下面就跟隨我來(lái)一起了解一下MySQL 5.7的部分新功能。想要在一篇文章中介紹完MySQL 5.7的所有改進(jìn),幾乎是不可能的。所以,我會(huì)選擇一些有特別意思的、特別有用的功能進(jìn)行介紹。希望通過(guò)這篇文章,能夠激發(fā)大家對(duì)MySQL 5.7的學(xué)習(xí)興趣,甚至能夠吸引大家將自己的業(yè)務(wù)遷移到MySQL 5.7上。
 MySQL 5.7在諸多方面都進(jìn)行了大幅的改進(jìn),本文將從安全性(見(jiàn)2.1節(jié))、靈活性(見(jiàn)2.2節(jié))、易用性(見(jiàn)2.3節(jié))、可用性(見(jiàn)2.4節(jié))和性能(見(jiàn)2.5節(jié))等幾個(gè)方面進(jìn)行介紹。最后,在第3節(jié)對(duì)本文進(jìn)行了簡(jiǎn)單的總結(jié)。

2. MySQL 5.7的新特性
這一節(jié)中,將依次介紹MySQL 5.7的各種新特性。由于MySQL 5.7改進(jìn)較多,因此,本文將這些新特性進(jìn)行了簡(jiǎn)單的分類,分為安全性、靈活性、易用性、可用性和性能。接下來(lái),將從各個(gè)分類依次進(jìn)行介紹。 

2.1 安全性
 安全性是數(shù)據(jù)庫(kù)永恒的話題,在MySQL 5.7中,有不少安全性相關(guān)的改進(jìn)。包括:
 •MySQL數(shù)據(jù)庫(kù)初始化完成以后,會(huì)產(chǎn)生一個(gè) root@localhost 用戶,從MySQL 5.7開(kāi)始,root用戶的密碼不再是空,而是隨機(jī)產(chǎn)生一個(gè)密碼,這也導(dǎo)致了用戶安裝5.7時(shí)發(fā)現(xiàn)的與5.6版本比較大的一個(gè)不同點(diǎn)
•MySQL官方已經(jīng)刪除了test數(shù)據(jù)庫(kù),默認(rèn)安裝完后是沒(méi)有test數(shù)據(jù)庫(kù)的,就算用戶創(chuàng)建了test庫(kù),也可以對(duì)test庫(kù)進(jìn)行權(quán)限控制了
•MySQL 5.7版本提供了更為簡(jiǎn)單SSL安全訪問(wèn)配置,并且默認(rèn)連接就采用SSL的加密方式
•可以為用戶設(shè)置密碼過(guò)期策略,一定時(shí)間以后,強(qiáng)制用戶修改密碼
   ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; 
•可以”鎖”住用戶,用以暫時(shí)禁用某個(gè)用戶
   ALTER USER  'jeffrey'@'localhost' ACCOUNT LOCK;
   ALTER USER l
'jeffrey'@'localhost'  ACCOUNT UNLOCK; 

2.2 靈活性
在這一節(jié),我將介紹MySQL 5.7的兩個(gè)全新的功能,即JSON和generate column。充分使用這兩個(gè)功能,能夠極大地提高數(shù)據(jù)存儲(chǔ)的靈活性。
 2.2.1 JSON
 隨著非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)需求的持續(xù)增長(zhǎng),各種非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生(如MongoDB)。從最新的數(shù)據(jù)庫(kù)使用 排行榜 來(lái)看,MongoDB已經(jīng)超過(guò)了PostgreSQL,其火熱程度可見(jiàn)一斑。
 各大關(guān)系型數(shù)據(jù)庫(kù)也不甘示弱,紛紛提供對(duì)JSON的支持,以應(yīng)對(duì)非結(jié)構(gòu)化數(shù)據(jù)庫(kù)的挑戰(zhàn)。MySQL數(shù)據(jù)庫(kù)從5.7.8版本開(kāi)始,也提供了對(duì)JSON的支持。其使用方式如下:

 CREATE TABLE t1 (jdoc JSON);
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');

MySQL對(duì)支持JSON的做法是,在server層提供了一堆便于操作JSON的函數(shù),至于存儲(chǔ),就是簡(jiǎn)單地將JSON編碼成BLOB,然后交由存儲(chǔ)引擎層進(jìn)行處理,也就是說(shuō),MySQL 5.7的JSON支持與存儲(chǔ)引擎沒(méi)有關(guān)系,MyISAM 存儲(chǔ)引擎也支持JSON 格式。
MySQL支持JSON以后,總是避免不了拿來(lái)與MongoDB進(jìn)行一些比較。但是,MySQL對(duì)JSON的支持,至少有兩點(diǎn)能夠完勝M(fèi)ongoDB:
1.可以混合存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),同時(shí)擁有關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
2.能夠提供完整的事務(wù)支持

2.2.2 generate column
generated column是MySQL 5.7引入的新特性,所謂generated column,就是數(shù)據(jù)庫(kù)中這一列由其他列計(jì)算而得。
 例如,知道直角三角形的兩條直角邊,要求直角三角形的面積。很明顯,面積可以通過(guò)兩條直角邊計(jì)算而得,那么,這時(shí)候就可以在數(shù)據(jù)庫(kù)中只存放直角邊,面積使用generated column,如下所示:

 CREATE TABLE triangle (sidea DOUBLE, sideb DOUBLE, area DOUBLE AS (sidea * sideb / 2));
insert into triangle(sidea, sideb) values(3, 4);
select * from triangle;
+-------+-------+------+
| sidea | sideb | area |
+-------+-------+------+
|   3 |   4 |  6 |
+-------+-------+------+

 在MySQL 5.7中,支持兩種generated column,即virtual generated column和stored generated column,前者只將generated column保存在數(shù)據(jù)字典中(表的元數(shù)據(jù)),并不會(huì)將這一列數(shù)據(jù)持久化到磁盤上;后者會(huì)將generated column持久化到磁盤上,而不是每次讀取的時(shí)候計(jì)算所得。很明顯,后者存放了可以通過(guò)已有數(shù)據(jù)計(jì)算而得的數(shù)據(jù),需要更多的磁盤空間,與virtual column相比并沒(méi)有優(yōu)勢(shì)。因此,在不指定generated column的類型時(shí),默認(rèn)是virtual column,如下所示:

 show create table triangle\G
*************************** 1. row ***************************
    Table: triangle
Create Table: CREATE TABLE `triangle` (
 `sidea` double DEFAULT NULL,
 `sideb` double DEFAULT NULL,
 `area` double GENERATED ALWAYS AS (((`sidea` * `sideb`) / 2)) VIRTUAL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

如果讀者覺(jué)得generate column提供的功能,也可以在用戶代碼里面實(shí)現(xiàn),并沒(méi)有什么了不起的地方,那么,或許還有一個(gè)功能能夠吸引挑剔的你,那就是為generate column創(chuàng)建索引。在這個(gè)例子中,如果我們需要根據(jù)面積創(chuàng)建索引以加快查詢,就無(wú)法在用戶代碼里面實(shí)現(xiàn),使用generate column就變得非常簡(jiǎn)單:
alter table triangle add index ix_area(area);

2.3 易用性 
易用性是數(shù)據(jù)庫(kù)永恒的話題,MySQL也在持續(xù)不斷地提高數(shù)據(jù)庫(kù)的易用性。在MySQL 5.7中,有很多易用性方面的改進(jìn),小到一個(gè)客戶端快捷鍵 ctrl+c 的使用,大到專門提供一個(gè)系統(tǒng)庫(kù)(sys)來(lái)幫助DBA和開(kāi)發(fā)人員使用數(shù)據(jù)庫(kù)。這一節(jié)將重點(diǎn)介紹MySQL 5.7引入的sys庫(kù)。
 •在linux下,我們經(jīng)常使用 ctrl+c 來(lái)終止一個(gè)命令的運(yùn)行,在MySQL 5.7 之前,如果用戶輸入了錯(cuò)誤的SQL語(yǔ)句,按下 ctrl+c ,雖然能夠”結(jié)束”SQL語(yǔ)句的運(yùn)行,但是,也會(huì)退出當(dāng)前會(huì)話,MySQL 5.7對(duì)這一違反直覺(jué)的地方進(jìn)行了改進(jìn),不再退出會(huì)話。
•MySQL 5.7可以explain一個(gè)正在運(yùn)行的SQL,這對(duì)于DBA分析運(yùn)行時(shí)間較長(zhǎng)的語(yǔ)句將會(huì)非常有用
•在MySQL 5.7中,performance_schema提供了更多監(jiān)控信息,包括內(nèi)存使用,MDL鎖,存儲(chǔ)過(guò)程等
2.3.1 sys schema
sys schema是MySQL 5.7.7中引入的一個(gè)系統(tǒng)庫(kù),包含了一系列視圖、函數(shù)和存儲(chǔ)過(guò)程, 該項(xiàng)目專注于MySQL的易用性。例如,我們可以通過(guò)sys schema快速的知道,哪些語(yǔ)句使用了臨時(shí)表,哪個(gè)用戶請(qǐng)求了最多的io,哪個(gè)線程占用了最多的內(nèi)存,哪些索引是無(wú)用索引等
sys schema中包含了大量的視圖,那么,這些視圖的信息來(lái)自哪里呢?視圖中的信息均來(lái)自performance schema統(tǒng)計(jì)信息。 這里 有一個(gè)很好的比喻:
    For Linux users I like to compare performance_schema to /proc, and SYS to vmstat.
也就是說(shuō),performance schema提供了信息源,但是,沒(méi)有很好的將這些信息組織成有用的信息,從而沒(méi)有很好的發(fā)揮它們的作用。而sys schema使用performance schema信息,通過(guò)視圖的方式給出解決實(shí)際問(wèn)題的答案。
例如,下面這些問(wèn)題,在MySQL 5.7之前,需要借助外部工具才能知道,在MySQL 5.7中,直接查詢sys庫(kù)下相應(yīng)的表就能得到答案:
 •如何查看數(shù)據(jù)庫(kù)中的冗余索引select * from sys.schema_redundant_indexes;
 •如何獲取未使用的索引select * from schema_unused_indexes;
 •如何查看使用全表掃描的SQL語(yǔ)句select * from statements_with_full_table_scans 

2.4 可用性
MySQL 5.7在可用性方面的改進(jìn)也帶給人不少驚喜。這里介紹特別有用的幾項(xiàng)改進(jìn),包括:
 •在線設(shè)置 復(fù)制的過(guò)濾規(guī)則 不再需要重啟MySQL,只需要停止SQL thread,修改完成以后,啟動(dòng)SQL thread
 •在線修改buffer pool的大小
 MySQL 5.7為了支持online buffer pool resize,引入chunk的概念,每個(gè)chunk默認(rèn)是128M,當(dāng)我們?cè)诰€修改buffer pool的時(shí)候,以chunk為單位進(jìn)行增長(zhǎng)或收縮。這個(gè)參數(shù)的引入,對(duì)innodb_buffer_pool_size的配置有了一定的影響。innodb要求buffer pool size是innodb_buffer_pool_chunk_size* innodb_buffer_pool_instances的倍數(shù),如果不是,將會(huì)適當(dāng)調(diào)大innodb_buffer_pool_size,以滿足要求,因此,可能會(huì)出現(xiàn)buffer pool的實(shí)際分配比配置文件中指定的size要大的情況
 •Online DDL MySQL 5.7支持重命名索引和修改varchar的大小,這兩項(xiàng)操作在之前的版本中,都需要重建索引或表
   ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
 •在線開(kāi)啟GTID ,在之前的版本中,由于不支持在線開(kāi)啟GTID,用戶如果希望將低版本的數(shù)據(jù)庫(kù)升級(jí)到支持GTID的數(shù)據(jù)庫(kù)版本,需要先關(guān)閉數(shù)據(jù)庫(kù),再以GTID模式啟動(dòng),所以導(dǎo)致升級(jí)起來(lái)特別麻煩。MySQL 5.7以后,這個(gè)問(wèn)題不復(fù)存在

2.5 性能
 性能一直都是用戶最關(guān)心的問(wèn)題,在MySQL每次新版本中,都會(huì)有不少性能提升。在MySQL 5.7中,性能相關(guān)的改進(jìn)非常多,這里僅介紹部分改進(jìn),包括臨時(shí)表相關(guān)的性能改進(jìn)、只讀事務(wù)的性能優(yōu)化、連接建立速度的優(yōu)化和復(fù)制性能的改進(jìn)。
2.5.1 臨時(shí)表的性能改進(jìn)
 MySQL 5.7 為了提高臨時(shí)表相關(guān)的性能,對(duì)臨時(shí)表相關(guān)的部分進(jìn)行了大幅修改,包括引入新的臨時(shí)表空間;對(duì)于臨時(shí)表的DDL,不持久化相關(guān)表定義;對(duì)于臨時(shí)表的DML,不寫redo,關(guān)閉change buffer等。所有臨時(shí)表的改動(dòng),都基于以下兩個(gè)事實(shí) :
1.臨時(shí)表只在當(dāng)前會(huì)話中可見(jiàn)
2.臨時(shí)表的生命周期是當(dāng)前連接(MySQL宕機(jī)或重啟,則當(dāng)前連接結(jié)束)
 也就是說(shuō),對(duì)于臨時(shí)表的操作,不需要其他數(shù)據(jù)一樣嚴(yán)格地進(jìn)行一致性保證。通過(guò)不持久化元信息,避免寫redo等方式,減少臨時(shí)表操作的IO,以提高臨時(shí)表操作的性能。
2.5.2 只讀事務(wù)性能改進(jìn)
 眾所周知,在傳統(tǒng)的OLTP應(yīng)用中,讀操作遠(yuǎn)多于寫操作,并且,讀操作不會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改,如果是非鎖定讀,讀操作也不需要進(jìn)行加鎖。因此,對(duì)只讀事務(wù)進(jìn)行優(yōu)化,是一個(gè)不錯(cuò)的選擇。
 在MySQL 5.6中,已經(jīng)對(duì)只讀事務(wù)進(jìn)行了許多優(yōu)化。例如,將MySQL內(nèi)部實(shí)現(xiàn)中的事務(wù)鏈表分為只讀事務(wù)鏈表和普通事務(wù)鏈表,這樣在創(chuàng)建ReadView的時(shí)候,需要遍歷事務(wù)鏈表長(zhǎng)度就會(huì)小很多。
 在MySQL 5.7中,首先假設(shè)一個(gè)事務(wù)是一個(gè)只讀事務(wù),只有在該事務(wù)發(fā)起了修改操作時(shí),才會(huì)將其轉(zhuǎn)換為一個(gè)普通事務(wù)。MySQL 5.7通過(guò) 避免為只讀事務(wù)分配事務(wù)ID ,不為只讀事務(wù)分配回滾段,減少鎖競(jìng)爭(zhēng)等多種方式,優(yōu)化了只讀事務(wù)的開(kāi)銷,提高了數(shù)據(jù)庫(kù)的整體性能。
 2.5.3 加速連接處理
 在MySQL 5.7之前,變量的初始化操作(THD、VIO)都是在連接接收線程里面完成的,現(xiàn)在將這些工作下發(fā)給工作線程,以減少連接接收線程的工作量,提高連接的處理速度。這個(gè)優(yōu)化對(duì)那些頻繁建立短連接的應(yīng)用,將會(huì)非常有用。
 2.5.4 復(fù)制性能的改進(jìn)
 
MySQL的復(fù)制延遲是一直被詬病的問(wèn)題之一,欣喜的是,MySQL 5.7版本已經(jīng)支持”真正”的并行復(fù)制功能。MySQL 5.7并行復(fù)制的思想簡(jiǎn)單易懂,簡(jiǎn)而言之,就是”一個(gè)組提交的事務(wù)都是可以并行回放的”,因?yàn)檫@些事務(wù)都已進(jìn)入到事務(wù)的prepare階段,則說(shuō)明事務(wù)之間沒(méi)有任何沖突(否則就不可能提交)。MySQL 5.7以后,復(fù)制延遲問(wèn)題永不存在。
 這里需要注意的是,為了兼容MySQL 5.6基于庫(kù)的并行復(fù)制,5.7引入了新的變量slave-parallel-type,該變量可以配置成DATABASE(默認(rèn))或LOGICAL_CLOCK??梢钥吹?,MySQL的默認(rèn)配置是庫(kù)級(jí)別的并行復(fù)制,為了充分發(fā)揮MySQL 5.7的并行復(fù)制的功能,我們需要將slave-parallel-type配置成LOGICAL_CLOCK。
 3. 總結(jié)
 1.從本文中可以看到,MySQL 5.7確實(shí)帶來(lái)了很多激動(dòng)人心的功能,我們甚至不需要進(jìn)行任何修改,只需要將業(yè)務(wù)遷移到MySQL 5.7上,就能帶來(lái)不少性能的提升。
 2.從本文中還可以看到,雖然MySQL 5.7在易用性上有了很多的改進(jìn),但是,也有不少需要注意的地方, 例如:1)在設(shè)置innodb的buffer pool時(shí),需要注意chunk的存在,合理設(shè)置buffer pool instance否則可能出現(xiàn)實(shí)際分配的buffer pool size比預(yù)想的大很多的情況;2)多線程復(fù)制需要注意將slave_parallel_type設(shè)置為L(zhǎng)OGICAL_CLOCK,否則,MySQL使用的是庫(kù)級(jí)別的并行復(fù)制,對(duì)于大多數(shù)應(yīng)用,并沒(méi)有什么效果。那么, 怎樣才是使用MySQL 5.7的正確姿勢(shì)呢?網(wǎng)易蜂巢是一個(gè)不錯(cuò)的選擇 ,網(wǎng)易蜂巢的RDS(Relational Database Service,簡(jiǎn)稱RDS)項(xiàng)目是一種即開(kāi)即用、穩(wěn)定可靠、可彈性伸縮的在線數(shù)據(jù)庫(kù)服務(wù)。使用RDS提供的服務(wù),就是使用已經(jīng)調(diào)優(yōu)過(guò)的數(shù)據(jù)庫(kù),用戶不需要對(duì)數(shù)據(jù)庫(kù)參數(shù)進(jìn)行任何修改,就能夠獲得一個(gè)性能極好的數(shù)據(jù)庫(kù)服務(wù)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論