SQL Server محصول شرکت Microsoft یک سیستم مدیریت پایگاه داده رابطه ای بسیار محبوب است که قابلیت ذخیره، بازیابی و مدیریت داده ها در یک پایگاه داده رابطه ای را فراهم می کند. با توجه به اهمیت و کاربرد بسیار زیاد آن در حوزه های مختلف در سلسله مقالاتی به بررسی مانیتورینگ این سیستم مدیریت پایگاه داده محبوب خواهیم پرداخت. هدف از این مقاله آشنایی باSQL Server و مانیتورینگ آن است که در بخش اول(مقالهی جاری) به معرفی ساختار و مولفه های مختلف تشکیل دهنده آن مانند پروتکل های ارتباطی، database engine و بافر را پرداخته میشود. در مقالات بعدی از این سری به طور خاص به مانیتورینگ SQL Server از ابعاد مختلف آن (مانند حافظه، بافر و ...) میپردازیم.
امروزه با رشد فناوری های مختلف و افزایش هر روزه تعداد کاربران اینترنتی حجم داده های تولید شده در اینترنت روز به روز بیشتر می شود. حجم زیاد داده ها نیاز به ذخیره سازی، پردازش و تحلیل دارد تا بتوان اطلاعات مختلف و مفیدی را از آن استخراج نمود. داده ها از نظر ساختار به طور کلی به دو نوع رابطه ای (Relational) و غیر رابطه ای (Non-Relational) تقسیم بندی می شوند. داده های رابطه ای داده هایی هستند که در پایگاه داده های رابطه ای (Relational Databases) به صورت جداولی دارای سطر و ستون ذخیره می شوند. داده های غیر رابطه ای نیز در پایگاه داده هایی به همین نام به فرمت هایی مانند اسناد و گراف ذخیره می شوند. سیستم های مدیریت پایگاه داده رابطه ای که به RDBMS (Relational Database Management System) شناخته می شوند به منظور ذخیره سازی، بازیابی و مدیریت داده های رابطه ای به کار می روند. تنوعی از چنین سیستم هایی در حوزه تکنولوژی وجود دارد، چند مورد از پرکاربردترین آنها عبارتند از: Oracle، PostgreSQL و MS SQL Server.
SQL Server یک سیستم مدیریت پایگاه داده رابطه ای است که توسط مایکروسافت توسعه داده شده است. این محصول با نام کامل Microsoft SQL Server شناخته می شود. این محصول نرم افزاری با هدف ذخیره، بازیابی و به طور کلی مدیریت داده های رابطه ای ارائه شده است و بر مبنای زبان SQL می باشد. طراحی SQL Server براساس معماری کلاینت سرور است. سرور در خواست های کلاینت ها برای ذخیره، بازیابی یا بروزرسانی داده ها را دریافت می کند. این درخواست ها را پردازش کرده و پاسخ مناسب را به درخواست برمی گرداند. البته ذکر این نکته ضروری است که یک RDBMS عملکردی فراتر از دسترسی و بازیابی داده ها دارد. برای مثال یکی از وظایف این سیستم ها مدیریت بافر است. مدیریت بافر به این منظور به کار می رود که داده هایی که بیشتر مورد استفاده می باشند در حافظه ای قرار بگیرند که سرعت دسترسی بالایی دارد با این هدف که کارایی کل سیستم افزایش یابد. با توجه به محبوبیت زیاد SQL Server در میان توسعه دهندگان حوزه تکنولوژی در ادامه به برخی از ویژگی های این RDBMS می پردازیم.
ویژگی های مختلف و امکاناتی که SQL Server ارائه می دهد به شکل زیرسیستم هایی ارائه شده است. براساس آخرین اطلاعات از سایت مایکروسافت سرویس ها و ویژگی های ارائه شده برای نسخه 2022 از SQL Server عبارتند از:
SQL Server هم بر روی سیستم عامل ویندوز و هم سیستم عامل لینوکس قابلیت اجرا دارد. معماری SQL Server از ماژول های مختلفی تشکیل شده است که هر یک وظایف مخصوص به خود را انجام می دهد. این معماری و ماژول های مختلف آن در شکل زیر قابل مشاهده است.
به طور کلی در این معماری سه بخش اصلی وجود دارد:
درخواست هایی که از سمت کلاینت ها به سرور SQL ارسال می شود باید ابتدا از لایه پروتکل عبور نماید. ارتباط بین کلاینت ها و سرور که از طریق لایه پروتکل صورت می گیرد به سه طریق قابل انجام است:
در این لایه ماژول های مختلفی وجود دارد که به طور کلی دو بخش اصلی در این لایه عبارتند از: Relational Engine (Query Processor) و Storage Engine. در ادامه به معرفی این دو می پردازیم:
1.2.Relational Engine (Query Processor)
این ماژول مسئول مدیریت و اجرای کوئری های SQL است. همچنین یکی از کارهایی که این ماژول انجام می دهد بهینه سازی کوئری ها است. در این ماژول سه بخش اصلی وجود دارد:
یکی از بخش های مهم در معماری SQL Server می باشد. وظیفه این بخش ذخیره داده در یک سیستم ذخیره سازی مانند Disk یا SAN و بازیابی آن در زمان نیاز می باشد. داده ها در SQL Server به صورت صفحات داده (Data Pages) ذخیره می شوند که سایز هر صفحه 8KB است که کوچکترین واحد ذخیره سازی در SQL Server است. ماژول Storage Engine از بخش های مختلفی تشکیل شده است که برخی از آنها عبارتند از: Access Methods، Transaction Manager، Buffer Manager و ... . در ادامه به معرفی چند مورد از این بخش¬ها می پردازیم.
سومین بخش از معماری SQL Server که در شکل اول نیز قابل مشاهده است لایه سیستم عامل است که با نام SQLOS شناخته می شود. این لایه به عنوان لایه زیرین SQL Server Database وظایف بسیار مهمی را در این معماری برعهده دارد. برخی از این وظایف عبارتند از:
با توجه به اینکه SQL Server به عنوان یک سیستم مدیریت پایگاه داده رابطه ای بسیار پرکاربرد و محبوب می باشد، نظارت بر نحوه عملکرد آن اهمیت بسیار زیادی دارد. یکی از مواردی که باید به آن توجه نمود این است که SQL Server ممکن است در ابتدا یک سیستم ساده به نظر آید که با استفاده از آن می توان پایگاه داده ایجاد کرد. عملیات مرتبط با پایگاه داده مثل ایجاد، خواندن، نوشتن داده و ... را انجام داد. اما به مرور با افزایش حجم داده و استفاده بیشتر از این سیستم متوجه خواهید شد که همه چیز به سادگی که به نظر می رسد نیست و این سیستم دارای عملکردهای پیچیده ای مانند مدیریت حافظه، بافر، زمانبندی، مدیریت مصرف پردازنده و حافظه و ... می باشد. که بروز اشکال در هر یک از این بخش ها به شدت بر کارایی کل سیستم تاثیر خواهد گذاشت. نکته بسیار مهم این است که بدون وجود راهکاری که بتوان در ابتدا علت مشکل را تشخیص داد به سادگی و بدون ابزارهای خودکار بسیار سخت خواهد بود. با توجه به معرفی معماری SQL Server در بخش قبل، مشخص است که پیچیدگی های زیادی در بخش های مختلف آن وجود دارد. ضعف عملکرد و بروز مشکل در هر یک از بخش های معماری معرفی شده می تواند منجر به کند شدن و پایین آمدن کارایی کل سیستم شود. لذا ضرورت وجود راهکارهایی به منظور مانیتورینگ و نظارت بر عملکرد بخش های مختلف SQL Server بسیار ضروری است. اما به منظور مانیتورینگ SQL Server چه ابعاد و جنبه هایی را باید مد نظر قرار داد؟ چه پارامترها و شاخص هایی را باید در کل این سیستم مانیتور کرد؟ در ادامه به پاسخ این سوال ها خواهیم پرداخت.
برای اینکه بتوان یک سیستم را از ابعاد و جنبه های مختلف مانیتور و ارزیابی نمود لازم است که بخش های مختلف آن به طور کامل شناسایی شود. در این مقاله SQL Server معرفی شد و با معماری و ماژول های مختلف تشکیل دهنده آن آشنا شدیم. عملکردهای متفاوت آن مانند نحوه ذخیره در Cache، Lazy Writer و ... را شناختیم. در ادامه مروری مختصر به مانیتورینگ SQ Server خواهیم داشت و در مقاله های آتی که منتشر خواهد شد به تفصیل شاخص های مختلف SQ Server بررسی خواهند شد. برای مانیتورینگ این سیستم لازم است از صحت و درستی اجرای هر یک از عملکردها و ماژول های آن اطمینان حاصل نماییم؛ زیرا بروز خطا یا هر مشکلی در هر یک از آن ماژول ها می تواند بر روی کارایی کل سیستم تاثیر گذارد. عملکردهای مهمی در بخش قبل معرفی شدند مانند مدیریت حافظه و پردازنده، مدیریت بافر و حافظه Cache، Lock ها و ... . که هر یک نیاز به مانیتورینگ و نظارت دارند. لذا به طور کلی می توان به برخی از جنبه های مانیتورینگ SQL Server اشاره نمود:
برخی از پلتفرم ها و ابزارهایی که از مانیتورینگ SQL Server پشتیبانی می کنند عبارتند از: