لوحة التحكم

09 Aug, 2008

SQL Execution Plan

السلام عليكم ورحمة الله وبركاته ...

ما يميز لغة SQL عن لغات البرمجة الإعتيادية هو أن لغات البرمجة الإعتيادية مثل C, C#, Java, VB.net هو انه لابد للمبرمج أن يخبر البرنامج عن طريق الكود كيف سيعمل البرنامج!
فمثلاً لو كان لدينا ملف يوجد به بيانات و أردنا أن نبحث داخل هذه البيانات لابد من أخبار لغة البرمجة ما الذي يجب عمله بالتحديد، أي كتابة خوارزمية خطوة بخطوة لتنفيذ البحث و لن يتخذ البرنامج قراراً بدون أن برمجه ليتخذ هذا القرار.
و لكن في SQL لو أردنا البحث داخل جدول كل ما علينا عمله هو كتابة Select...From...Where و محرك قواعد البيانات سواء كان Oracle أو SQL Server سيتولى مهمة كيفية البحث بالتحديد عن المبرمج. أي أننا سنقول له "ابحث" و قاعدة البينات ستتولى طريقة البحث بما تراه مناسباً.

و لكي يقوم محرك قواعد البيانات بالبحث، توجد هناك عدة خطوات تدور خلف الكواليس لهذه الآلية، و الهدف من هذه الآليات هو أن تقدم لك البيانات بأسرع و أفضل طريقة ممكنة.

ملاحظة: يستطيع محرك قواعد البيانات البحث بعدة طرق، و لكن توجد طرق أفضل غيرها للبحث و سيحرص محرك قواعد البيانات أن يعطيك أفضل نتيجة ممكنة.

و هذه الخطوات تتم عند إرسال أي استعلام Query لمحرك قواعد البيانات مراراً و تكراراً.

و يمكن تقسيم هذه الخطوات إلى خطوتين أسايتين هما:
1. خطوات تتم في المحرك العلائقي Relational Engine.
2. حطوات تتم في محرك التخزين Storage Engine.

في المحرك العلائقي، يتم تحليل Parse جملة الإستعلام Query ثم تمرر إلى محسن الاستعلام Query Optimizer و الذي يقوم بتوليد خطة التنفيذ Execution Plan الخاصة الجملة.
ثم يتم تمرير "خطة التنفيذ Execution Plan" إلى محرك التخزين Storage Engine على هيئة 0 و 1 (Binary Format). عند ذلك يقوم محرك التخزين Storage Engine باستخدام هذه الخطة للوصول إلى البيانات الأصلية أو تحديثها. و داخل محرك التخزين Storage Engine توجد العمليات مثل قفل الصف Row Lock و استخدام Index و ما إلى ذلك.

تحليل الاستعلام Query Optimizer:
عند ارسال جملة الاستعلام، فأول خطوة سوف تتم هي ارسالها إلى محلل الإستعلام، و يتم التأكد من صحة طريقة كتابة الجملة. و محلل الاستعلام يستقبل جملة الإستعلام كمدخل Input و سيولد شجرة التحليل Parser Tree كمخرج Output. و هذه الشجرة تمثل الخطوات المنطقية Logical Steps لكي يتم تنفيذ جملة الاستعلام.
بعد ذلك ترسل شجرة التحليل إلى عملية الجبرية Algebra Procces و التي تقوم بدورها بتوصيل Resolve جميع اسماء الجداول و الحقول إلى الاسماء المكتوبة في جملة الاستعلام. كما يقوم هذا المحرك "Algebra Procces" بتأكد من أنواع الحقول المكتوبة في الجملة بالتي توجد في جدول الأصلي مثل Int, Varchar و ما إلى ذلك.
و العملية الجبرية مهمة للغاية حيث أننا في جملة الاستعلام من الممكن ان نستخدم aliases و synonyms و التي لا توجد في قاعدة البيانات، كما أنه من الممكن أن توجد اسماء غير موجودة أصلاً في قاعدة البيانات و هي ليست aliases  أو synonyms.
و عند الانتهاء من العملية الجبرية Algebra Procces يتم اخراج شجرة Query Processor tree و التي تمرر إلى محسن الاستعلام Query Optimizer.

محسن الاستعلام Query Optimizer:
محسن الاستعلام هو عبارة عن برنامج موجود داخل محرك قواعد البيانات و الذي يقوم بإخبار محرك قواعد البيانات بكيفية العمل.
و باستخدام شجرة Query Processor tree و التي تم اصدارها من قبل محلل الاستعلام و باستخدام بعض الإحصائيات statistics التي يقوم محرك قواعد البيانات بجمعها، يتم اصدار خطة التنفيذ التي يرى محرك قواعد البينات أنها الأنسب.
يقوم محسن الاستعلام بتحديد إمكانية الوصول إلى البيانات عن طريق Inedx؟ ماهو نوع الـ Jion الذي سيستخدم؟ و يتم تحديد هذه الأمور بناء على تحديد كلفة Cost خطة العمل execution Plan التي سيتم اصدارها و التي تعتمد على حجم استخدام المعالج CPU و على كلفة القراءة و الوصول إلى المعلومات I/O و كم هي سرعة الوصول.
سيقوم محسن الاستعلام باصدار عدة خطط تنفيذ، و بعد ذلك سيقوم بالمقارنة بينها بناء على المعطيات أعلاه، و سيتم اختيار أقل هذه الخطط كلفة على محرك قواعد البيانات و الذي يستخدم الموارد بأقل قدر ممكن. (الموارد: CPU, I/O).
و في بعض الأحيان سوف يختار المحرك أي خطة إذا اعتقد أن المقارنة فيما بينها سوف تأخذ وقت أكبر من وقت المقارنة فيما بينها.
"إذا كانت خطة التنفذ لاستعلام معين موجودة في الـ Cache من قبل لن يتم تنفيذ كل هذه الخطوات من جديد."

في النهاية عندما يقوم محسن الاستعلام باختيار خطة التنفيذ سوف يقوم بحفظها في الـ cache لكي يتم الاستفادة منها مستقبلاً.

منفذ الاستعلام Query Execution:
بعد اصدار خطة التنفيذ، سيتم ارسالها إلى منفذ الاستعلام، و سيتم الدخول إلى محرك النخزين Storage Engine و الذي سيتم التنفيذ فعلاً داخله.
بعد ذلك سوف تعاد نتيجة الاستعلام إليك.

كل هذه الخطوات سيتم نفيذها عندما ترسل جملة استعلام Query Statment إلى محرك قواعد البيانات لديك.


في القريب إن شاء الله سوف أتطرق إلى حطة التنفيذ Execution Plans و كيف تستطيع قرائتها و كيف من الممكن ان تستفيد من هذه الخطة في سبيل تحسين جملة الاستعلام التي نكتبها.


مع تحياتي ... طلال.

 

Del.icio.usDigg It!DZone It!Reddit

Read Full Article



اخر عملائنا

tarig1.com
rgccampaign.net
laj-sa.com
vaacs2009.com
almsamm.com
teoor.net
عدد المواقع المستضافة :
عملاء الاستضافة :
عملاء الريسلر :