揭秘SQL Server 2014有哪些新特性(1)-內(nèi)存數(shù)據(jù)庫(kù)
簡(jiǎn)介
SQL Server 2014提供了眾多激動(dòng)人心的新功能,但其中我想最讓人期待的特性之一就要算內(nèi)存數(shù)據(jù)庫(kù)了。去年我再西雅圖參加SQL PASS Summit 2012的開(kāi)幕式時(shí),微軟就宣布了將在下一個(gè)SQL Server版本中附帶代號(hào)為Hekaton的內(nèi)存數(shù)據(jù)庫(kù)引擎?,F(xiàn)在隨著2014CTP1的到來(lái),我們終于可以一窺其面貌。
內(nèi)存數(shù)據(jù)庫(kù)
在傳統(tǒng)的數(shù)據(jù)庫(kù)表中,由于磁盤(pán)的物理結(jié)構(gòu)限制,表和索引的結(jié)構(gòu)為B-Tree,這就使得該類索引在大并發(fā)的OLTP環(huán)境中顯得非常乏力,雖然有很多辦法來(lái)解決這類問(wèn)題,比如說(shuō)樂(lè)觀并發(fā)控制,應(yīng)用程序緩存,分布式等。但成本依然會(huì)略高。而隨著這些年硬件的發(fā)展,現(xiàn)在服務(wù)器擁有幾百G內(nèi)存并不罕見(jiàn),此外由于NUMA架構(gòu)的成熟,也消除了多CPU訪問(wèn)內(nèi)存的瓶頸問(wèn)題,因此內(nèi)存數(shù)據(jù)庫(kù)得以出現(xiàn)。
內(nèi)存的學(xué)名叫做Random Access Memory(RAM),因此如其特性一樣,是隨機(jī)訪問(wèn)的,因此對(duì)于內(nèi)存,對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)也會(huì)是Hash-Index,而并發(fā)的隔離方式也對(duì)應(yīng)的變成了MVCC,因此內(nèi)存數(shù)據(jù)庫(kù)可以在同樣的硬件資源下,Handle更多的并發(fā)和請(qǐng)求,并且不會(huì)被鎖阻塞,而SQL Server 2014集成了這個(gè)強(qiáng)大的功能,并不像Oracle的TimesTen需要額外付費(fèi),因此結(jié)合SSD AS Buffer Pool特性,所產(chǎn)生的效果將會(huì)非常值得期待。
SQL Server內(nèi)存數(shù)據(jù)庫(kù)的表現(xiàn)形式
在SQL Server的Hekaton引擎由兩部分組成:內(nèi)存優(yōu)化表和本地編譯存儲(chǔ)過(guò)程。雖然Hekaton集成進(jìn)了關(guān)系數(shù)據(jù)庫(kù)引擎,但訪問(wèn)他們的方法對(duì)于客戶端是透明的,這也意味著從客戶端應(yīng)用程序的角度來(lái)看,并不會(huì)知道Hekaton引擎的存在。如圖1所示。
圖1.客戶端APP不會(huì)感知Hekaton引擎的存在
首先內(nèi)存優(yōu)化表完全不會(huì)再存在鎖的概念(雖然之前的版本有快照隔離這個(gè)樂(lè)觀并發(fā)控制的概念,但快照隔離仍然需要在修改數(shù)據(jù)的時(shí)候加鎖),此外內(nèi)存優(yōu)化表Hash-Index結(jié)構(gòu)使得隨機(jī)讀寫(xiě)的速度大大提高,另外內(nèi)存優(yōu)化表可以設(shè)置為非持久內(nèi)存優(yōu)化表,從而也就沒(méi)有了日志(適合于ETL中間結(jié)果操作,但存在數(shù)據(jù)丟失的危險(xiǎn))
下面我們來(lái)看創(chuàng)建一個(gè)內(nèi)存優(yōu)化表:
首先,內(nèi)存優(yōu)化表需要數(shù)據(jù)庫(kù)中存在一個(gè)特殊的文件組,以供存儲(chǔ)內(nèi)存優(yōu)化表的CheckPoint文件,與傳統(tǒng)的mdf或ldf文件不同的是,該文件組是一個(gè)目錄而不是一個(gè)文件,因?yàn)镃heckPoint文件只會(huì)附加,而不會(huì)修改,如圖2所示。
圖2.內(nèi)存優(yōu)化表所需的特殊文件組
我們?cè)賮?lái)看一下內(nèi)存優(yōu)化文件組的樣子,如圖3所示。
圖3.內(nèi)存優(yōu)化文件組
有了文件組之后,接下來(lái)我們創(chuàng)建一個(gè)內(nèi)存優(yōu)化表,如圖4所示。
圖4.創(chuàng)建內(nèi)存優(yōu)化表
目前SSMS還不支持UI界面創(chuàng)建內(nèi)存優(yōu)化表,因此只能通過(guò)T-SQL來(lái)創(chuàng)建內(nèi)存優(yōu)化表,如圖5所示。
圖5.使用代碼創(chuàng)建內(nèi)存優(yōu)化表
當(dāng)表創(chuàng)建好之后,就可以查詢數(shù)據(jù)了,值得注意的是,查詢內(nèi)存優(yōu)化表需要snapshot隔離等級(jí)或者h(yuǎn)int,這個(gè)隔離等級(jí)與快照隔離是不同的,如圖6所示。
圖6.查詢內(nèi)存優(yōu)化表需要加提示
此外,由創(chuàng)建表的語(yǔ)句可以看出,目前SQL Server 2014內(nèi)存優(yōu)化表的Hash Index只支持固定的Bucket大小,不支持動(dòng)態(tài)分配Bucket大小,因此這里需要注意。
與內(nèi)存數(shù)據(jù)庫(kù)不兼容的特性
目前來(lái)說(shuō),數(shù)據(jù)庫(kù)鏡像和復(fù)制是無(wú)法與內(nèi)存優(yōu)化表兼容的,但AlwaysOn,日志傳送,備份還原是完整支持。
性能測(cè)試
上面扯了一堆理論,大家可能都看郁悶了。下面我來(lái)做一個(gè)簡(jiǎn)單的性能測(cè)試,來(lái)比對(duì)使用內(nèi)存優(yōu)化表+本地編譯存儲(chǔ)過(guò)程與傳統(tǒng)的B-Tree表進(jìn)行對(duì)比,B-Tree表如圖7所示,內(nèi)存優(yōu)化表+本地編譯存儲(chǔ)過(guò)程如圖8所示。
圖7.傳統(tǒng)的B-Tree表
圖8.內(nèi)存優(yōu)化表+本地編譯存儲(chǔ)過(guò)程
因此不難看出,內(nèi)存優(yōu)化表+本地編譯存儲(chǔ)過(guò)程有接近幾十倍的性能提升。
- SQL語(yǔ)句實(shí)現(xiàn)查詢SQL Server內(nèi)存使用狀況
- 優(yōu)化SQL Server的內(nèi)存占用之執(zhí)行緩存
- SQL Server 數(shù)據(jù)頁(yè)緩沖區(qū)的內(nèi)存瓶頸分析
- SqlServer如何通過(guò)SQL語(yǔ)句獲取處理器(CPU)、內(nèi)存(Memory)、磁盤(pán)(Disk)以及操作系統(tǒng)相關(guān)信息
- SQL Server 2008 R2占用cpu、內(nèi)存越來(lái)越大的兩種解決方法
- 解決SQL Server虛擬內(nèi)存不足情況
- 淺談SQL Server 對(duì)于內(nèi)存的管理[圖文]
- SQL Server內(nèi)存遭遇操作系統(tǒng)進(jìn)程壓榨案例分析
- SQL Server在AlwaysOn中使用內(nèi)存表的“踩坑”記錄
- sql server學(xué)習(xí)基礎(chǔ)之內(nèi)存初探
相關(guān)文章
sql server性能調(diào)優(yōu) I/O開(kāi)銷的深入解析
這篇文章主要給大家介紹了關(guān)于sql server性能調(diào)優(yōu) I/O開(kāi)銷的相關(guān)資料,文中通過(guò)示例代碼以及圖片介紹的非常詳細(xì),對(duì)大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07sql 2000 無(wú)法執(zhí)行查詢,因?yàn)橐恍┪募鄙倩蛭醋?cè)"的解決方法
在SQL server 2000中打開(kāi)表查看數(shù)據(jù)的時(shí)候,提示說(shuō)無(wú)法執(zhí)行查詢,因?yàn)橐恍┪募鄙倩蛭醋?cè)用查詢分析器可以查看數(shù)據(jù),重裝了sql2000也沒(méi)有用,這里分享下解決方法2014-01-01SQL Server 2012 安裝與啟動(dòng)圖文教程
本文通過(guò)圖文并茂的形式給大家介紹了sqlserver2012的安裝步驟,本文分步驟給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2016-11-11SQL Server2012數(shù)據(jù)庫(kù)備份和還原的教程
這篇文章主要為大家詳細(xì)介紹了SQL Server2012數(shù)據(jù)庫(kù)備份和還原的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03SQL SERVER數(shù)據(jù)庫(kù)的作業(yè)的腳本及存儲(chǔ)過(guò)程
本站文章旨在為該問(wèn)題提供解決思路及關(guān)鍵性代碼,并不能完成應(yīng)該由網(wǎng)友自己完成的所有工作,請(qǐng)網(wǎng)友在仔細(xì)看文章并理解思路的基礎(chǔ)上舉一反三、靈活運(yùn)用2015-10-10