2015/11/07

مقدمة عن خطوات تنفيذ ال Query داخل ال Sql Server

مقدمة عن خطوات تنفيذ ال 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

تم بحمد الله :) 

ليست هناك تعليقات:

مقدمة عن الDevOps

في هذا المقال سوف اتحدث عن مقدمة بسيطة عن ال DevOps ولماذا لابد ان تهتم فرق تطوير البرمجيات به وما هي النتائج المترتبة عن استخدام اساليبه ...