目錄
SQL Server 2014 新特性——內(nèi)存數(shù)據(jù)庫... 1
簡介:... 1
設計目的和原因:... 1
專業(yè)名詞... 1
In-Memory OLTP不同之處... 2
內(nèi)存優(yōu)化表... 2
內(nèi)存優(yōu)化表的索引... 2
并發(fā)能力的提升... 3
和競爭對手相比幾點... 3
Getting Start. 3
內(nèi)存數(shù)據(jù)庫的使用... 3
存儲... 5
TSQL支持... 7
簡介:內(nèi)存數(shù)據(jù)庫(In-Memory OLTP),代號Hekaton
設計目的和原因:1.將請求的負荷放到內(nèi)存中
2.減少數(shù)據(jù)延遲
3.來適應特殊的負荷類型
如果數(shù)據(jù)都是在內(nèi)存中,那么當前的數(shù)據(jù)庫優(yōu)化器產(chǎn)生的執(zhí)行計劃是沒什么意義的,因為現(xiàn)在的優(yōu)化器默認數(shù)據(jù)在磁盤中而不是在內(nèi)存中,所以不從磁盤中讀取數(shù)據(jù),優(yōu)化器應該使用新的執(zhí)行計劃和新的開銷算法。
In-Memory OLTP 減少了鎖等待問題,使用基于行版本來優(yōu)化同步的控制,改善了寫入等待的延遲,寫入日志變少,寫入次數(shù)變少。
專業(yè)名詞Memory-optimized tables(索引優(yōu)化表):引入了新的結(jié)構,被加入到in-memory oltp的新表
Disk-Based tables(磁盤表):基礎磁盤存放的表,就是我們一直使用的表。
Natively complied(原生編譯)存儲過程:用于索引優(yōu)化表的訪問,也可以使用tsql訪問,通過原生編譯存儲過程訪問速度會更快一點
嵌套事務:可以在優(yōu)化表中使用,也可以在磁盤表中使用
interop:可以讓tsql訪問索引優(yōu)化表
In-Memory OLTP不同之處
通過圖可以發(fā)現(xiàn),原生編譯存儲過程只能使用在內(nèi)存優(yōu)化表上,而query interop用戶tsql訪問內(nèi)存優(yōu)化表的橋梁
內(nèi)存優(yōu)化表1.內(nèi)存優(yōu)化表和硬盤表不同,不需要把數(shù)據(jù)從硬盤上讀取放入cache中,
2.checkpoint只是用戶恢復的目的
3.和硬盤表一樣,使用事務日志,當服務重啟后,使用checkpoint的文件和日志,對內(nèi)存優(yōu)化表進行重建
4.內(nèi)存優(yōu)化表可以通過選項來設置表的持久性:SCHEMA_ONLY只保存表的結(jié)構,不保存數(shù)據(jù),當服務重啟后數(shù)據(jù)就會丟失
內(nèi)存優(yōu)化表的索引1.內(nèi)存優(yōu)化表中的索引不再以btree方式存儲,而是以hash 表的方式
2.內(nèi)存優(yōu)化表必須有一個索引,并沒有堆表的概念
3.索引,不會被保存在文件或者事務日志,并會根據(jù)內(nèi)存優(yōu)化表的修改自動維護,在所有重啟時,根據(jù)表的文件和日志重建索引
并發(fā)能力的提升1.以行版本的方式存儲表數(shù)據(jù),修改數(shù)據(jù)時會請求鎖,但是在內(nèi)存優(yōu)化表中不會
2.雖然沒有寫入鎖,但是還是有等待比如log write,比硬盤表高效,寫入的日志少,速度快
和競爭對手相比幾點1.內(nèi)存表和硬盤表通過interop集成,有利于過渡
2.原生編譯存儲過程,效率高
3.hash索引,提高內(nèi)存訪問效率
4.沒有page,不會出現(xiàn)page latch的等待
5.通過行版本實現(xiàn),不需要lock和latch
Getting Start內(nèi)存數(shù)據(jù)庫的使用創(chuàng)建數(shù)據(jù)庫CREATE DATABASE HKDB
ON
PRIMARY(NAME = [HKDB_data],
FILENAME = 'Q:/data/HKDB_data.mdf', size=500MB),
FILEGROUP [SampleDB_mod_fg] CONTAINS MEMORY_OPTIMIZED_DATA
(NAME = [HKDB_mod_dir],
FILENAME = 'R:/data/HKDB_mod_dir'),
(NAME = [HKDB_mod_dir],
FILENAME = 'S:/data/HKDB_mod_dir')
LOG ON (name = [SampleDB_log], Filename='L:/log/HKDB_log.ldf', size=500MB)
COLLATE Latin1_General_100_BIN2;
在創(chuàng)建庫時需要制定 MEMORY_OPTIMIZED_DATA文件組,用來保存checkpoint和delta文件,
創(chuàng)建的數(shù)據(jù)庫只能使用BIN2排序規(guī)則,原生編譯存儲過程只能支持在這些規(guī)則上比較,排序,分組
添加MEMORY_OPTIMIZED_DATA到已有數(shù)據(jù)庫ALTER DATABASE AdventureWorks2012 ADD FILEGROUP hk_mod CONTAINS MEMORY_OPTIMIZED_DATA;
GO
ALTER DATABASE AdventureWorks2012 ADD FILE (NAME='hk_mod', FILENAME='c:/data/hk_mod')
TO FILEGROUP hk_mod;
GO
創(chuàng)建表CREATE TABLE T1 (
[Name] varchar(32) not null PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1024),
[City] varchar(32) null,
[LastModified] datetime not null,
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
1.創(chuàng)建內(nèi)存優(yōu)化表是需要注明,MEMORY_OPTIMIZED=ON,并設置持久性
2.bit,tinyint,smallint,int,bigint,money,smallmoney,float,real,datetime,smalldatetime,datetime2,date,t
新聞熱點
疑難解答
圖片精選