مقدمة: يقدم لنا SQLServer2005SP2 وظيفة vardecimal التي تسمح بتخزين البيانات العشرية الأصلية ذات الطول الثابت في ملف البيانات بتنسيق متغير الطول بناءً على ذلك، تم تحسين وظيفة ضغط البيانات.
بدأت وظيفة ضغط البيانات في SQL Server لأول مرة في SQL Server 2005. تمت إضافة تنسيق تخزين جديد يسمى vardecimal إلى إصدارات المؤسسة والتطوير. يمكن أن تؤثر هذه الوظيفة على الحقول العشرية والرقمية. إذا كانت الجداول الموجودة في قاعدة البيانات تحتوي على بيانات من النوع العشري والرقمي، فيمكن للمستخدمين استخدام تنسيق التخزين العشري لتقليل حجم قاعدة البيانات. تجدر الإشارة إلى أن مقدار المساحة التي يمكن حفظها يعتمد على عدد أعمدة البيانات العشرية أو الرقمية التي تحتوي عليها قاعدة البيانات، وتوزيع البيانات، وحجم الجدول.
استخدم ضغط البيانات
أصبحت وظيفة ضغط البيانات هذه ميزة جديدة أخرى في SQL Server 2008: ضغط البيانات، باستخدام هذه الميزة، يمكنك تقليل حجم المجموعات الفرعية من جداول البيانات والفهارس والأقسام. ولكن لماذا يجب تحسين هذه الوظيفة التي كانت موجودة سابقًا في SQL Server 2005 في إصدار الجيل الجديد من النظام في بيئة السوق حيث تتناقص تكاليف التخزين باستمرار، ما هي الفوائد التي يمكن أن تجلبها تقنية ضغط البيانات للمؤسسات؟
على الرغم من أن تكاليف التخزين لم تعد عاملاً حساسًا تهتم به المؤسسات، إلا أن هذا لا يعني أن حجم قاعدة البيانات لن يكون له تأثير على كفاءة عمليات المؤسسة، لأنه بالإضافة إلى التأثير على تكاليف التخزين، فإن حجم قاعدة البيانات يرتبط أيضًا بشكل كبير بالإدارة التكاليف وقضايا الأداء.
بادئ ذي بدء، نظرًا لأن قاعدة البيانات تحتاج إلى نسخ احتياطي، فكلما زاد حجم قاعدة البيانات، زاد وقت النسخ الاحتياطي، وستزيد تكلفة أجهزة النسخ الاحتياطي. ومن تكاليف الإدارة الأخرى تكلفة صيانة قاعدة البيانات. من حيث الأداء، عندما يقوم SQL Server بمسح القرص لقراءة البيانات، فإنه يقرأ البيانات في وحدات من صفحات البيانات. لذلك، إذا كانت صفحة البيانات تحتوي على المزيد من صفوف البيانات، فسيحصل SQL Server على المزيد من البيانات في صفحة بيانات واحدة يكون أكثر من ذلك، الأمر الذي سيؤدي أيضًا إلى تحسينات في الأداء.
بالمقارنة مع البيانات المضغوطة العشرية في SQL Server2005SP2، تستخدم بيانات الاختبار الصادرة حاليًا بواسطة SQLServer2008 تقنية ضغط البيانات الجديدة لتحقيق معدل تخزين أعلى، إلى جانب زيادة مساحة التخزين للتعافي من الكوارث من قبل المؤسسات، كل هذا SQLServer2008 له مزايا هذه الميزة الجديدة.
الصفحة 2: وضعان للضغط
بعد فهم الفوائد الحقيقية لضغط البيانات، يمكنك أن تشعر باختراق هذا المفهوم. بمساعدة ضغط البيانات، يتم تقليل تكاليف التخزين، وتحسين أداء الاستعلام، وتقليل الإدخال/الإخراج، وزيادة معدلات النقر المؤقتة. يمكن ملاحظة أن هذه الوظيفة لا تزال فعالة جدًا في عملية التطبيق. هناك طريقتان لتطبيق ضغط البيانات في SQL Server 2008، وهما ضغط الصفوف وضغط الصفحة، فيما يلي مقارنة مختصرة بين هذين النوعين من ضغط البيانات.
تحديد نوع الضغط أثناء معالج ضغط البيانات
ضغط الصف. يمكن لضغط الصف تخزين الأنواع ذات الطول الثابت كأنواع تخزين ذات طول متغير. على سبيل المثال، عمود char(100) المخزن بتنسيق تخزين متغير الطول سيستخدم فقط البيانات المحددة بواسطة مقدار التخزين. يحتاج "SQLServer2008" المخزن فقط إلى تخزين 15 حرفًا بعد الضغط بدلاً من 100 حرف فقط، وبالتالي توفير 85% من مساحة التخزين. يعد هذا امتدادًا لفكرة تنسيق التخزين العشري المقدم في SQLServer2005ServicePack2. وتجدر الإشارة أيضًا إلى أن وضع الضغط هذا سيعمل على تحسين القيم NULL و0 لجميع أنواع البيانات بحيث لا تشغل أي بايت.
على الرغم من أن ضغط بيانات SQLServer2008 يعمل على توسيع هذه الوظيفة، إلا أنه تتم معالجة كافة أنواع البيانات ذات الطول الثابت، بما في ذلك الأعداد الصحيحة والشار والعائمة. الآن لا يتم تخزين البيانات في بايتات ذات حجم ثابت، ولكن في الحد الأدنى المطلوب من البايتات، والتي يمكن تنفيذها ببساطة عن طريق تمكين ضغط الصف. ومع ذلك، لا يمكن لضغط الصف التعامل مع أنواع بيانات XML، وBLOB، وMAX.
وضع ضغط الصفحة. تعمل ميزة الضغط هذه، المبنية على ضغط الصف، على تقليل البيانات المخزنة الزائدة عن الحاجة عن طريق تخزين نفس بايتات الحدث على الصفحة مرة واحدة فقط. يتم ضغط الجداول والفهارس باستخدام ضغط الصفحات، بالإضافة إلى ضغط الصفوف، يتم أيضًا استخدام ضغط البادئة وضغط القاموس.
سيؤدي ضغط البيانات إلى تقليل حجم جدولك أو مقاييس الفهرس، فمن الأفضل تقييم توفير المساحة أولاً بعد الضغط. يتم ضغط كل صفحة على حدة، ويتم أيضًا تخزين البادئات والقواميس داخل الصفحة. نظرًا لأن الصفحة هي الوحدة الذرية لتخصيص التخزين، فليس من المنطقي ضغط نصف صفحة في ربع صفحة، لذلك لن تبدأ عملية الضغط إلا عندما يكون محتوى الصفحة ممتلئًا تقريبًا.
هناك أيضًا مقايضة في الأداء عند استخدام ضغط الصفوف والصفحات، حيث سيرتفع استخدام وحدة المعالجة المركزية (CPU)، لكن استخدام الإدخال/الإخراج وبصمة الذاكرة سينخفضان. ولكن قد تصبح كافة خيارات الضغط خيارات حصرية لـ SQLServer2008 Enterprise Edition.
الصفحة 3: كيفية استخدام ضغط البيانات
الملحق (كيفية استخدام ضغط البيانات):
(1) تمكين ضغط الصف
إذا أردنا تمكين ضغط الصفوف في جدول محدد، فيمكننا تنفيذ العبارة التالية:
إنشاء جدول Alpha(col1 int,col2 char(1000))
مع (ضغط البيانات = الصف)
(2) تمكين ضغط الصفحة
إذا أردنا تمكين الضغط على قسم محدد، يمكننا تنفيذ العبارة التالية:
إنشاء جدول Alpha_Partition(col1 int,col2 char(1000))
ONPartitionScheme (العمود 1)
مع
(ضغط البيانات = الصفحة قيد التشغيل)
الأقسام(1-3)
(3) تعديل الضغط
إذا كنت تريد تعديل فهرس موجود لاستخدام الضغط، فقم بتنفيذ العبارة التالية:
تغيير مؤشر Collndx على إعادة بناء ألفا
مع (DATA_C0MPRESSION=PAGE)
تغيير مؤشر Collndx على إعادة بناء ألفا
القسم = 2
مع (DATA_COMPRESSION=PAGE)
يمكن ضبط خيارات الضغط في SQL Server 2008 عبر الخيار عند إنشاء جدول أو فهرس، على سبيل المثال:
إنشاء جدول TestTable (col1 int,col2varchar(200))WITH(DATA_COMPRESSION = ROW);
إذا كنت بحاجة إلى تغيير خيارات الضغط لقسم ما، يمكنك استخدام العبارة التالية:
تغيير قسم إعادة بناء جدول الاختبار = 1 مع (ضغط البيانات = الصفحة)؛
إذا كنت بحاجة إلى تعيين خيارات ضغط مختلفة لكل قسم من الجدول المقسم، فيمكنك استخدام العبارة التالية: (يمكن لـ SQLServer2008 استخدام خيارات ضغط مختلفة لأقسام مختلفة. وهذا مهم جدًا لتطبيقات مستودع البيانات لأن جدول الحقائق الخاص بمستودع البيانات عادةً ما يكون هناك قسم واحد أو عدة أقسام فعالة، وغالبًا ما تحتاج البيانات الموجودة في هذه الأقسام إلى التحديث لتجنب ضغط البيانات الذي يؤدي إلى حمل معالجة إضافي لتحديثات البيانات على هذه الأقسام، يمكنك إيقاف تشغيل خيار الضغط لهذه الأقسام.
إنشاء جدول PartitionedTable (col1 int، col2varchar(200))
على PS1 (العمود 1)
مع (DATA_COMPRESSION = الصف على الأقسام (1)،
DATA_COMPRESSION = صفحة على القسم (2 إلى 4))؛
إذا كنت تقوم بتعيين خيارات الضغط لفهرس، فيمكنك استخدام:
إنشاء INDEX IX_TestTable_Col1 ONTestTable(Col1)WITH(DATA_COMPRESSION = ROW);
إذا كنت تريد تعديل خيارات الضغط الخاصة بالفهرس، فيمكنك استخدام:
ALTER INDEX IX_TestTable_Col1 ONTestTableREBUILDWITH(DATA_COMPRESSION = ROW);