یک روز ، یک جمله ...

امروز به هر کاری که قراره انجام بدی، باور داشته باش

14 بهمن

آموزش راهکارهای HA و DR در SQL Server - بخش دوم مطلب ویژه

در این بخش می خواهیم با مفهوم Transaction Log آشنا شویم. برای آشنایی با این مفهوم می بایست بدانیم که

  • تراکنش چیست
  • هدف از آن چیست
  • عملکرد آن چیست

نکته: یکی از مهمترین دلایل راه اندازی راهکارهای HA و DRP حفاظت از Transaction Log ها می باشد. بدون وجود Transaction Log دیتابیس اساسا غیرقابل بهره برداری می باشد.

تراکنش چیست؟

تراکنش یک واحد شمارش منطقی از یک فرآیند است. زمانی یک تراکنش مفهوم پیدا می کند که در 4 عنصر زیر قابل تعریف باشد:

  • Atomic (A)
  • Consistent (C)
  • Isolated (I)
  • Durable (D)

که به ترکیب 4 عنصر بالا ACID گفته می شود. در زیر توضیحاتی برای آشنایی با هر کدام از عناصر بالا بیان شده است:

Atomic

این عنصر به مفهوم این است که یک تراکنش نمی تواند بین موفق یا ناموفق تقسیم شود به این معنا که یک تراکنش یا ایجاد می شود یا ایجاد نمی شود. به طور مثال کوئری زیر رکوردهای موجودی که نام خانوادگی Tomas داشته باشند را پاک می کند و در غیر این صورت با مابقی رکوردها کاری نخواهد داشت:

Delete from person.person where lastname=’Thomas’

Consistent

یک پایگاه داده قبل از ثبت تراکنش دارای شرایط سلامت می باشد و قوانین خود را دنبال می کند و بعد از ثبت تراکنش نیز وضعیت خود را حفظ می کند.

Isolated

تراکنش می بایست ایزوله باشد، به این معنا که با ایجاد یک تراکنش، سایر تراکنش ها تحت تاثیر آن قرار نگرفته و باعث Fail شدن آنها در آزمون ACID نشود.

Durable

تراکنش می بایست پایدار باشد یعنی بعد از ثبت آن، با بروز رخدادهایی مانند قطع برق، Crash کردن سیستم و ... پایدار بماند.

سیستم چگونه تشخیص می دهد که یک تراکنش به صورت موفق از سیستم حذف شده است؟ چگونه مطمئن می شود که حذف یا ثبت یک تراکنش کامل صورت گرفته است؟

پاسخ به این سوالات و سایر سوالات پیرامون یک تراکنش در مفهومی است به نام Transaction Log

هر دیتابیس شامل 2 فایل می باشد. یک فایل اطلاعات مربوط به تراکنش ها را در خود دارد و فایل دیگر اطلاعات Transaction Log ها را در خود حفظ می کند.

فایلی که اطلاعات مربوط به تراکنش ها را در خود نگهداری می کند محتوی Data Page هایی است که با اندازه های 8KB درون این فایل ، تقسیم شده اند. این واحدها کوچکترین واحدهایی درون دیتابیس هستند که به صورت فیزیکی درون فضای ذخیره سازی نگهداری می شوند. هر 8 فایل 8KB درون یک Page نگهداری می شوند که به آن Extents گفته می شود. تمام این Extents ها توسط یک فایل 8KB به نام Index Allocation Map مدیریت می شوند. این فایل یک Bitmap ساده است که تمام Extents ها را در زیر چتر یک دیتابیس به هم متصل نگه می دارد.

فایل مربوط به Transaction Log محل نگهداری Property Asset های مربوط به تراکنش ها می باشد. مجموعه ای از Data Page های مربوط به یک تراکنش دارای مقداری به نام Log Sequence Number می باشند که ترتیب قراگیری آنها در Transaction Log را مشخص می کند. هر دسته از این LSN ها درون یک گروه به نام Virtual Log Files قرار داده می شوند.

زمانیکه Data Page ها ویرایش شده و LSN مربوطه را دریافت کردند، در فایل مربوط به خود قرار داده می شوند. این فایل را ما با پسوند MDF مشاهده می کنیم.

این تبادل اطلاعات جهت ثبت LSN به این صورت انجام می شود که Data Page ها از دیسک بر روی حافظه قرار داده می شوند و در آنجا ویرایش می شوند و پس از ویرایش شدن و ثبت LSN مربوط به Data Page بر روی دیسک ذخیره می شود. در این مدت زمان به Data Page هایی که بر روی حافظه قرار دارند و هنوز بر روی دیسک ذخیره نشده اند Dirty Page گفته می شود.

حال سوالی که پیش می آید این است که در صورت بروز یک رخداد روی سرور در زمان جابجایی Dirty Page ها از روی حافظه بر روی دیسک چه اتفاقی برای تراکنش ها رخ خواهد داد؟

پاسخ به این سوال دلیلی روشن بر ایجاد دو فایل Transaction Log و Data Page می باشد. در زمان بروز رخداد ممکن است بخشی از Data Page ها بر روی دیسک قرار داده شده باشند و برخی دیگر بر روی حافظه مانده باشند اما چیزی که مسلم است و وجود دارد، اطلاعات کامل یک تراکنش است که درون فایل Transaction Log وجود دارد. زمانیکه سرویس SQL فعال شود اقدام به بررسی یکپارچگی و پایداری بانک اطلاعاتی می کند. با بررسی فایل Transaction Log و مقایسه LSN ها با چیزی که بر روی دیسک قرار داده شده است متوجه می شود که چه Dirty Page هایی از دست رفته اند و براساس LSN ها اقدام به انجام مجدد فرآیند می کند. در صورتیکه این LSN ها مقداری بزرگتر از مقدار ثبت شده بر روی دیسک باشد (یعنی عدد مربوط به LSN ثبت شده در یک Data Page جدیدتر باشد) اقدام به انجام مجدد فرآید می کند، به این فرآیند Redo Fails گفته می شود و در صورتیکه مقدار LSN ها کوچکتر از آن چیزی باشد که روی Data Page ثبت شده است اقدام به بازگردانی فرآیند می کند که به این فرآیند Undo Fails گفته می شود.

جلوگیری از رشد بینهایت Transaction Log :

همانطور که گفته شد، اطلاعات مربوط به هر تراکنش درون فایل Transaction Log قرار داده می شود، حال اگر بانک اطلاعاتی مربوط به یک کسب و کاری باشد که تراکنش های بسیار زیادی را در روز تولید می کند، آیا این فایل به صورت بی رویه رشد می کند؟

برای پاسخ به این سوال می بایست با مشخصات این فایل بیشتر آشنا شویم. فایل Transaction Log یک فایل مدور است به این مفهوم که سرویس SQL با دو روش زیر با بزرگ شدن این فایل برخورد می کند:

روش اول به این صورت است که فایل Transaction Log دارای ابتدا و انتهای مشخص است و LSN ها به صورت مشخص از ابتدا تا انتها برای تراکنش ها مشخص می شود. زمانیکه فایل به انتهای خود می رسد، سرویس SQL تراکنش های جدید را به نقطه ابتدایی (قدیمی ترین LSN) ارسال می کند و عملیات رونویسی صورت می پذیرد. به دلیل از دست رفتن Transaction Log های قدیمی، برای تمام راهکارها، این روش پیشنهاد نمی شود.

روش دوم بزرگ شدن بخش بخش این فایل است بدین معنا که این فایل دارای ابتدا و انتهای مشخص است. زمانیکه این فایل به انتهای خود می رسد، سرویس SQL اقدام به بزرگتر کردن این فایل تا حد مشخص می کند و تراکنش های جدید را در ادامه مسیر این فایل قرار میدهد.

دلایلی که روش اول را یک روش نامطمئن می داند به شرح زیر است:

  1. عدم امکان Undo و Redo کردن رکوردهای قدیمی
  2. عدم امکان ایجاد HA و DR برای رکوردهای قدیمی

خلاصه مطالب پیرامون Transaction Log :

  • هر رکورد در این فایل با یک شماره به نام LSN مشخص می شود. این رکورد به منظور مشخص کردن محل قرارگیری و الصاق آن به Data Page می باشد.
  • یک یا دو رکورد مشخص کننده شروع یک تراکنش و تغییراتی است که توسط آن تراکنش انجام شده است.
  • تراکنش در نهایت می بایست بر روی دیسک ثبت شود و یا فرآیند بازگردانی آن صورت پذیرد.
  • رکوردهای Log به صورت سخت (Hardened) قبل از هرگونه فرآیندی بر روی دیسک ذخیره می شوند. این عمل به منظور تضمین بازگردانی تراکنش در صورت بروز رخداد می باشد.
  • یک تراکنش می تواند توسط کاربر و یا به صورت اتوماتیک (پس از بروز یک رخداد) بازگردانی شود اما در نهایت بانک اطلاعاتی در آزمون ACID همچنان باقی می ماند.
  • فرآید Redo به فرآیندی اطلاق می شود که مربوط به Data Page هایی است که به دلیل بروز یک رخداد نتوانسته اند از حافظه بر روی دیسک نوشته شوند و فرآیند Undo به فرآیندی اطلاق می شود که طی آن Data Page که بر روی دیسک نوشته شده است اما هرگز Commit نهایی نشده است حذف می گردد.

حال با درک مختصری از Transaction Log می توانیم راهکارهای DR و HA را بررسی نماییم. در بخش سوم با ما همراه باشید.

رضا اردانه

مدیریت وب سایت آموزش دیجیتال

1 نظر

نظر دادن

خبرنامه

برای دریافت جدیدترین خبرهای سایت در خبرنامه عضو شوید