Sql-Server
如何使用 SQL Server 的“Hekaton”?
Linux 上的 SQL Server 2017 版本附帶了一個名為
mtlogreader.exe
Windows 發行版中沒有的實用程序,MtLog Reader - Dump Hekaton MtLog files Usage: \\VBOXSVR\mssql\lib\sqlservr\Content\binn\mtlogreader.exe <file> [options] Options: -verbose <int> Verbosity (0-4) Default 1. (short form: -v) -buffio <bool> Buffer stdout (true/false) Default true (short form: -b) -keySecret1 <string> The first secret key blob used for crypto keys (short form: -k1) -keySecret2 <string> The Second secret key blob used for crypto keys (short form: -k2) -instructionFile Treat file as instructionfile. (short form: -i) -targetruntimeinseconds <int> The target run time in seconds (only valid with -i). (short form: -t) -skipchksum Skip checksum validation. (short form: -sc) -maxbsn <uint64> Max BSN to dump. Default 0 (dump whole file). (short form: -m) <file> has a different meaning depending on whether -instructionFile is specified if -instructionFile is specified, <file> is a file containing checkpoint file information extracted at dump time, containing the root file name followed by a list of container directories (one per line). the -t parameter is an indication of how long to run the tool when used with -i it is used to limit the processing of checkpoint files
不過,我找不到太多關於 Hekaton 的資訊。我在這裡發現了一些錯誤,我看到它有一個非常古老的 wiki 頁面,我在哪裡可以找到有關 Hekaton 子系統的文件,但如何使用它?Hekaton 是否已被納入“分析服務”?
Hekaton 是 Microsoft 內部項目,它從 SQL 2014 開始引用 In-Memory OLTP 功能。有些人仍然籠統地使用 Hekaton 這個詞來描述任何版本的 SQL Server(2014、2016、2017)中的 In-Memory 功能。
記憶體中 OLTP 是一個獨立的功能 - 它不屬於任何其他功能,即分析服務。
網上有大量關於 In-Memory OLTP 的資訊,但我會提醒您避免任何引用 SQL 2014(如上所述)的內容,因為那基本上是 v1.0,從那時起發生了很大變化。
首先 - 您是否通過有效的 POC 證明您的工作負載可能會從使用記憶體中 OLTP 中受益?
我已經在部落格中廣泛介紹了 In-Memory OLTP,但您最好從文件開始,這裡:
Microsoft IT:針對 RPM 的“Hekaton”案例研究 – SQL Server 2014 CTP1似乎展示了語法,
遷移到赫卡頓,程序
- 在創建記憶體優化表之前,創建文件組並將數據庫聲明為記憶體優化:
ALTER DATABASE RPM ADD FILEGROUP rpm_mod CONTAINS MEMORY_OPTIMIZED_DATA; GO ALTER DATABASE RPM ADD FILE (NAME='rpm_mod', FILENAME='C:\RPMHekatonFilegroup\rpm_mod') TO FILEGROUP rpm_mod; GO
- 確定儲存桶大小並創建記憶體優化表:計劃表(AMR 報告中的遷移候選)轉換為記憶體優化計劃表。只有 NON CLUSTERED HASH 索引可以在記憶體優化表中使用。雜湊索引由指針數組組成。數組的每個元素稱為一個雜湊桶。桶大小被選擇為等於或大於索引鍵列的預期基數(唯一值的數量)。每個儲存桶更有可能在其鏈中僅包含具有單個值的行。使用以下內容創建記憶體優化調度表:
CREATE TABLE [dbo].[Schedule] ( [ScheduleID] [int] NOT NULL, [BookingID] [int] NOT NULL, [ResourceID] [int] NOT NULL, [Date] [datetime] NOT NULL, [Minutes] [int] NOT NULL, [LastModifiedOnDate] [datetime] NOT NULL, [LastModifiedByID] [int] NOT NULL, [LastModifiedDate] [datetime] NULL INDEX [IX_Schedule_BkId_ScheId] NONCLUSTERED HASH ( [BookingID], [ScheduleID] )WITH ( BUCKET_COUNT = 33554432), INDEX [IX_Schedule_Covering_Index] NONCLUSTERED HASH ( [BookingID], [ResourceID] )WITH ( BUCKET_COUNT = 33554432), INDEX [IX_ScheduleDate] NONCLUSTERED HASH ( [Date] )WITH ( BUCKET_COUNT = 33554432), PRIMARY KEY NONCLUSTERED HASH ( [ScheduleID] )WITH ( BUCKET_COUNT = 33554432), INDEX [ScheduleIX1D] NONCLUSTERED HASH ( [ResourceID] )WITH ( BUCKET_COUNT = 33554432), INDEX [ScheduleIX2D] NONCLUSTERED HASH ( [BookingID] )WITH ( BUCKET_COUNT = 33554432), INDEX [UI_DATE_RESOURCE_BOOKING] NONCLUSTERED HASH ( [ResourceID], [BookingID], [Date] )WITH ( BUCKET_COUNT = 33554432) )WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA ) GO
當創建新的記憶體優化調度表時,非記憶體優化調度表中的數據被插入到這個新表中。舊的 Schedule 表被刪除、重命名,並可用作備份。調度表上的所有進一步事務都在調度表的新記憶體優化版本上執行。由於除了 PRIMARY KEY 之外,不允許任何唯一索引,因此使用序列跟踪插入。