تکنولوژی In-Memory OLTP چیست؟
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 نیز