Sql-Server

如何使用 SQL Server 的“Hekaton”?

  • December 16, 2017

Linux 上的 SQL Server 2017 版本附帶了一個名為mtlogreader.exeWindows 發行版中沒有的實用程序,

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,但您最好從文件開始,這裡:

https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/in-memory-oltp-in-memory-optimization

Microsoft IT:針對 RPM 的“Hekaton”案例研究 – SQL Server 2014 CTP1似乎展示了語法,

遷移到赫卡頓,程序

  1. 在創建記憶體優化表之前,創建文件組並將數據庫聲明為記憶體優化:
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
  1. 確定儲存桶大小並創建記憶體優化表:計劃表(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 之外,不允許任何唯一索引,因此使用序列跟踪插入。

引用自:https://dba.stackexchange.com/questions/193276