DMV가 페이지 수와 행 수에 대한 정확한 정보를 가지고 있지 않다는 것은 알려진 사실입니다. 그러나 통계를 업데이트하면 왜 그렇지 않은지 알 수 없습니다.
모니터링 도구를 사용하고 있으며 각 인덱스 및 데이터의 디스크 크기 등을 알고 싶습니다. 결국 올바른 채우기 비율 및 기타 사항을 찾고 싶습니다.
내 함수와 이전 sp_spaceused에서 사용하는 공간은 공간 사용량과 약간 다르지만 레코드 수는 다릅니다.
내 선택에 빠진 것이 있는지 볼 수 있습니까?
이것은 sp_spaceused입니다 (그런 다음 숫자를 MB 단위로 변환합니다) :
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으로 바꾸면 결과가 훨씬 정확합니다. 문제의 테이블에 레코드가 삽입 된 것을 발견했으며 통계는 최신이 아니지만 결과는 여전히 일치합니다 (1MB 미만-나에게 적합합니다).
새로운 결과 집합은 다음과 같습니다.
--==================================
-- 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