sql server 2014內存表


 內存數據庫,指的是將數據庫的數據放在內存中直接操作。相對於存放在磁盤上,內存的數據讀寫速度要高出很多,故可以提高應用的性能。微軟的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(持久表),又可以設置完全持久行還是延遲持續性,延遲持續性選項允許在事務提交時可以不立即將日志寫入磁盤,從而提升性能,當然代價就是發生故障時可能丟失數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM