2017/02/06

شرح SQL Server FileGroups بالعربي

مقدمة

في هذا المقال سيتم شرح ما هي ال FileGroups وما الحاجة اليها وكيف الاستفادة منها ولكن لن يتم التركيز على كتابة ال Syntax الخاص بانشاء ال FileGroups حيث ال Syntax يمكن ايجاده في اماكن كثيرة ولكن سيتم التركيز في هذا المقال على المفاهيم.


قواعد بيانات ال SQL Server يتم تخزين بياناتها في نوعين ملفات اساسيين 
Data File And Log File
Primary Data File
هو الملف الذي تخزن فيه البيانات الفعلية ويكون بامتداد MDF
Transaction LOG File
وهذا الملف له عدة وظائف ولكن اشهرها انه ملف مرحلي يتم فيه تخزين البيانات مؤقتا الى ان تنتقل الى ملف ال Data File ويكون بامتداد LDF ولكن لماذا لا يتم الكتابة مباشرة في ملف ال Data File؟
تخيل معي انك تقوم باعداد برنامج للقيام بادخال فاتورة مبيعات وهذه الفاتورة بياناتها على جدولين في قاعدة البيانات مثلا
(الفاتورة و اصناف الفاتورة) تخيل انه تم نجاح الادخال في الجدول الاول ولم ينجح في الثاني , سينتج عن ذلك وجود فواتير بدون اصناف مثلا
ولحل هذه المشكلة تجد اهمية استخدام ال Transaction LOG File حيث يتم كتابة البيانات فيه, فاذا نجحت كل العمليات , يتم نقلها الى ال Data File اما اذا حدث خطأ في اي مرحلة , يتم الغاء العملية كأن لم تكن.

ملاحظة : يوجد بقاعدة البيانات خاصية باسم Recovery Model ولها 3 انواع Simple , Full , Bulk Log وحسب هذه الخاصية يتم الاحتفاظ بالبيانات داخل ال Log File بعد نقلها لل Data File ام لا.

FileGroups

الوضع الافتراضي لل SQL Server انه يوجد Data File واحد , LOG File واحد وهذان الملفان داخل FileGroup باسم Primary.
فال FileGroup هي عبارة عن وعاء لملفات ال SQL Server فقد تحتوي قاعدة البيانات على اكثر من FileGroup وداخل ال FileGroup الواحدة ممكن اضافة اكثر من ملف.

كل جدول او Index داخل قاعدة البيانات يمكن تحديد ال FileGroup الخاصة به وبذلك تكون بيانات هذا الجدول او ال Index متضمنة داخل ملفات ال FileGroup.
ملفات ال FileGroups تكون بامتداد (NDF (Secondary Data File فكل قاعدة بيانات لابد ان تحتوي على ملف MDF واحد فقط وممكن على اكثر من NDF او لا يوجد.




ولكن ما هي الحاجة لوجود اكثر من FileGroup واكثر من ملف داخل ال FileGroup ؟

احتياجات خاصة بمساحة التخزين

تخيل معي ان لديك قاعدة بيانات كبيرة وتريد توزيع ملفاتها على اكثر من درايف لاغراض المساحة المتاحة , فاذا كانت قاعدة البيانات في ملف واحد لن تستطيع توزيعها في اكثر من مكان بينما اذا قمت بعمل اكثر من FileGroup وكل FileGroup تكون لها ملفاتها الخاصة تكون لديك مرونة في توزيع قاعدة البيانات على المساحة المتاحة.


احتياجات خاصة بتحسين الاداء

من اكثر التحديات التي تواجه اداء قواعد البيانات هي سرعة عمليات الIO (القراءة والكتابة في ال Hard Disk) 
ولتحسين سرعة القراءة والكتابة يقوم مديروا قواعد البيانات بفصل الجداول الكبيرة والتي يوجد علاقات بينها في اكثر من FileGroup ومن ثم توزيع ملفات ال FileGroup على Hard Disks مختلفة, ونتيجة لذلك يؤدي الى جعل عملية الكتابة والقراءة على ملفات قاعدة البيانات  تزامنية Asynchronous الى حد ما مما يؤدي الى تحسين الاداء.

احتياجات خاصة بالنسخ الاحتياطية

تتيح ال SQL Server اجراء نسخ احتياطي لل FileGroups وتستخدم هذه الميزة في تسريع عملية النسخ الاحتياطي لقواعد البيانات العملاقة فمثلا اذا كان لديك قاعدة بيانات كبيرة تحتوي على جداول ارشيفية لبيانات قديمة فاذا قمت باخذ نسخة احتياطية لكل قاعدة البيانات تاخذ وقت طويل بينما يمكنك ان تفصل هذه الجداول في FileGroups وبالتالي تاخذ نسخة احتياطية للبيانات الحالية بدون البيانات الارشيفية مرة يوميا بصورة اسرع وتأخذ نسخة احتياطية لكامل قاعدة البيانات بما فيها البيانات الارشيفية مرة كل اسبوع مثلا.

FileGroups and Log File

يمكن اضافة اكثر من LOG File على اكثر من FileGroup ولكن الحاجة لذلك تكون محدودة فقط اذا كانت هناك مشكلة في التخزين ومطلوب الاحتفاظ بال Log file القديم.
فالحاجة الى الاحتفاظ ببيانات ال Log File تكون قليلة حيث ان هذا الملف مرحلي ولا يحتفظ ببيانات فعلية وعند اخذ نسخة احتياطية منه يتم تفريغ بياناته وبعد ذلك من الممكن عمل Shrink له لتقليل مساحته ولكن في بعض الاحيان اذا كانت قاعدة البيانات مفعل عليها بعض الخصائص مثل ال Mirroring اوخصائص اخرى لا يمكن عمل Shirink.
كما ان ملف ال Log File طبيعة الكتابة عليه تكون Sequential دائما , فاضافة اكثر من ملف على اكثر من Hard Disk مثلا لن يؤثر في سرعة الكتابة حيث انه سيتم الكتابة في الملف الاول الى ان يمتلىء ثم يتم الكتابة في الملف الثاني.

مراجع

كتاب Pro SQL Server Administration
http://www.apress.com/us/book/9781484207116

========================
تم بحمد الله

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

مقدمة عن الDevOps

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