In-Memory OLTP، که همچنین با نامهای Hekaton یا In-Memory Optimization شناخته میشود، یکی از تکنولوژیهای پیشرفته مایکروسافت است که برای بهبود عملکرد سیستمهای تراکنش برخط (OLTP) طراحی شده است. این تکنولوژی بهطور کامل با موتور SQL Server یکپارچه شده و قابلیت اجرا در کنار سایر کامپوننتهای SQL Server Database Engine را دارد.
In-Memory OLTP ابتدا در نسخه 2014 SQL Server معرفی شد و دو ویژگی کلیدی آن عبارتند از جداول Memory-Optimized و پروسیجرهای Natively-Compile. این ویژگیها به منظور افزایش سرعت پردازش تراکنشها، کاهش تأخیر و بهبود کارایی کلی سیستمها طراحی شدهاند. در ادامه، جزئیات بیشتری درباره این ویژگیها ارائه خواهد شد.
فناوری In-Memory در SQL Server، که به صورت قابل توجهی در عملکرد سیستمهای OLTP تأثیر گذاشته است، در ابتدا با معرفی In-Memory OLTP وارد شد و به مرور به فناوری پیشرفته تری به نام ایندکس ستونی (Columnstore Index) ارتقاء یافت. این قابلیت جدید ابتدا در SQL Server 2012 معرفی شد و با هدف بهبود عملکرد انبار دادهها طراحی شده بود. برخلاف فناوری اصلی VertiPaq که در اکسل معرفی شد، ایندکس ستونی در SQL Server بهعنوان یک موتور پردازش جداگانه عمل میکرد که با فشرده سازی و انتقال داده ها به داخل حافظه و اجرای پرسوجوهای ستونی، سرعت و کارایی انبار داده ها را بهبود بخشید.
معماری In-Memory OLTP
موتور پردازش تراکنش برخط در حافظه (In-Memory OLTP) که با نام Hekaton نیز شناخته میشود، توسط مایکروسافت برای بهبود چشمگیر عملکرد سیستمهای OLTP (تراکنشهای برخط) در SQL Server 2014 معرفی شد. هدف اصلی این فناوری افزایش کارایی تا 100 برابر بود. برخلاف سیستمهای سنتی که از قفلها برای حفظ تمامیت داده استفاده میکنند، Hekaton با طراحی بدون قفل خود، عملکرد را به طور قابل توجهی بهبود بخشیده است. در این سیستم، هیچ قفل داخلی وجود ندارد که باعث کاهش سرعت پردازش شود. این معماری، که با استفاده از مکانیزم نسخههای چندگانه سطرها و فرآیند جمعآوری زبالههای بینیاز، بهینهسازی شده، سطرهای جدیدی را در حافظه ایجاد و آنها را برچسب زمانی میکند. این رویکرد از فرآیندهای سنتی قفلگذاری سریعتر و مقیاسپذیرتر است. در کنار این، مایکروسافت فرآیند کامپایل روتینهای ذخیرهشده را معرفی کرده که کد T-SQL را به کد Win64 پایه تبدیل میکند، که نتیجه آن کاهش تعداد دستورالعملهای CPU و افزایش سرعت اجرای پرسوجوها است. ترکیب این فناوریها به ایجاد یک موتور پردازش پرسوجوی سریع و مقیاسپذیر منجر شده است.
بهینه سازی جداول و ایندکس ها در In-Memory OLTP
برای پیادهسازی موتور پردازش تراکنش برخط در حافظه (In-Memory OLTP)، مایکروسافت روشهای مدیریت جداول، روالهای ذخیرهشده و ایندکسها را بهبود داده است. جداول بهینهشده در حافظه بهطور کامل در RAM بارگذاری میشوند و تغییرات تراکنشی آنها به دیسک نوشته میشود تا دادهها دائمی بمانند. موتور قفل آزاد، تراکنشها را برای این جداول پردازش میکند که باعث افزایش کارایی و کاهش زمان اجرای تراکنشها میشود. روالهای ذخیرهشده (Stored Procedures) در این تکنولوژی با کامپایل شدن به کد اصلی Win64 بهبود یافتهاند، این بهبود عملکرد باعث حذف سربارهای ناشی از تفسیر T-SQL شده و به حداکثر کارایی منجر میشود. به این ترتیب، پردازش مستقیم و سریعتر دستورات انجام میشود.
از نظر ایندکسها، SQL Server ایندکس های متفاوتی را برای جداول بهینهشده در حافظه ارائه میدهد. در این جداول به جای استفاده از ساختار B-tree که معمولاً برای ایندکسهای دیسکی استفاده میشود، از ایندکسهای بهینهشده در حافظه مانند hash index یا ایندکس غیرکلاستر بهینهشده در حافظه استفاده میشود. Hash index برای جستجوهای سریع عالی است، اما برای دامنههای وسیع کارایی کمتری دارد، درحالیکه ایندکس غیرکلاستر بهینهشده در حافظه برای بازیابی مقادیر دامنه عالی عمل میکند.
هر جدول بهینه شده در حافظه باید حداقل یک ایندکس داشته باشد و این ایندکسها باید بهعنوان بخشی از دستور CREATE TABLE
تعریف شوند. برخلاف جداول دیسکی، شما نمیتوانید پس از ایجاد جدول، با استفاده از دستور CREATE INDEX
ایندکسی برای جداول بهینهشده در حافظه ایجاد کنید. تمام ایندکسها در حافظه ذخیره میشوند و شامل تمام ستونها هستند. همچنین این ایندکسها در بیشترین حالت میتوانند تا 8 ایندکس را پشتیبانی کنند.
نیازمندی ها و پیشنیازهای پیاده سازی In-Memory OLTP در SQL Server
برای پیادهسازی موتور OLTP در حافظه (In-Memory OLTP)، نیازمندیهای سختافزاری و نرمافزاری خاصی وجود دارد. از نظر سختافزار، یک سرور 64 بیتی که از دستورالعملهای cmpxchg16b پشتیبانی کند، ضروری است. این دستورالعمل توسط اکثر پردازندههای 64 بیتی مدرن پشتیبانی میشود. با این حال، ممکن است در صورت استفاده از ماشینهای مجازی با پردازندههای قدیمیتر، مشکلاتی بروز کند که در این صورت به بهروزرسانی پردازنده مجازی نیاز است. همچنین، SQL Server برای ذخیره جداول و ایندکسهای بهینهشده در حافظه به مقدار زیادی RAM نیاز دارد. مایکروسافت پیشنهاد میکند که حافظه موجود حداقل دو برابر اندازه دیسک جداول و ایندکسها باشد تا عملکرد مطلوبی ارائه شود. بیشترین حجم پیشنهادی برای جداول بهینهشده در حافظه 256 گیگابایت است.
این تکنولوژی توسط Windows Server 2012 R2، Windows Server 2012 و Windows Server 2008 R2 SP2 پشتیبانی میشود و سیستم عامل باید حتماً 64 بیتی باشد. علاوه بر این، تنها نسخههای Enterprise، Developer و Evaluation از SQL Server 2014 از In-Memory OLTP پشتیبانی میکنند و نسخه Standard این قابلیت را ندارد. در هنگام نصب SQL Server، باید اطمینان حاصل کنید که Database Engine Services برای پشتیبانی از موتور In-Memory OLTP انتخاب شده است. همچنین، این موتور از فناوریهای دسترسیپذیری بالا مانند failover clustering، AlwaysOn Availability Groups و log shipping نیز پشتیبانی میکند.
بررسی محدودیت های In-Memory OLTP در SQL Server
موتور In-Memory OLTP در SQL Server، با وجود کارایی و سرعت بالایی که فراهم میکند، محدودیتهایی نیز دارد. اولین مورد این است که برخی از انواع دادهها که در SQL Server 2014 پشتیبانی میشوند، در جداول بهینهشده در حافظه پشتیبانی نمیگردند. این نوع دادهها شامل مواردی مانند Datetimeoffset
، Geography
، Image
، و Varchar(max)
هستند. علاوه بر این ، برخی ویژگی های بانک اطلاعاتی نیز پشتیبانی نمیشوند. از جملهی این محدودیتها میتوان به عدم پشتیبانی از مانیتورینگ بانک اطلاعاتی، تصاویر لحظه ای بانک اطلاعاتی، ستون های محاسبه شده و Triggerها اشاره کرد. همچنین، قیدهای Foreign Key، Check و Unique و ذخیرهسازی FILESTREAM نیز در این موتور پشتیبانی نمیشوند.
یکی دیگر از محدودیت های قابل توجه، این است که جداول بهینه شده در حافظه حداکثر هشت ایندکس را پشتیبانی میکنند و Alter Table نیز پشتیبانی نمیشود، به این معنی که جداول OLTP در-حافظه باید حذف و دوباره ایجاد شوند.
برای حفظ عملکرد بهینه، مایکروسافت توصیه میکند که در سرورهای ویندوز از policy با عنوان Instance File Initialization استفاده کنید و به حساب کاربری SQL Server Service دسترسی SE_MANAGE_VOLUM_NAME را اضافه کنید.
مزایای استفاده از In-Memory OLTP
1. عدم درگیری با Buffer Pool در SQL Server
یکی از مزایای مهم In-Memory OLTP، عدم وابستگی آن به Buffer Pool است. در SQL Server، Buffer Pool به عنوان منطقهای برای ذخیرهسازی موقت صفحات داده و ایندکسها در حافظه RAM استفاده میشود. این مکانیزم، به ویژه در سیستمهایی که به پردازش سریع نیاز دارند، ممکن است باعث کاهش کارایی شود، زیرا دادهها باید از حافظه دیسک به Buffer Pool منتقل شوند و سپس مورد پردازش قرار گیرند. اما در In-Memory OLTP، جداول بهینهشده مستقیماً در حافظه اصلی نگهداری میشوند و نیاز به استفاده از Buffer Pool حذف میشود. این امر باعث کاهش تأخیر در دسترسی به دادهها میشود و پردازش را سریعتر میکند. با این روش، سیستم قادر است به سرعت بیشتری به دادهها دسترسی پیدا کند و عملیاتهای خواندن و نوشتن را با کارایی بهتری انجام دهد.
2. افزایش سرعت و راندمان
ویژگی In-Memory OLTP با استفاده از جداولی که به صورت کامل در حافظه نگهداری میشوند و پردازشهای بهینهشده، امکان افزایش چشمگیر سرعت و راندمان را فراهم میکند. در برخی شرایط خاص، این تکنولوژی میتواند کارایی سیستم را تا ۳۰ برابر بهبود بخشد. دلیل این بهبود چشمگیر این است که پردازش دادهها بدون نیاز به خواندن و نوشتن مداوم به دیسک انجام میشود. علاوه بر این، استفاده از الگوریتمهای پیشرفته برای مدیریت حافظه و کاهش تأخیرهای ناشی از I/O دیسک، باعث میشود که این تکنولوژی برای سیستمهایی با بار تراکنشی بالا و نیاز به عملکرد سریع، بسیار مناسب باشد. این افزایش کارایی به ویژه در سناریوهایی که نیاز به پردازش حجم بالایی از تراکنشها در زمان کم دارند، بسیار محسوس است.
3. Lock & Latch Free
یکی از بزرگترین مزایای In-Memory OLTP، طراحی بدون نیاز به قفلها و مکانیزمهای انتظار (Latch) است. در سیستمهای پایگاه داده سنتی، استفاده از قفلها و مکانیزمهای انتظار برای حفظ تمامیت دادهها و جلوگیری از تناقضات ضروری است. این قفلها و انتظارها ممکن است باعث کاهش کارایی سیستم شوند، به ویژه در شرایطی که تعداد زیادی از تراکنشها به صورت همزمان در حال اجرا هستند. با استفاده از تکنولوژی In-Memory OLTP، این مشکلات به طور کامل حذف میشوند. این تکنولوژی از Multi-Version Concurrency Control (MVCC) استفاده میکند که به جای قفلگذاری، نسخههای مختلف از دادهها را برای تراکنشهای همزمان ایجاد میکند. این روش باعث میشود که تراکنشها بدون نیاز به قفلگذاری و بدون ایجاد تداخل، با کارایی بالا اجرا شوند.
سخن پایانی
تکنولوژی In-Memory OLTP یکی از نوآورانهترین قابلیتهای SQL Server است که برای بهبود عملکرد سیستمهای تراکنشی طراحی شده است. این تکنولوژی با ذخیرهسازی دادهها بهصورت مستقیم در حافظه و حذف نیاز به استفاده از قفلها، سرعت پردازش تراکنشها را به طور چشمگیری افزایش میدهد. In-Memory OLTP با حذف محدودیتهای سنتی مربوط به حافظه و پردازش، باعث میشود که سیستمهای پایگاه داده با کارایی بالاتر و تأخیر کمتر عمل کنند. این تکنولوژی به ویژه برای سیستمهایی با نیازهای پردازشی سنگین و تراکنشهای حجیم ایدهآل است.