برای رانندگی، به شناخت کامل جزئیات موتور و نحوه عملکرد آن نیازی نیست، اما شناخت بهتر عملکرد موتور میتواند به رانندگی بهتر و سریعتر کمک کند، به همین شکل نیازی نیست که عملکرد SQL Server را هنگام اجرای یک کوئری بدانیم، اما شناخت نحوه عملکر داخلی SQL Server میتواند به ما در نوشتن دستورات بهینه تر کمک کند.
هنگامی که دستوری به SQL Server ارسال میگردد، موتور SQL Server آن دستور را به مراحل قدم های کوچکتری تقسیم میکند. هنگام بررسی کوئری ها مطالب مختلفی در نظر گرفته میشوند، مانند ساختار جداول، وجود داشتن ایندکس ها و ...
اگر هربار اطلاعات پایه برای هر درخواست جمع آوری شود بهینه نخواهد بود. به همین دلیل SQL Server اطلاعات اساسی را یک برا جمع آوری میکند و نگه داری میکند تا در دفعات بعد از این اطلاعات استفاده کند. اطلاعاتی مانند تعداد ردیف های موجود یا ردیف های یکتا. موتور SQL Server از این اطلاعات برای ایجاد یک کوئری بهینه استفاده میکند.
در صورتی که کوئری بزرگی نوشته شود، این کوئری به کوئری های کوچکتری تقسیم میشود و این کوئری های کوتاه تر جداگانه مورد بررسی قرار میگیرند. این مراحلی که از آنها نام بردیم در اصطلاح execution plan نامیده میشوند. در طی این مراحل کوئری های نوشته شده، توسط موتور SQL Server بهینه میشوند و ممکن است کوئری نوشته شده، توسط بهینه ساز SQL Server کاملا بازنویسی شود. موتور SQL Server دستورات SQL ارسال شده را اجرا نمیکند، دستوراتی که به زبان SQL مینویسیم فقط راه ارتباطی ما با SQL Server هستند، نه راهی که SQL Server برای به دست آوردن داده ها میرود. قبل از اینکه SQL Server بخواهد این دستورات را برای پردازنده ارسال کند باید آنها را کامپایل کرده و به دستورات سطح پایین سیستمی تبدیل کند. دستورات کامپایل شده بهینه در قسمتی از حافظه ذخیره میشوند. این دستورات کامپایل شده به همراه Execution plan در محلی از حافظه ذخیره میشود که به این زوج ذخیره شده Procedure cach میگویند. به این روش اگر یک کوئری چندین بار اجرا شود، دیگر نیازی نیست هربار از این اطلاعات ایجاد شود و این مراحل طی شود، بلکه تنها اطلاعات از Procedure cach خوانده میشود و اجرا میگردد.
اطلاعاتی که در طی یک کوئری خوانده میشود نیز در محلی به نام Buffer cache ذخیره میشود، تا اگر داده یکسانی در دو کوئری درخواست شد، از داده های موجود در این کش استفاده میشود.
در اینجا با مراحل اجرای یک کوئری آشنا میشویم:
1- در ابتدا کوئری ارسال شده از نظر نحوی بررسی میشود تا خطا نداشته باشد.
2- دسترسی ها و شرایط امنیتی بررسی میشود.
3- قسمت بهینه سازی وارد عمل میشود و کوئری را بررسی میکند تا بهترین نحوه اجرای دستورا دلخواه را بیابد.
4- دستور SQL ارسال شده، به دستورات داخلی SQL Server تبدیل میشود و در اصطلاح کامپایل میشود.
5- نسخه کامپایل شده در کش قرار داده میشود.
6- دستور اجرا میشود.
7- داده های خوانده شده به درخواست کننده ارسال میشود.
بعد از اینکه اولین بار کوئری اجرا شد، دیگر مراحل 1-5 اجرانمیشود، بلکه دستور مستقیما از کش بارگزاری و اجرا میشود و داده های خوانده شده به درخواست کننده تحویل میگردد.
0 نظرات:
ارسال یک نظر