AutoClose چیست و قابلیت های آن
در پاسخ به AutoClose چیست بایستی گفت Auto close یک قابلیت دیتابیس محور در Sql Server می باشد ( بدین معنی که قابل کنترل در سطح مدیریت Sql Server نبوده و برای هر دیتابیس به طور جداگانه قابل تنظیم می باشد.)فعال نمودن autoclose در دیتابیس های Sql Server یک تجربه اشتباه خواهد بود.در این مقاله به این سوال و سوالات مشابه پاسخ خواهیم داد…
به تعبیر مایکروسافت :
” هنگامی که این قابلیت فعال است، پس از خروج آخرین کاربر، دیتابیس خاموش شده و منابع آن آزاد خواهد گردید.
سپس زمانی که کاربری در حال تلاش برای دستیابی به دیتابیس بمی باشد ،به صورت خودکار دیتابیس روشن خواهد شد.
هنگامی که این امکان غیر فعال باشد، دیتابیس حتی پس از خروج آخرین کاربر نیز همچنان فعال خواهد ماند.”
از آنجا که بیشتر مدیران سرور و دیتابیس ادمین ها درگیر مسایل بهینه سازی هستند، دورنمای بسته شدن دیتابیس هنگام عدم حضور کاربر در آن مناسب و منطقی به نظر می رسد.
اگر چه ، بسته شدن دیتابیس ، فایل هندلرها و بافرهای تخصیص یافته برای خاموش شدن دیتابیس در برخی از مواقع زیان بزرگی ندارد ولی بازگشت دیتابیس به حالت فعالیت در هنگام درخواست دستیابی مجدد نرم افزارها بدان با دردسرهای بزرگی همراه خواهد بود.
در حقیقت، اگر شما در خصوص چگونگی کارکرد تکنیک Connection Pooling در ارتباط برنامه های تحت نرم افزار net framework. با پایگاه داده مطالعه نموده باشید، متوجه شده اید که تمام هدف این تکنیک صرفه جویی در تعداد اتصالات به دیتابیس است.
به طور خلاصه، Connection Pooling تکنیکی است که به منظور استفاده از Connection های فعال موجود به جای ایجاد Connection جدید به دیتابیس، به منظور صرفه جویی در زمانی دستیابی به داده های بانک اطلاعاتی استفاده می شود.
تکنیک Pooling در طراحی سیستم های تجاری و بزرگ، ارزش و اهمیت خاصی پیدا می کند.
البته ممکن است در ظاهر، سیستم های طراحی شده بدون استفاده از این تکنیک دارای توان بازدهی خوبی باشند اما به طور حتم در دراز مدت از کارایی و بازدهی آنها کاسته خواهد شد.
به عنوان مثال متوجه خواهید شد که سیستم طراحی شده، قادر به پاسخگویی و پردازش همزمان هزار تراکنش در دقیقه توسط ده کاربر است اما توان عملیاتی همین سیستم در پردازش درخواست های هزار کاربر که ممکن است در هر دقیقه موجب ده تراکنش شوند، به شکل محسوسی افت خواهد کرد.
این مشکل از آنجا ناشی می شود که ایجاد هر Connection به دیتابیس، اصطلاحا موجب ایجاد سربار بر روی سیستم کلاینت (یا در برنامه های تحت وب، بر روی سرور) می شود.
این سربار به دلیل انجام مراحل مختلف قبول درخواست Connection به دیتابیس به وجود می آید; همانند تایید مجوز دسترسی به دیتابیس.
بیشتر مکانیزم هایی که به منظور ارتباط با دیتابیس ها مورد استفاده قرار می گیرند، به منظور جلوگیری از ایجاد این سربار، از تکنیک Connection Pooling استفاده می کنند.
همان طور که قبلا گفته شد، Connection Pooling از Connection های فعال و موجود، جهت ایجاد ارتباط با دیتابیس استفاده می کند و در حقیقت لیستی از Connection های موجود را برگشت می دهد.
در تکنیک Pooling، زمانی که کلاینت درخواست ایجاد ارتباط با دیتابیس را به برنامه می فرستد، به جای ایجاد مجدد Connection، این Connection از Pool استخراج شده و عملیات اتصال انجام می پذیرد.
شایان ذکر است که درگیری کمتر CPU با منابع و صرفه جویی در پهنای باند شبکه، از مزایای دیگر استفاده از این تکنیک است.
پس، این که پایگاه داده پس از بسته شدن آخرین ارتباط خود را خاموش کند، از جهت منطق تکنیک بهینه سازی connection pooling sql server معنا نخواهد داشت. به خصوص در شرایطی که چند ثانیه بعد از پایان یافتن روند terminate خودکار پایگاه داده، درخواست اتصال مجددی در شرف ارسال باشد.
بر همین اساس، با این که به نظر می رسد AutoClose امکان مناسبی باشد، اما در واقعیت موجب بروز برخی مشکلات عملکردی خواهد شد. به همین خاطر از نخستین چیزهایی که ما برای کاربران در هنگام پایش عملکرد دیتابیس بررسی می نماییم همین مورد است.
همچنین هنگامی که AutoClose فعال باشد، به طور بالقوه حجم ورودی های لاگ Sql را بالا خواهد برد.
(من سعی میکنم همیشه حجم داده های غیر مفید را در فایل لاگ تا آنجا که امکان دارد پایین نگه دارم، این موضوع به بالاتر بردن نسبت داده های مفید به غیر مفید در این فایلها و در نتیجه سهولت بررسی آن ها در هنگام نیاز و یا در مواقع بروز مشکل کمک شایانی خواهد کرد.)
از آنجا که بیشتر Sql Server DMV ها در عیب یابی ، بهینه سازی و همچنین شناسایی و حذف object های بی استفاده کاربرد دارند، داده ها و مقادیر خود را هر زمان که پایگاه داده offline می شود ریست می کنند، این مورد را می توان یک عارضه جانبی مضر برای فعال بودن خاموشی خودکار دیتابیس دانست.
این گفته که “در SQL Server نسخه های ۲۰۰۵ به بالا مشکل ایجاد سربار در عملکرد که توسط AutoClose به وجود می آمد برطرف شده است” چقدر صحیح است؟
به نقل از مایکروسافت :
در نسخه های پیشین Sql Server، قابلیت AUTO_CLOSE یک پروسه همگام بوده که هنگامی که یک اپلیکیشن به صورت مکرر و با تعداد زیاد به دیتابیس متصل شده و اتصال را از موتور پایگاه داده قطع می کرد می توانست بازدهی را تنزل دهد، از Sql Server 2005 به بعد این پروسه ناهنگام است و دیگر بازگشایی و بستن مکرر دیتابیس سبب کاهش بازدهی نمی شود.
در این صورت این موضوع یک تناقض با آن چه که تا اینجا در این مقاله گفتیم به وجود خواهد آورد، اما حقیقت این است که متاسفانه مطلب بالا گمراه کننده است، بلی، برخی از زیان های یاد شده برطرف شده و اکنون Sql Server سازگازتر از پیش دیتابیس را shut-down می کند.
اما سربار ایجاد شده در نتیجه تدارک و ایجاد اتصال های دوباره به دیتابیس به قوت خود باقی است، و مشکل بزرگ تر این است که SQL Server می بایست به صورت مجدد دیتا را روی بافر کپی کند تا بتواند به کوئری ها پاسخگو باشد ،همچنین تمامی کوئری های خارج شده از دیتابیس باید دوباره کامپایل شوند.
به طور خلاصه :
SQL Server در نسخه های بالای ۲۰۰۵ ممکن است عملیات مسدودیت را که پیشتر بدان اشاره شد را صورت ندهد اما تمامی مخاطرات عملکردی و نکات منفی فعال نمودن قابلیت AutoClose به ویژه در هنگام شروع به کار مجدد آن به قوت خود باقی است.
به چه هنگام دیتابیس ها AutoClose می شوند؟
به صورت پیش فرض دیتابیس های ساخته شده توسط SQL Server بر روی AutoClose تنظیم نیستند، (مگر اینکه در دیتابیس مدل شما صریحا” این قابلیت فعال باشد.) اما دیتابیس هایی که سایزشان به شدت بالا رفته دارند در نسخه ۲۰۰۰ و همچنین دیتابیس های ساخته شده در SQL Server Express به صورت پیش فرض بر روی AutoClose تنظیم هستند.
[irp posts=”۴۵۶۱″ name=”Microsoft SQL Server یا sql چیست و کاربرد آن بدانید”]
در خصوص دیتابیس هایی که جهت استقرار و به کار گیری در سیستم های قابل حمل و متوسط از قبیل لپ تاپ ها و سیستم های رومیزی و (نه سرورهای کامل) طراحی شده اند، می توان اندیشید که ممکن است قابلیت AutoClose مفید و سودمند واقع شود.تنها اگر نگران منابع سیستم هستید، بهتر است دیتابیس در هنگام بیکاری خاموش شود، چون در واقع خالی کردن منابع سرور در یک سیستم که شدیدا” مشغول فعالیت با بارکاری بالاست، به خودی خود یک مزیت بزرگ محسوب می شود. SQL Server به خودی خود در این زمینه بسیار خوب و سازگار عمل می کند، اگر از پردازنده و حافظه های امروزی و مدرن استفاده می کنید، روند بدون هیچ مشکلی پیش خواهد رفت.