مقدمة عن خطوات تنفيذ ال Query داخل ال Sql Server ؟
مفاهيم هامةExecution Plan
هي التي تخبر الSQL Server بكيفية تنفيذ ال Query حيث تحتوي على خطوات الخطوات وجميع العناصر المستخدمة وبتحليلها وفهمها يمكن تحسين أداء ال Query.
Relational Engine
هو المسئول عن استخراج ال Execution Plan المناسبة.
Storage Engine
هو المسئول عن تنفيذ ال Execution plan واستخراج نتيجة ال Query المرسلة.
عند ارسال Query معينة يقوم ال Relational Engine بفحصها واجراء عمليات عليها بواسطة ال Query Optimizer الذي يقوم بدورة بإنشاء أفضل Execution plan ممكنة.
تُرسل هذه ال Execution Plan الى ال Storage Engine الذي يقوم باستخدامها لجلب البيانات.
Query Parsing
هنا يتم فحص ال Query المرسلة للتأكد من عدم وجود أخطاء في كتابتها مثل كتابة كلمة SELEEECT بدلا من SELECT فان تم إيجاد أخطاء يتوقف الQuery Parser و يرسل خطأ اما اذا لم يجد أي أخطاء يقوم بإخراج ال Parse Tree و تسمى أيضا (Query Tree , Sequence Tree) و تحتوي هذه ال Tree على الخطوات اللازمة لتنفيذ ال Query.Algebrizer
هنا يتم استخدام ال Parse Tree المرسلة من المرحلة السابقة و يتم تحديد وفحص كافة الأسماء للعناصر الموجودة بال Query مثل ال (Tables , Columns ……etc.) و يقوم بتحديد أيضا كافة ال Data Types المتواجدة و تحديد أماكن ال Aggregates مثل (Group By , Sum , Max …. etc) وهذا العملية مهمة ,خاصة انه قد تكون أسماء لعناصر غير متواجدة بقاعدة البيانات و بالتالي يتم ارسال خطأ و التوقف عند هذه النقطة.الناتج من هذه المرحلة يطلق عليه Query Processor Tree ويتم إعطائها (Hash Code) ثم يقوم بإرسالها الى ال Query Optimizer لاستخراج ال Execution Plan.
Query OPTIMIZER
في هذه والمرحلة تكون المدخلات عباره عن ال query processor tree و الstatistics المتواجدة بقاعدة البيانات حيث تحتوي ال statistics على بيانات عن البيانات مثل درجة تكرار البيانات داخل العمود و طريقة توزيعها خلال مدى معين من قيم العمود وهذه البيانات تساعد بشكل كبير ال optimizer في اختيار ال indexs المناسبة وطريقة البحث داخلها.طريقة العمل
يقوم ال optimizer بفحص وجود اي execution plan مخزنة سابقا للquery المرسلة عن طريق البحث بال hashcode الخاص بال query processor tree فان وجد يقوم بارسالها للتنفيذ مباشرة اما اذا لم يجد يقوم بانشاء اكثر من execution plan و ايجاد اقل plan من حيث التكلفه (وقت CPU و كتابة و قراءة من ملفات قاعدة البيانات IO) ويقوم باستخدامها مع ملاحظة انه قد يستخدم plan اعلى تكلفه اذا وجد انه سيستغرق وقت اطول في انشاء plans جديدة من تنفيذ هذه ال plan ثم يقوم بعد ذلك بتخزينها في ال plan cache لاستخدامها مستقبلا.
تنفيذ ال Query
يقوم ال Storage Engine بتنفيذ ال query غالبا باستخدام ال execution plan المرسلة من ال optimizer الا انه في بعض الاحيان يتم تغيير ال actual execution plan عن ال plan المرسله مثلا في حالة اكتشاف ان ال statistics التي تم الاعتماد عليها لاستنتاج الplan غير محدثة او اي سبب اخر......................
التالي نظرة بتعمق في ال Execution Plan cache
تم بحمد الله :)
ليست هناك تعليقات:
إرسال تعليق