內存數據庫,指的是將數據庫的數據放在內存中直接操作。相對於存放在磁盤上,內存的數據讀寫速度要高出很多,故可以提高應用的性能。微軟的SQL Server 2014已於2014年4月1日正式發布,SQL 2014一個主要的功能即為內存數據庫。
目前來說,數據庫鏡像和復制是無法與內存優化表兼容的,但AlwaysOn,日志傳送,備份還原是完整支持。
由於內存表數據的存放機制和普通表(基於磁盤的表)完全不同,因此內存表的數據需要一個特別的文件夾(注意不是文件哦)來存放
USE [master] --創建數據庫 CREATE DATABASE [TestDB] ON PRIMARY ( NAME = N'TestDB', FILENAME = N'D:\SQL2104\SQLData\TestDB.mdf' , SIZE = 204800KB , MAXSIZE = UNLIMITED, FILEGROWTH = 204800KB ) LOG ON ( NAME = N'TestDB_log', FILENAME = N'D:\SQL2104\SQLData\TestDB_log.ldf' , SIZE = 204800KB , MAXSIZE = 2048GB , FILEGROWTH = 204800KB ) GO --創建內存表使用的文件組 ALTER DATABASE [TestDB] ADD FILEGROUP [TestDB_MFG1] CONTAINS MEMORY_OPTIMIZED_DATA GO --創建內存表使用的文件夾 ALTER DATABASE [TestDB] ADD FILE ( NAME = N'TestDB_MDir1', FILENAME = N'D:\SQL2104\SQLData\TestDB_MDir1') TO FILEGROUP [TestDB_MFG1] GO
對於每個數據庫,只能創建一個內存優化文件組(Memory-Optimized Filegroup),而對於每個內存優化文件組,可以創建多個關聯的文件夾。
PS:內存優化文件組基與FILESTREAM文件組,但是無需為內存優化文件組來啟用FILESTREAM。
創建內存表
創建內存表限制比較多:
1. 支持的數據類型:http://msdn.microsoft.com/ZH-CN/library/dn133179(v=sql.120).aspx
2. 內存優化表支持自增,但唯一允許用於 seed 和 increment 的值為 1;(1,1) 是 seed 和 increment 的默認值;
3. 內存優化表不支持CHECK約束,在非hash索引列上也不行;
4. 內存優化表不支持使用的排序規則所具有的代碼頁並非 1252 的數據類型 char(n) 和 varchar(n);
5. 內存優化表不支持nvarchar(max)或varchar(max)
6. 內存優化表索引不支持未使用 *_BIN2 排序規則的字符列上的索引,在非hash索引列上也不行;
7. 內存優化表上的索引不支持索引鍵中有可為 Null 的列,在非hash索引列上也不行;
8. 內存優化表必須有至少一個索引或主鍵
創建內存優化表Demo
CREATE TABLE [dbo].[TB1_IM]
(
[c1] [int] NOT NULL IDENTITY(1,1) PRIMARY KEY
NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
[c2] [nchar](200) COLLATE Chinese_PRC_Stroke_90_BIN2 NOT NULL
INDEX ix_c2 NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
[c3] [nvarchar](200) COLLATE Chinese_PRC_Stroke_90_BIN2 NOT NULL,
[c4] [nvarchar](200) COLLATE Chinese_PRC_Stroke_90_BIN2 NOT NULL,
INDEX ix_c3_c4 NONCLUSTERED HASH(c3,c4) WITH(BUCKET_COUNT=1000000),
INDEX ix_c2_c3 NONCLUSTERED (c2,c3)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )
關於數據持續性
對於內存優化表,有兩種持續性可以選擇:SCHEMA_ONLY(非持久表)和SCHEMA_AND_DATA(持久表),SCHEMA_ONLY 選項會導致數據在實例重啟后丟失;而對於SCHEMA_AND_DATA(持久表),又可以設置完全持久行還是延遲持續性,延遲持續性選項允許在事務提交時可以不立即將日志寫入磁盤,從而提升性能,當然代價就是發生故障時可能丟失數據。
