Memory-Optimized Tables و Native Compilation در SQL Server | Pro SQL Server 2019 Administration

Memory-Optimized Tables و Native Compilation در SQL Server

توسط admin | گروه SQL Server | 1405/05/20

نظرات 0

Memory-Optimized Tables و Native Compilation در SQL Server

Chapter 7 — Memory-Optimized Tables and Natively Compiled Objects

نویسنده: Peter A. Carter

زبان منبع: انگلیسی

محدوده: صفحات PDF 249 تا 261

تاریخ ترجمه: 2026-08-11

اعتبار ترجمه: ترجمه با کمک هوش مصنوعی

PAGE-249

Memory-Optimized Tables

پس از بحث فشرده‌سازی، فصل به In-Memory OLTP می‌رسد. جدول حافظه‌محور برای کاهش I/O و همچنین کاهش سربار CPU و Lock/Latch طراحی شده است. این ساختار برای همه workloadها مناسب نیست؛ افزایش مصرف حافظه، محدودیت‌های ویژگی و الگوی دسترسی باید پیش از مهاجرت ارزیابی شود. پارتیشن‌های Heap جدید نیز در برخی Bulk Insertهای دارای TABLOCK می‌توانند فشرده شوند.

PAGE-250

Durability و پیش‌نیاز Filegroup

Memory-Optimized Table می‌تواند SCHEMA_AND_DATA باشد تا هم Schema و هم داده دوام داشته باشد، یا SCHEMA_ONLY باشد که پس از Restart فقط ساختار باقی می‌ماند. پیش از ساخت جدول باید Memory-Optimized Filegroup و Container متناظر ایجاد شود. انتخاب SCHEMA_ONLY برای داده موقت می‌تواند ثبت Log و I/O را کاهش دهد، اما از دست رفتن داده پس از Restart باید قابل قبول باشد.

PAGE-251

ایجاد جدول حافظه‌محور

جدول‌های Memory-Optimized با CREATE TABLE ساخته می‌شوند و باید دست‌کم یک Index داشته باشند. Hash Index برای جست‌وجوی برابری مناسب است و تعداد Bucketها هنگام طراحی اهمیت دارد؛ Nonclustered Index ساختار Range-friendly‌تری دارد.

CREATE TABLE dbo.OrdersMem
(
  OrderNumber int IDENTITY(1,1) NOT NULL
      PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000000),
  OrderDate date NOT NULL,
  CustomerID int NOT NULL,
  ProductID int NOT NULL,
  Quantity int NOT NULL,
  NetAmount money NOT NULL,
  TaxAmount money NOT NULL,
  InvoiceAddressID int NOT NULL,
  DeliveryAddressID int NOT NULL,
  DeliveryDate date NULL
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
PAGE-252

داده آزمایشی با CTE و مقادیر تصادفی به OrdersMem درج می‌شود. در Memory-Optimized Table تخصیص داده و مدیریت نسخه‌های رکورد با سازوکار In-Memory OLTP انجام می‌شود و ساختار صفحه‌ای سنتی Buffer Pool در مسیر اصلی دسترسی وجود ندارد.

PAGE-253

Performance Profile

برای مقایسه، کتاب یک جدول Disk-Based با Schema مشابه می‌سازد و داده مشابه در آن قرار می‌دهد. Benchmarkها روی یک VM مشخص اجرا شده‌اند و اعداد مطلق به سخت‌افزار وابسته‌اند؛ هدف مشاهده تفاوت الگوی I/O و CPU است، نه ارائه یک نسبت ثابت برای همه سیستم‌ها.

PAGE-254

آزمایش SELECT * پس از پاک‌کردن Plan Cache و Clean Bufferها اجرا می‌شود تا اثر خواندن فیزیکی روی جدول Disk-Based روشن‌تر شود. Memory-Optimized Table از ساختارهای حافظه‌ای خودش استفاده می‌کند و رفتار آن با DBCC DROPCLEANBUFFERS مانند Rowstore سنتی نیست.

SET STATISTICS TIME ON;
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
SELECT * FROM dbo.OrdersMem;
SELECT * FROM dbo.OrdersDisc;
PAGE-255

آزمایش COUNT(*) نیز برای هر دو ساختار اجرا می‌شود. نتایج نمونه کتاب مزیت چشمگیر Memory-Optimized را در برخی اسکن‌ها نشان می‌دهد، اما نویسنده تأکید می‌کند نتیجه به سیستم و workload وابسته است و باید روی محیط واقعی خودتان Benchmark کنید.

Figure 7-15 — شکل/تصویر منبع، صفحه PDF 255
PAGE-256

آزمایش SUM با فیلتر روی کلید، اهمیت طراحی Index را نشان می‌دهد. اگر Query با Hash/Nonclustered Index مناسب همسو باشد، جدول حافظه‌محور می‌تواند بسیار سریع باشد؛ در غیر این صورت یک جدول Disk-Based با ایندکس مناسب ممکن است رقابت نزدیک یا حتی عملکرد بهتری داشته باشد. نتیجه اصلی این است که In-Memory جای طراحی Index را نمی‌گیرد.

Figure 7-16 — شکل/تصویر منبع، صفحه PDF 256
PAGE-257

Table Memory Optimization Advisor

SSMS ابزاری برای بررسی امکان مهاجرت جدول Disk-Based به Memory-Optimized ارائه می‌دهد. Advisor ناسازگاری ویژگی‌ها و انواع داده را گزارش می‌کند، نوع Durability را می‌پرسد و برای Primary Key/Index پیشنهادهایی ارائه می‌کند. پیش از اجرای مهاجرت، هشدارها باید برطرف شوند و تأثیر روی عملیات‌هایی مانند TRUNCATE TABLE و Constraintهای پشتیبانی‌نشده بررسی شود.

Figure 7-17 — شکل/تصویر منبع، صفحه PDF 257
PAGE-258

Natively Compiled Objects

In-Memory OLTP می‌تواند Table و Stored Procedure را به کد Native تبدیل کند. در نسخه‌های جدید دامنه قابلیت‌های پشتیبانی‌شده افزایش یافته، اما هنوز باید محدودیت‌های Syntax و عملیات سازگار بررسی شوند. Native Compilation بخش‌هایی از سربار Interpreter/Query Execution سنتی را کاهش می‌دهد.

PAGE-259

DLLهای Native برای جدول‌ها

SQL Server برای Objectهای Natively Compiled فایل‌های DLL تولید و مدیریت می‌کند. Metadata سیستم اجازه می‌دهد ارتباط DLL و جدول Memory-Optimized مشاهده شود. این فایل‌ها بخشی از پیاده‌سازی داخلی‌اند و SQL Server چرخه عمر آن‌ها را کنترل می‌کند؛ حذف دستی آن‌ها صحیح نیست.

PAGE-260

Natively Compiled Stored Procedure

CREATE PROCEDURE UpdateOrdersMem
    @OrderNumber int,
    @DeliveryDate date
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
    UPDATE dbo.OrdersMem
    SET DeliveryDate = @DeliveryDate
    WHERE OrderNumber = @OrderNumber;
END;

Stored Procedure Native باید SCHEMABINDING و بلوک ATOMIC داشته باشد و سطح Isolation/Language در تعریف مشخص شود. Metadata مشابهی برای مشاهده DLLهای Procedureهای Native وجود دارد.

PAGE-261

جمع‌بندی

پارتیشن‌بندی، Compression و In-Memory OLTP هرکدام مسئله متفاوتی را حل می‌کنند: Sliding Window و مدیریت حجم، کاهش I/O و Footprint، و کاهش Latency/Locking. انتخاب صحیح نیازمند شناخت workload، اندازه‌گیری و آزمون است. Memory-Optimized Table در سناریو مناسب می‌تواند کارایی بسیار بالایی ایجاد کند، اما بدون Index مناسب یا با محدودیت‌های ناسازگار، گزینه خودکار و همیشگی نیست.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500