كيفية التحقق من استخدام مساحة القرص للجداول في SQL Server باستخدام T-SQL

عند إدارة قاعدة بيانات، فإن فهم مقدار مساحة القرص التي تستهلكها كل جدول أمر حيوي لأغراض التحسين وتخطيط السعة. بينما قد يكون العديد من المستخدمين معتادين على التحقق من خصائص الجداول من خلال واجهة SQL Server Management Studio (SSMS) الرسومية، فإن معرفة كيفية أداء نفس المهمة باستخدام T-SQL يمكن أن يكون مفيدًا للغاية، خاصة لأغراض الأتمتة ومهام إدارة قاعدة البيانات المتقدمة.

في منشور المدونة هذا، سوف نستعرض طريقة بسيطة لتحديد مساحة القرص التي تشغلها الجداول في SQL Server من خلال T-SQL. هذه الطريقة لا تعزز كفاءتك فحسب، بل توفر أيضًا فرصة للغوص أعمق في برمجة SQL.

نظرة عامة على الحل

سنستخدم الجداول المؤقتة بالاشتراك مع إجراء تخزين النظام sp_spaceused لجمع المعلومات حول الجداول المختلفة في قاعدة بياناتك. إليك تحليل لما سنحققه:

  1. إنشاء جداول مؤقتة لتخزين معلومات الحجم.
  2. تنفيذ أمر sp_spaceused لجمع بيانات الحجم من جميع الجداول.
  3. تحليل البيانات المجمعة إلى مقاييس يمكن قراءتها.
  4. عرض النتائج مرتبة حسب الحجم المحجوز.

لنبدأ!

الخطوة 1: إنشاء جداول مؤقتة

الخطوة الأولى هي تعريف جدولين مؤقتين سيساعداننا في تخزين تفاصيل الحجم التي سنستخرجها. في SQL Server، يتم تمييز الجداول المؤقتة بعلامة #.

CREATE TABLE #tmpSizeChar (
     table_name sysname ,
     row_count int,
     reserved_size varchar(50),
     data_size varchar(50),
     index_size varchar(50),
     unused_size varchar(50))                              

CREATE TABLE #tmpSizeInt (
     table_name sysname ,
     row_count int,
     reserved_size_KB int,
     data_size_KB int,
     index_size_KB int,
     unused_size_KB int)   

الشرح:

  • #tmpSizeChar: يحتفظ بالنتائج في تنسيق حرفي، والذي يحتفظ بالحجم مع الوحدات (مثل MB، KB).
  • #tmpSizeInt: يخزن النتائج في تنسيق عدد صحيح لتسهيل الحسابات السهلة.

الخطوة 2: جمع بيانات الحجم من الجداول

نستخدم إجراء التخزين sp_msforeachtable لتشغيل الأمر sp_spaceused على كل جدول في قاعدة البيانات. يقدم هذا الأمر معلومات تفصيلية عن استخدام المساحة لكل جدول.

SET NOCOUNT ON
INSERT #tmpSizeChar
EXEC sp_msforeachtable 'sp_spaceused ''?'''

الشرح:

  • NOCOUNT ON: يمنع إرجاع الرسالة التي تشير إلى عدد الصفوف المتأثرة بعبارة T-SQL، مما يحسن الأداء للبرمجيات التي تحتوي على عدة عبارات.

الخطوة 3: تحليل البيانات المجمعة

بعد جمع البيانات، نحتاج الآن إلى تحويل البيانات الحرفية إلى قيم عددية مناسبة للتحليل.

INSERT INTO #tmpSizeInt (
        table_name,
        row_count,
        reserved_size_KB,
        data_size_KB,
        index_size_KB,
        unused_size_KB
        )
SELECT  [table_name],
        row_count,
        CAST(SUBSTRING(reserved_size, 0, PATINDEX('% %', reserved_size)) AS int) reserved_size,
        CAST(SUBSTRING(data_size, 0, PATINDEX('% %', data_size)) AS int) data_size,
        CAST(SUBSTRING(index_size, 0, PATINDEX('% %', index_size)) AS int) index_size,
        CAST(SUBSTRING(unused_size, 0, PATINDEX('% %', unused_size)) AS int) unused_size
FROM #tmpSizeChar

الشرح:

  • هذه الخطوة تستخرج الجزء العددي من الأحجام المحجوزة وتحوله إلى أعداد صحيحة من أجل حسابات موثوقة. تستخدم هذه الخطوة أساسًا لإزالة الرموز (مثل KB، MB) من سلاسل الحجم.

الخطوة 4: عرض النتائج

أخيرًا، نسترجع ونعرض النتائج الملخصة من جدولنا المؤقت بحجم عدد صحيح.

SELECT * FROM #tmpSizeInt
ORDER BY reserved_size_KB DESC

الشرح:

  • يسترجع هذا الأمر SQL جميع السجلات من #tmpSizeInt ويقوم بترتيبها حسب عمود reserved_size_KB، مما يسمح لك برؤية الجداول التي تستهلك أكبر قدر من مساحة القرص.

الخاتمة

من خلال اتباع الخطوات الموضحة أعلاه، لديك الآن طريقة منظمة لتحديد مقدار مساحة القرص التي يستخدمها جدول في SQL Server باستخدام T-SQL. يمكن أن تكون هذه الطريقة مفيدة بشكل خاص لمسؤولي قواعد البيانات والمطورين الذين يتطلعون إلى الحفاظ على الأداء الأمثل ومراقبة استخدام الموارد عبر بيئات SQL Server الخاصة بهم.

الآن، يمكنك استبدال النقرات في واجهة المستخدم الرسومية بأسلوب سطر الأوامر القوي، مما يعزز بشكل جذري مهاراتك في إدارة قواعد البيانات!