若是你的系統有高併發的要求,能夠嘗試使用SQL Server內存優化表來提高你的系統性能。你甚至能夠把它看成Redis來使用。html
要使用內存優化表,首先要在如今數據庫中添加一個支持內存優化的文件組。sql
Memory Optimized File Group
能夠使用下列腳原本向現有數據庫添加內存優化文件組:數據庫
ALTER DATABASE SomeDatabase ADD FILEGROUP Memory CONTAINS MEMORY_OPTIMIZED_DATA; ALTER DATABASE SomeDatabase ADD FILE ( NAME = 'SomeDatabase_InMemory', FILENAME = 'E:\Database\SomeDatabase_InMemory' ) TO FILEGROUP Memory; ALTER DATABASE SomeDatabase SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON; GO
建立內存優化表,使用MEMORY_OPTIMIZED = ON來啓用內存優化:緩存
CREATE TABLE [dbo].[CachedData] ( [Key] [VARCHAR](900) NOT NULL, [Data] [VARBINARY](MAX) NOT NULL, [Expiry] [DATETIME] NOT NULL, PRIMARY KEY NONCLUSTERED ([Key] ASC) ) WITH (MEMORY_OPTIMIZED = ON);
這樣內存優化表就能夠使用了,另外若是你的數據不須要進行持久化存儲,能夠使用DURABILITY = SCHEMA_ONLY
,來獲得更好的性能:併發
優化進階
在使用內存優化表的過程當中發現,當併發大或數據庫壓力大時,訪問內存優化表會提示內存不足的狀況,但實際內存是夠的。這實際上是一個誤報,能夠查看微軟官方文檔瞭解更多詳情:高併發
簡單的說,要解決這個問題就是須要打開Resource Governor,Resource Governor在默認狀況下是關閉的。性能
爲了更好的管理資源的使用狀況,咱們須要給緩存的這個數據庫建立一個獨立的Resource Pool,與系統默認的Resource Pool獨立開。優化
Create Resource Pool
建立一個新的Resource Pool:spa
-- Disable resource governor ALTER RESOURCE GOVERNOR DISABLE; GO CREATE RESOURCE POOL CacheDbPool WITH ( MAX_CPU_PERCENT = 50, MAX_MEMORY_PERCENT = 30 ); GO -- Reconfigure resource governor -- Reconfigure enables resource governor ALTER RESOURCE GOVERNOR RECONFIGURE; GO
詳細配製參數可參閱微軟官方文檔:.net
Bind Resource Pool
將新建的Resource Pool和數據庫進行關聯:
-- Bind Database with resource pool EXEC sys.sp_xtp_bind_db_resource_pool @database_name = N'SomeDatabase', @pool_name = N'CacheDbPool'; -- Take database offline and then bring it back online to begin using resource pool. GO USE [master]; GO ALTER DATABASE [SomeDatabase] SET OFFLINE; GO ALTER DATABASE [SomeDatabase] SET ONLINE; GO
這樣內存優化就設置完成了。
若是須要刪除Resource Pool,須要先解綁數據庫:
-- Unbind resource pool and drop it. EXEC sys.sp_xtp_unbind_db_resource_pool @database_name = N'SomeDatabase'; DROP RESOURCE POOL CacheDbPool;
原文地址:http://www.zkea.net/codesnippet/detail/sql-server-in-memory-oltp.html