SQL Server 2014內(nèi)存數(shù)據(jù)庫(kù)深度解析
2015/04/13/技術(shù)控

一、內(nèi)存數(shù)據(jù)庫(kù)出現(xiàn)的背景

  在傳統(tǒng)的數(shù)據(jù)庫(kù)表中,由于磁盤(pán)的物理結(jié)構(gòu)限制,OLTP類(lèi)操作引起的隨機(jī)查找會(huì)給IO系統(tǒng)帶來(lái)高昂的開(kāi)銷(xiāo),因此傳統(tǒng)的表和索引的結(jié)構(gòu)設(shè)計(jì)為使用B-Tree而盡量減少隨機(jī)查找,但由于機(jī)械磁盤(pán)和數(shù)據(jù)庫(kù)鎖的存在,B-Tree結(jié)構(gòu)在處理大并發(fā)的OLTP環(huán)境時(shí)就顯得非常乏力,雖然有很多辦法來(lái)解決這類(lèi)問(wèn)題,比如說(shuō)樂(lè)觀并發(fā)控制、應(yīng)用程序緩存、分布式架構(gòu)等,但采用上述方案會(huì)導(dǎo)致修改引用程序,這不僅成本高且風(fēng)險(xiǎn)極大。而隨著這些年硬件的發(fā)展,現(xiàn)在服務(wù)器擁有幾百G內(nèi)存并不罕見(jiàn),此外由于硬件NUMA架構(gòu)的成熟,也消除了多CPU訪(fǎng)問(wèn)內(nèi)存的瓶頸問(wèn)題,因此具備了使用新方式來(lái)處理更大并發(fā)和數(shù)據(jù)量的條件,這種新的方式就是使用內(nèi)存計(jì)算技術(shù)。

  內(nèi)存的學(xué)名叫做Random Access Memory(RAM),因此如其特性一樣,是隨機(jī)訪(fǎng)問(wèn)的,因此對(duì)于內(nèi)存,隨機(jī)查找不會(huì)引入額外開(kāi)銷(xiāo),使用Hash-Index這樣的數(shù)據(jù)結(jié)構(gòu)更符合內(nèi)存的特性,而對(duì)應(yīng)并發(fā)的隔離方式也對(duì)應(yīng)的變成了MVCC(多版本并發(fā)控制),從而消除了鎖引入的性能瓶頸。因此內(nèi)存數(shù)據(jù)庫(kù)可以在同樣的硬件資源下,處理更多的并發(fā)和請(qǐng)求,并且不會(huì)被鎖阻塞,在SQL Server 2014中,集成了這個(gè)強(qiáng)大的內(nèi)存數(shù)據(jù)引擎,如果結(jié)合SSD AS Buffer Pool特性,所產(chǎn)生的效果將會(huì)非常值得期待。

  二、SQL Server內(nèi)存數(shù)據(jù)庫(kù)的組成和表現(xiàn)形式

  在SQL Server 2014的內(nèi)存數(shù)據(jù)庫(kù)引擎由兩部分組成:內(nèi)存優(yōu)化表和本地編譯存儲(chǔ)過(guò)程。雖然內(nèi)存數(shù)據(jù)庫(kù)集成進(jìn)入關(guān)系數(shù)據(jù)庫(kù)引擎,但訪(fǎng)問(wèn)內(nèi)存數(shù)據(jù)庫(kù)的方法對(duì)于客戶(hù)端來(lái)說(shuō)是透明的,這也意味著從客戶(hù)端應(yīng)用程序的角度來(lái)看,并不會(huì)知道內(nèi)存數(shù)據(jù)庫(kù)引擎的存在。如圖1所示。

內(nèi)存數(shù)據(jù)庫(kù)出現(xiàn)的背景
▲圖1.客戶(hù)端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è)置為使用非持久化日志,既數(shù)據(jù)既不寫(xiě)日志,也不會(huì)CheckPoint到磁盤(pán),從而極大的降低了IO壓力(適合于ETL中間結(jié)果操作,或者其他允許丟失數(shù)據(jù)的場(chǎng)景),這樣一來(lái)也可以消除寫(xiě)日志引入的性能瓶頸。

  下面來(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ì)將新增的數(shù)據(jù)附加在到新的CheckPoint文件,而不會(huì)修改現(xiàn)有的CheckPoint文件,如圖2所示。

內(nèi)存數(shù)據(jù)庫(kù)出現(xiàn)的背景
▲圖2.內(nèi)存優(yōu)化表所需的特殊文件組

  下面再來(lái)看一下內(nèi)存優(yōu)化文件組在磁盤(pán)系統(tǒng)的存儲(chǔ)形式,如圖3所示。

內(nèi)存數(shù)據(jù)庫(kù)出現(xiàn)的背景
▲圖3.內(nèi)存優(yōu)化文件組

  創(chuàng)建完內(nèi)存優(yōu)化文件組之后,接下來(lái)再創(chuàng)建一個(gè)內(nèi)存優(yōu)化表,如圖4所示。

內(nèi)存數(shù)據(jù)庫(kù)出現(xiàn)的背景
▲圖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所示。

內(nèi)存數(shù)據(jù)庫(kù)出現(xiàn)的背景
▲圖5.使用代碼創(chuàng)建內(nèi)存優(yōu)化表

  這里創(chuàng)建一個(gè)簡(jiǎn)單的內(nèi)存優(yōu)化表,這里上述設(shè)置Hash Bucket為1024,目前SQL Server 2014還不支持動(dòng)態(tài)的Hash Bucket,因此必須手動(dòng)設(shè)置該值。表中設(shè)置了Memory_Optimized為ON意味著表是內(nèi)存優(yōu)化表,而Durability設(shè)置為Schema_And_Data則意味著內(nèi)存優(yōu)化表中數(shù)據(jù)也是持久化,這意味著除非啟用了SQL Server 2014的延遲寫(xiě)特性,數(shù)據(jù)不會(huì)由于異常情況導(dǎo)致丟失。

  當(dāng)表創(chuàng)建好之后,就可以查詢(xún)數(shù)據(jù)了,值得注意的是,查詢(xún)內(nèi)存優(yōu)化表需要snapshot隔離等級(jí)或者h(yuǎn)int,這個(gè)隔離等級(jí)與快照隔離是不同的,如圖6所示。

內(nèi)存數(shù)據(jù)庫(kù)出現(xiàn)的背景
▲圖6.查詢(xún)內(nèi)存優(yōu)化表需要加提示


上一篇:沒(méi)有了

冀公網(wǎng)安備 13030202001525號(hào)

高等少妇无码毛片,久久久91精品人妻无码夜色,re6热在线视频精品66,一区2区黄色网站