In Memory OLTP چیست؟ معرفی قابلیت IMOLTP در SQL Server

بدون شک، مهم‌ترين ويژگي‌هاي جديد در SQL Server 2014 موتور جديد پردازش تراکنش برخط در-حافظه است. در سال 2007 با توجه به اينکه سرعت پردازش CPU ها به حداکثر خود رسيده‌بود، مايکروسافت بر روي افزايش کارايي از طريق بهينه‌سازي حافظه، کار مي‌کرد. اين روند با تکنولوژي VertiPaq شروع شد که در ابتدا مايکروسافت آن را با انتشار SQL Server 2008 تحت عنوان Power Pivot معرفي نمود.Power Pivot از تکنولوژي حافظه فشرده استفاده مي‌کرد و اجازه مي‌داد محيط مايکروسافت اکسل، تحليلهاي هوش تجاري (BI) را بر روي مجموعه‌داده‌هايي با بيش از چندين ميليون سطر انجام دهد.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

اين فن‌آوري در-حافظه بعدها به فن‌آوري ايندکس ستوني ارتقاء پيدا کرد که مايکروسافت آن را با SQL Server 2012 منتشر نمود.برخلاف فن‌آوري اصلي VertiPaq که در محيط اکسل معرفي شد، شاخص ستوتي که در محيط SQL Server 2012 قرار داده شده بود، يک موتور پردازش جداگانه‌اي بود که به منظور پياده‌سازي بهتر انبار داده‌ها بر روي SQL Server پياده‌سازي شده بود. ايندکس ستوني از طريق فشرده‌سازي داده‌هاي ستوني، جابجا نمودن آنها به داخل حافظه، و اجراي پرس و جوهاي ستوني بر روي داده‌ها، کارايي انبار داده‌ها را بهبود بخشيده بود.

البته قابليت ايندکس ستوني به صورت فقط خواندني قابل استفاده بود و در عمليات حذف، اضافه و به‌روزرساني قابل استفاده نبود و بنابراين کاربرد اين تکنولوژي به عنوان يک موتور فقط بر روي انبار داده‌ها قرار گرفته بود.در SQL Server 2014 مايکروسافت نسخه تکامل‌يافته تکنولوژي در-حافظه را ارائه داد و موتور کاملاً جديد پردازش تراکنش برخط در-حافظه را ارائه داد که به طراحان اجازه مي‌دهد جداول را به طور کامل انتخاب و براي کارايي بيشتر و دسترسي به داده‌ها با زمان تاخير کمتر، در حافظه قرار دهند.در اينجا معماري اوليه موتور پردازش تراکنش برخط در-حافظه مورد بررسي قرار خواهد گرفت. بعلاوه نيازها و محدوديتهاي استفاده از موتور پردازش تراکنش برخط در-حافظه بيان خواهد شد.

ديد کلي معماري In Memory Database

موتور پردازش تراکنش برخط در-حافظه SQL Server 2014 ، در ابتدا با نام Hekaton معرفي شد. اين کلمه معادل واژه يوناني 100 است و دليل اين نامگذاري اين بود که هدف مايکروسافت از اين تکنولوژي بهبود کارايي به ميزان 100 برابر (100x) بود. مايکروسافت اين موتور پردازش پرس و جو را از ابتدا با استفاده از يک مدل بدون قفل طراحي کرد. هيچ قفل داخلي براي حفظ تماميت داده تراکنشي استفاده نشده است.طراحي بدون قفل، يکي از نقاط کليدي است که موتور پردازش تراکنش برخط در-حافظه را از جداول pinning با DBCC PINTABLE يا از putting-database روي SSD ها متمايز مي‌کند.

DBCC PINTABLE يک جدول را در buffer pool SQL Server نگهداري مي‌کند، اما در اين روش موتور رابطه‌اي يکساني را براي نگهداري خود جدول و قفلهاي آن استفاده مي‌کند، بنابراين اين روش مقياس‌پذيري موجود در موتور OLTP در حافظه را ارائه نمي‌دهد. همين مسئله براي SSD ها هم صدق مي‌کند، اين روش هم مي‌تواند I//O سريعتري را فراهم کند، اما استفاده از موتور رابطه‌اي يکسان استفاده مي‌کند.در مقابل، موتور OLTP در-حافظه از يک مکانيسم جديد بهينه براي کنترل همزمان چند نسخه‌ با الگوريتمهايي که براي داده مقيم در حافظه بهينه‌شده‌اند، استفاده مي‌کند. وقتيکه يک سطر در يک بافر مشترک اصلاح مي‌شود، موتور OLTP در-حافظه يک نسخه جديد کامل از آن سطر و برچسب زماني آن را ايجاد مي‌کند.

اين فرآيند بسيار سريع است به دليل اينکه اين مسئله به طور کامل در حافظه انجام مي‌شود. موتور سپس هر سطر به‌روز شده‌اي را قبل از انجام آن تحليل و اعتبار سنجي مي‌کند. اين طراحي، سريعتر و مقياس‌پذيرتر از مکانيسم قفل‌گذاري سنتي است که در موتور بانک اطلاعاتي رابطه‌اي SQL Server استفاده مي‌شد، به دليل اينکه هيچ قفل و وضعيت انتظاري وجود ندارد که جلوي اجراي سريع پردازنده را بگيرد.از آنجا که اين پردازش بهينه تعداد زيادي نسخه‌هاي مختلف از يک سطر را ايجاد مي‌کند، تعدادي سطر دورانداختي در حافظه باقي مي‌گذارد. براي رسيدگي به نسخه‌هاي سطرهاي دورانداختني، مايکروسافت يک فرآيند جديد جمع‌آوري زباله با قفل آزاد را به عنوان قسمتي از موتور OLTP در-حافظه، پياده‌سازي نموده است.

فرآيند جمع‌آوري زباله به صورت تناوبي همه سطرهاي غيرضروري را پاک مي‌کند.در رابطه با طراحي قفل آزاد جديد، مايکروسافت يک فرآيند کامپايل رويه‌هاي ذخيره‌شده را معرفي مي‌کد که کد T-SQL را تفسير نموده و آن را به کد Win64 پايه کامپايل مي‌کند. هدف از آن کاهش تعداد دستورالعمل‌هاي CPU است که بايد براي پردازش هر پرس و جو اجرا گردد. يک مسير کد کوتاهتر معادل است با اجراي کد سريعتر. ترکيب موتور پردازش پرس و جوي جديد و رويه‌هاي ذخيره شده کامپايل شده، فاکتورهاي اصلي هستند که باعث ايجاد کارايي بهتر در موتور OLTP در-حافظه مي‌شوند. شکل1 معماري پايه موتور OLTP در- حافظه را نشان مي‌دهد:

In Memrory Database چیست

شکل1- معماري OLTP بر-خط

همانطور که در شکل مي‌بينيد، موتور OLTP بر-خط به صورت جداگانه کار نمي‌کند، بلکه با موتور SQL Server رابطه‌اي در تعامل است و به شما اجازه مي‌دهد تا اشياء حافظه بهينه‌سازي شده و اشياء بانک اطلاعاتي استاندارد را در يک پرس و جوها استفاده کنيد.

جداول، رويه‌هاي ذخيره شده و ايندکس‌ها

براي پياده‌سازي موتور OLTP در حافظه، مايکروسافت روش رسيدگي به جداول، رويه‌هاي ذخيره‌شده و ايندکسها رااصلاح نموده است. جداول به طور کامل در حافظ کپي مي‌شوند و با نوشته شدن وقايع تراکنش بر روي ديسک، پايا مي‌شوند. موتور قفل آزاد، تراکنشها را براي جداول مقيم در حافظه پردازش مي‌کند. کارايي رويه‌هاي ذخيره‌شده بوسيله کامپايل شدن رويه‌هاي ذخيره شده در کد اصلي، بهبود يافته است. به طور معمول، وقتي رويه‌هاي ذخيره شده T-SQL تفسير مي‌شوند، سرباري را به فرآيند اجرا تحميل مي‌کنند. وقتي که داده مقيم در حافظه است، اين مي‌تواند مانعي براي کارايي باشد. کامپايل شدن رويه‌هاي ذخيره شده در کد Win64 اصلي، باعث اجراي مستقيم آن مي‌شود، بنابراين به بيشترين حد کارايي و کمترين زمان اجرا دست‌خواهيم يافت.

همانطور که انتظار داريد، ايندکسها براي جداول مقيم در حافظه، متفاوت مي‌باشد. آنها ساختار B-tree را که براي ايندکسهاي بر روي ديسک استفاده مي‌شود، استفاده نمي‌کنند. SQL Server 20014 يک hash index جديد يا ايندکس بهينه‌شده در حافظه بدون کلاستر را براي جداول بهينه‌سازي شده در حافظه استفاده مي‌کند. Hash index در عمليات جستجو بسيار موثر است، اما براي مقادير دامنه بهترين عملکرد را ندارد. ايندکسهاي بهينه شده در حافظه بدون کلاستر در بازيابي مقادير دامنه بسيار مناسب عمل مي‌کند. آنها بازيابي سطوح جداول با همان نظمي که در هنگام ايجاد ايندکس مشخص شده بود را به خوبي پشتيباني مي‌کنند.

هر جدول بهينه شده در حافظه بايد حداقل يک ايندکس داشته باشد. ايندکسهاي بهينه شده در حافظه بايد به عنوان يک جزئي از دستور Create Table استفاده گردد. شما نمي‌توانيد دستور Create Index را براي ايجاد يک ايندکس براي يک جدول بهينه شده در حافظه، بعد از اينکه جدول ايجاد شد، استفاده کنيد. ساختارهاي ايندکس بر روي ديسک وجود ندارد، و عمليات ايندکس در وقايع تراکنش ثبت نمي‌شود. در اصل همه ايندکس‌هاي بهينه‌شده در حافظه، همه ستونها و ايندکسها را پوشش مي‌دهند و شامل مي‌شوند. نکته مهمي که بايد مورد توجه قرار گيرد، اين است که جداول بهينه شده در حافظه در بيشترين حالت فقط هشت ايندکس را مي‌توانند پشتيباني کنند.

نيازمندي های In Memory Database

از نظر سخت‌افزاري براي پياده‌سازي موتور OLTP در-حافظه، يک سرور 64 بيتي مورد نياز است که دستورات cmpxchg16b را پشتيباني کند. همه پردازنده‌هاي مدرن 64 بيتي اين دستورات را پشتيباني مي‌کنند. فقط زماني ممکن است با مشکل مواجه شويد که موتور OLTP در-حافظه را در ماشين مجازي 64 بيتي پياده‌سازي نماييد که يک پردازنده مجازي قديمي‌تر را استفاده نمايد. اگر با اين مورد مواجه شديد، شما نياز به به‌روز رساني پردازنده مجازي VM را داريد.

به‌ علاوه SQL Server به حافظه کافي براي ذخيره همه جداول و ايندکسهاي بهينه شده در حافظه، نياز دارد. براي اينکه مطمئين شويد که حافظه کافي داريد، مايکروسافت پيشنهاد مي‌دهد که دو برابر سايز روي ديسک جداول و ايندکس‌هاي بهينه شده در حافظه، حافظه فراهم نماييد. بيشترين حجم پيشنهادي توصيه شده براي جداول بهينه شده در حافظه GB 256 مي‌باشد.موتور OLTP در حافظه بر روي Windows Server 2012 R2 ، Windows Server 2012 و Windows Server 2008 R2 SP2 پشتيباني مي‌شود. البته همانطور که بيان شد، سيستم عامل 64 بيتي مورد نياز است.

به‌ علاوه بايد از نسخه Enterprise ، Developer يا Evaluation SQL Server 20014 استفاده شود. SQL Server 2014 نسخه Standard ، موتور OLTP در-حافظه را پشتيباني نمي‌کند.وقتيکه يک نسخه از SQL Server 2014 با پشتيباني از OLTP در-حافظه نصب مي‌کنيد، مطمئن شويد که Database Engine Services to install support for In-Memory OLTP engine را انتخاب نموده‌ايد. توجه داشته باشيد که موتور OLTP در-حافظه از چندين فن‌آوري دسترسي‌پذيري بالا شامل failover clustering ، Alwayson Availability Groups و log shipping پشتيباني مي‌کند.

محدوديتهای In Memory Database

همانطور که شما هم انتظار داريد، طبيعت حافظه فشرده به گونه‌اي است که محدوديتهايي را براي استفاده از موتور OLTP در-حافظه ايجااد مي‌کند. اولين مورد اينکه همه انواع داده تعريف شده در SQL Server 2014 پشتيباني نمي‌گردد. انواع داده‌هاي زير در جداول بهينه شده در حافظه پشتيباني نمي‌شود :

  • Datetimeoffset
  • Geography
  • Hierarchyid
  • Image
  • Ntext
  • Sql_variant
  • Text
  • (Varchar(max
  • Xml
  • (User data types (UDTs

به‌علاوه، بعضي از ويژگيهاي بانک اطلاعاتي پشتيباني نمي‌گردد. در زير، بعضي از مهمترين محدوديتهاي بانک اطلاعاتي و جداول آمده است:

  • مانيتورينگ بانک اطلاعاتي پشتيباني نمي‌شود.
  • گزينه Auto-Closed براي بانک اطلاعاتي پشتيباني نمي‌شود.
  • تصاوير لحظه‌اي بانک اطلاعاتي پشتيباني نمي‌شود.
  • DBCC CHECKDB و DBCC CHECKTABLE کار نمي‌کند.
  • ستونهاي محاسبه شده ، پشتيباني نمي‌شد.
  • Trigger ها پشتيباني نمي‌شود.
  • قيدهاي Foreign Key، Check و Uniqe پشتيباني نمي‌شود.
  • ستونهاي IDENTITY پشتيباني نمي‌شود.
  • ذخيره‌سازي FILESTREAM پشتيباني نمي‌شود.
  • RowGuidcol پشتيباني نمي‌شود.
  • Clusterd Index ها پشتيباني نمي‌شود.
  • جداول بهينه شده در حافظه، در بيشترين حالت، هشت ايندکس را پشتيباني مي‌کند.
  • ColumnStore Index ها پشتيباني نمي‌شود.
  • Alter Table پشتيباني نمي‌شود. جداول OLTP در-حافظه بايد حذف شده و دوباره ايجاد شوند.
  • فشرده‌سازي داده پشتيباني نمي‌شود.
  • مجموعه‌هاي Multiple Active Result پشتيباني نمي‌شود.
  • (Change Data Capter(CDC پشتيباني نمي‌شود.

شما نبايد به صورت دستي هيچ فايل Checkpoint اي را در اشياء بانک اطلاعاتي OLTP در-حافظه حذف کنيد. SQL Server همه فايلهاي Checkpoint بلااستفاده را وقتي که از بانک اطلاعاتي يا از log ، پشتيبان تهيه مي‌کنيد، حذف مي‌کند. اگر شما فايل پشتيبان تهيه نکنيد، فضاي در دسترس روي ديسک کاهش خواهد يافت.اگر از OLTP بر-خط استفاده مي‌کنيد، مايکروسافت به شما پيشنهاد مي‌دهدد که يکي از policy هاي ويندوز سرور با عنوان Instance File Initialization را فعال نماييد. براي فعال کردن آن، شما بايد به حساب کاربري SQL Server Service حق دسترسي SE_MANAGE_VOLUM_NAME را اضافه نماييد. توجه داشته باشيد که تنها راه حذف کردن فايل گروه بهينه شده در حافظه، از يک بانک اطلاعاتي، حذف کردن بانک اطلاعاتي مي‌باشد.

موارد استفاده از پردازش تراکنش برخط در حافظه

در چه مواقعي استفاده از OLTP در-حافظه کارايي بانک اطلاعاتي شما را افزايش خواهد داد. مايکروسافت يک ابزار جديدي براي تحليل، مهاجرت و گزارش‌گيري(AMR) ارائه داده است. همانگونه که نام اين ابزار نشان مي‌دهد، ابزار AMR مي‌تواند در تشخيص اينکه جابه‌جا کردن کدام جداول و رويه‌هاي ذخيره شده به حافظه، مفيد است، کمک نمايد.به‌علاوه، اين ابزار مي‌تواند در جابه‌جا کردن اشياء بانک اطلاعاتي به داخل حافظه کمک کند. ابزار AMR وقتيکه ابزار مديريت را در هنگام نصب SQL Server 2014 انتخاب مي‌کنيد، نصب مي‌شود. شما مي‌توانيد به ابزار AMR از طريق SQL Server Management Studio (SSMS) دسترسي پيدا کنيد.


نظرات