यह एक ज्ञात तथ्य है कि डीएमवी पृष्ठों की संख्या और पंक्तियों की गिनती के बारे में सटीक जानकारी नहीं रखते हैं। हालाँकि, जब आपके पास आँकड़े अपडेट होते हैं, तो मैं यह नहीं देख सकता कि वे क्यों नहीं करेंगे।
मैं एक निगरानी उपकरण पर काम कर रहा हूं, प्रत्येक सूचकांक और डेटा का डिस्क आकार जानना चाहता हूं, आदि। आखिरकार मैं सही भरण कारक, और अन्य चीजें आदि ढूंढना चाहता हूं।
मेरे फ़ंक्शन और पुराने sp_spaceused द्वारा उपयोग किया जाने वाला स्थान अंतरिक्ष उपयोग पर थोड़ा भिन्न होता है, लेकिन रिकॉर्ड गणना पर नहीं।
क्या आप देख सकते हैं कि मेरे चयन में कुछ कमी है?
यह sp_spaceused है (फिर मैं एमबी में संख्याओं को परिवर्तित करता हूं):
sp_spaceused 'tblBOrderRelationship'
go
select 318008/1024.00 AS reserved,
140208/1024.00 AS data,
177048/1024.00 AS index_size,
752/1024.00 AS unused
लेकिन जब मैं अपना चयन करता हूं, नीचे \ पिक्चर के नीचे का कोड, मुझे थोड़ा अलग आंकड़े मिलते हैं।
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT
schema_name(t.schema_id) as SchemaName,
t.NAME AS TableName,
t.type_desc,
t.is_ms_shipped,
t.is_published,
t.lob_data_space_id,
t.filestream_data_space_id,
t.is_replicated,
t.has_replication_filter,
t.is_merge_published,
t.is_sync_tran_subscribed,
--t.is_filetable,
i.name as indexName,
i.type_desc,
i.is_unique,
i.is_primary_key,
i.is_unique_constraint,
i.fill_factor,
i.is_padded,
sum(p.rows) OVER (PARTITION BY t.OBJECT_ID,i.index_id) as RowCounts,
sum(a.total_pages) OVER (PARTITION BY t.OBJECT_ID,i.index_id) as TotalPages,
sum(a.used_pages) OVER (PARTITION BY t.OBJECT_ID,i.index_id) as UsedPages,
sum(a.data_pages) OVER (PARTITION BY t.OBJECT_ID,i.index_id) as DataPages,
(sum(a.total_pages) OVER (PARTITION BY t.OBJECT_ID,i.index_id) * 8) / 1024 as TotalSpaceMB,
(sum(a.used_pages) OVER (PARTITION BY t.OBJECT_ID,i.index_id) * 8) / 1024 as UsedSpaceMB,
(sum(a.data_pages) OVER (PARTITION BY t.OBJECT_ID,i.index_id) * 8) / 1024 as DataSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255
AND T.NAME = 'tblBOrderRelationship'
आंकड़े
सूचकांक नामों सहित बड़ी तस्वीर
अब परिणामों की जाँच करने के लिए कुछ गणनाएँ कर रहे हैं:
--==================================
-- the figures from sp_spaceused
--==================================
select 318008/1024.00 AS reserved,
140208/1024.00 AS data,
177048/1024.00 AS index_size,
752/1024.00 AS unused
--==================================
-- the figures from my select
--==================================
select 137+61+56+54 AS reserved,
137 AS data,
61+56+54 AS index_size
यह इतनी दूर नहीं है, वास्तव में, इस तथ्य के अलावा मैंने अप्रयुक्त स्थान की गणना नहीं की है!
इसे सटीक बनाने के लिए मैं क्या कर सकता हूं?
परिवर्तन के बाद:
जब मैंने 1024 को 1024.00 से बदल दिया तो परिणाम बहुत अधिक सटीक हैं। मैंने देखा कि रिकॉर्ड को प्रश्न में तालिका में डाला गया है, और जाहिर है कि आँकड़े आज तक नहीं हैं, लेकिन फिर भी परिणाम मेल खाते हैं (1 एमबी अंतर के तहत - जो मेरे लिए सब ठीक है)
नए परिणाम सेट निम्न हैं:
--==================================
-- the figures from sp_spaceused
--==================================
select
318072 /1024.00 AS reserved,
140208 /1024.00 AS data,
177096 /1024.00 AS index_size,
768 /1024.00 AS unused
go
--==================================
-- the figures from my select
--==================================
select 137.7578125+61.7968750+56.4218750+54.6406250 as reserved,
137.7578125 as data,
61.7968750+56.4218750+54.6406250 as index_size