目錄
SQL Server 2014 新特性——內存數據庫... 1
簡介:... 1
設計目的和原因:... 1
專業名詞... 1
In-Memory OLTP不同之處... 2
內存優化表... 2
內存優化表的索引... 2
并發能力的提升... 3
和競爭對手相比幾點... 3
Getting Start. 3
內存數據庫的使用... 3
存儲... 5
TSQL支持... 7
簡介:內存數據庫(In-Memory OLTP),代號Hekaton
設計目的和原因:1.將請求的負荷放到內存中
2.減少數據延遲
3.來適應特殊的負荷類型
如果數據都是在內存中,那么當前的數據庫優化器產生的執行計劃是沒什么意義的,因為現在的優化器默認數據在磁盤中而不是在內存中,所以不從磁盤中讀取數據,優化器應該使用新的執行計劃和新的開銷算法。
In-Memory OLTP 減少了鎖等待問題,使用基于行版本來優化同步的控制,改善了寫入等待的延遲,寫入日志變少,寫入次數變少。
專業名詞Memory-optimized tables(索引優化表):引入了新的結構,被加入到in-memory oltp的新表
Disk-Based tables(磁盤表):基礎磁盤存放的表,就是我們一直使用的表。
Natively complied(原生編譯)存儲過程:用于索引優化表的訪問,也可以使用tsql訪問,通過原生編譯存儲過程訪問速度會更快一點
嵌套事務:可以在優化表中使用,也可以在磁盤表中使用
interop:可以讓tsql訪問索引優化表
In-Memory OLTP不同之處
通過圖可以發現,原生編譯存儲過程只能使用在內存優化表上,而query interop用戶tsql訪問內存優化表的橋梁
內存優化表1.內存優化表和硬盤表不同,不需要把數據從硬盤上讀取放入cache中,
2.checkpoint只是用戶恢復的目的
3.和硬盤表一樣,使用事務日志,當服務重啟后,使用checkpoint的文件和日志,對內存優化表進行重建
4.內存優化表可以通過選項來設置表的持久性:SCHEMA_ONLY只保存表的結構,不保存數據,當服務重啟后數據就會丟失
內存優化表的索引1.內存優化表中的索引不再以btree方式存儲,而是以hash 表的方式
2.內存優化表必須有一個索引,并沒有堆表的概念
3.索引,不會被保存在文件或者事務日志,并會根據內存優化表的修改自動維護,在所有重啟時,根據表的文件和日志重建索引
并發能力的提升1.以行版本的方式存儲表數據,修改數據時會請求鎖,但是在內存優化表中不會
2.雖然沒有寫入鎖,但是還是有等待比如log write,比硬盤表高效,寫入的日志少,速度快
和競爭對手相比幾點1.內存表和硬盤表通過interop集成,有利于過渡
2.原生編譯存儲過程,效率高
3.hash索引,提高內存訪問效率
4.沒有page,不會出現page latch的等待
5.通過行版本實現,不需要lock和latch
Getting Start內存數據庫的使用創建數據庫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;
在創建庫時需要制定 MEMORY_OPTIMIZED_DATA文件組,用來保存checkpoint和delta文件,
創建的數據庫只能使用BIN2排序規則,原生編譯存儲過程只能支持在這些規則上比較,排序,分組
添加MEMORY_OPTIMIZED_DATA到已有數據庫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
創建表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.創建內存優化表是需要注明,MEMORY_OPTIMIZED=ON,并設置持久性
2.bit,tinyint,smallint,int,bigint,money,smallmoney,float,real,datetime,smalldatetime,datetime2,date,t
新聞熱點
疑難解答