निम्न क्वेरी आपको @SpaceAllotted का प्रतिशत बताएं जिसका उपयोग डेटा द्वारा डेटाबेस के ऑब्जेक्ट्स द्वारा कितने पृष्ठों को आवंटित किया जाता है, यह देखकर किया जा रहा है।
पंक्ति-स्तर पर उपयोग को मापने का प्रयास करने योग्य नहीं है, क्योंकि SQL सर्वर सीमा-स्तर पर सभी स्थान आवंटित करता है। प्रत्येक सीमा आठ 8 केबी डेटा पृष्ठों से बना है। तो यदि आपके डेटाबेस में केवल एक पंक्ति थी, और उस पंक्ति में 4 बाइट डेटा थे, तो पूरी सीमा को अभी भी 4 बाइट्स (या एक मौजूदा हद तक आवंटित पृष्ठों के साथ आवंटित करने के लिए आवंटित करने की आवश्यकता होगी। इसे मिश्रित सीमा कहा जाता है।)।
DECLARE @SpaceAllotted FLOAT
-- 2MB converted to kilobytes...
SET @SpaceAllotted = 2048
SELECT
-- Allocation is done on the extent-level.
-- Each extent contains eight 8KB data pages.
((1/(@SpaceAllotted)) * CEILING(CAST(SUM([ips].[page_count]) AS FLOAT)/8) * 64) * 100 AS PercentageUsed
FROM
[sys].[dm_db_index_physical_stats](DB_ID(), NULL, NULL, NULL, NULL) ips
-- This will allow us to retrieve the page count of all tables in the
-- current database, regardless of whether or not they have clustered
-- indexes and/or non-clustered indexes.
INNER JOIN
[sys].[indexes] i
ON
[ips].[object_id] = [i].[object_id]
AND [ips].[index_id] = [i].[index_id]
जब से हम मिश्रित विस्तार करने की संभावना है, और कोई अच्छा रास्ता (वहाँ तरीके हैं, लेकिन वे बहुत होने के लिए नहीं जा रहे हैं) का निर्धारण क्या पृष्ठों क्या विस्तार करने के लिए आवंटित कर रहे हैं, इस isn 100% सटीक नहीं है। इसके अतिरिक्त, एक्सेंट्स में मुफ्त पेज भी हो सकते हैं (जो आरक्षित हैं और इसलिए डिस्क स्थान ले रहे हैं), इसलिए आमतौर पर, यह अनुमान हमेशा कम हो जाएगा। हालांकि, पृष्ठ स्तर पर डेटाबेस का निरीक्षण करने के लिए कुछ लिखने के बिना शायद यह सबसे अच्छा है।
आह हाँ, अन्य उत्तरों को देखते हुए, यह एक और विकल्प है। यह मूल रूप से पृष्ठों में डेटा फ़ाइलों के सभी मौजूदा आकार को देखेगा, और उनके द्वारा खाए गए स्थान का प्रतिशत निर्धारित करेगा। अब, यहाँ भी चेतावनी हैं ...
- कोई अधिकतम आकार डेटाबेस के लिए निर्दिष्ट (autogrowth सक्षम और अप्रतिबंधित है) देता है तो ऐसा, उड़ नहीं होगा क्योंकि MAX_SIZE रूप -1 लौटा दी जाएगी।
- फिर, हम सही ढंग से निर्धारित नहीं कर सकता कितनी जगह वास्तविक डेटा द्वारा किया जाता है। यहां हम देख रहे हैं कि फ़ाइल सिस्टम पर वास्तव में कितनी जगह उपयोग की जाती है।
- हम लॉग फ़ाइल स्थान नहीं देख रहे हैं। हां, यह अभी भी डिस्क स्पेस का उपभोग करता है।
आशा इनमें से किसी एक को अपनी समस्या का हल।
SELECT
((1/CAST(SUM([df].[max_size]) AS FLOAT)) * CAST(SUM([df].[size]) AS FLOAT)) * 100 AS PercentUsed
FROM
[sys].dm_io_virtual_file_stats(DB_ID(), NULL) vfs
INNER JOIN
[sys].[database_files] df
ON
[vfs].[file_id] = [df].[file_id]
WHERE
[df].[type] = 0
क्या इस "अंतरिक्ष" के लिए प्रयोग किया जाता है? –
आप अपने उपयोगकर्ता डेटा को कैसे विभाजित कर रहे हैं? क्या यह सब एक ही टेबल में है? या क्या प्रत्येक उपयोगकर्ता की अपनी टेबल होती है? –
मेरे पास एक सारणी है जहां सभी उपयोगकर्ता डेटा सहेजा जाता है। UserId का प्रयोग व्यक्तिगत उपयोगकर्ता डेटा को अलग करने के लिए किया जाता है –