تحديد الكائنات غير المستخدمة في Microsoft SQL Server 2005
-
08-07-2019 - |
سؤال
إنها مهمة تافهة لمعرفة ما إذا كان الكائن قد تمت الإشارة إليه بواسطة شيء آخر أم لا.ما أود فعله هو تحديد ما إذا كان الأمر كذلك أم لا المستخدمة في الواقع.
كان الحل الذي توصلت إليه يتضمن في الأصل مزيجًا من جدول يحتوي على قائمة بالكائنات في قاعدة البيانات ووظيفة كل ساعة.
المهمة فعلت شيئين.أولاً، قام بالبحث عن الكائنات الجديدة التي تمت إضافتها إلى قاعدة البيانات منذ آخر تشغيل.ثانيا، نظرت إلى ذاكرة التخزين المؤقت لكائن SQL.إذا تم إدراج كائن في الجدول في ذاكرة التخزين المؤقت، فسيتم وضع علامة عليه في الجدول على أنه تم "مشاهدته" قيد الاستخدام مؤخرًا.
وفي نهاية فترة الستة أشهر أو ما شابه ذلك، تم فحص محتويات الجدول.أي شيء مدرج في الجدول لم تتم الإشارة إليه منذ أن بدأت المراقبة ربما كان آمنًا للنسخ الاحتياطي والإزالة.
بالتأكيد، هناك إمكانية لاستخدام الأشياء فقط، على سبيل المثال، مرة واحدة في السنة أو أي شيء آخر، ولكن يبدو أنها تعمل في معظم الأحيان.
لقد كان العمل معه نوعًا من الألم.
هناك ما يقرب من ستة قواعد بيانات أعمل معها، ومعظمها يحتوي على الكثير من الجداول القديمة، والتي تبقى لفترة طويلة بعد انتقال منشئيها الأصليين إلى شركات أخرى.
ما أبحث عنه هو طريقة موثوقة إلى حد ما لتتبع وقت استدعاء كائن (جدول أو عرض أو إجراء مخزن أو وظيفة).
بالنسبة لأولئك منكم الذين يراقبون هذا النوع حاليًا، ما هي الطريقة/الرمز الذي تستخدمونه وهل توصيون به؟
المحلول
باستخدام SQL Server 2005، يمكنك استخدام طريقة عرض الإدارة الديناميكية sys.dm_db_index_usage_stats.الاسم يقول "فهرس" ولكن هذا مضلل بعض الشيء - كل جدول لديه مدخل هنا، حتى لو لم يكن لديه أي فهارس.إليك استعلامًا مفيدًا من مجلة SQL:
SELECT
t.name AS 'Table',
SUM(i.user_seeks + i.user_scans + i.user_lookups)
AS 'Total accesses',
SUM(i.user_seeks) AS 'Seeks',
SUM(i.user_scans) AS 'Scans',
SUM(i.user_lookups) AS 'Lookups'
FROM
sys.dm_db_index_usage_stats i RIGHT OUTER JOIN
sys.tables t ON (t.object_id = i.object_id)
GROUP BY
i.object_id,
t.name
ORDER BY [Total accesses] DESC
وهنا المقال الأصلي:
http://www.sqlmag.com/Article/ArticleID/53878/sql_server_53878.html
ضع في اعتبارك أنه يتم إعادة تعيين إحصائيات الاستخدام هذه عند إعادة تشغيل SQL Server.