5

전체 테이블 인덱스가 정의 된 테이블이있는 테이블이있는 SQL 2008 R2 데이터베이스가 있습니다. 특정 테이블의 인덱스 크기를 결정하는 방법을 알고 싶습니다.SQL Server 2008 R2에서 전체 텍스트 인덱스의 크기를 결정하는 방법은 무엇입니까?

이 방법이 있습니까?

+0

어쩌면이 유용 할 수 있기 때문에이 존재해야 말한다 : http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize 속성) –

+0

* IndexSize *는 실제로 FTS 카탈로그의 크기를 반환하고 카탈로그에는 둘 이상의 인덱스가있을 수 있습니다. 각 색인의 크기를 개별적으로 원합니다. – Poli

답변

9

카탈로그보기 sys.fulltext_index_fragments은 카탈로그에 관계없이 각 조각의 크기를 추적하므로 SUM을이 방법으로 가져올 수 있습니다. 테이블 당 하나의 전체 텍스트 인덱스의 제한이 그대로 유지 될 것으로 가정합니다. 다음 쿼리는 카탈로그에 관계없이 데이터베이스의 각 전체 텍스트 인덱스의 크기를 다시 가져 오지만 특정 테이블 만 신경 쓰면 WHERE 절을 사용할 수 있습니다.

SELECT 
    [table] = OBJECT_SCHEMA_NAME(table_id) + '.' + OBJECT_NAME(table_id), 
    size_in_KB = CONVERT(DECIMAL(12,2), SUM(data_size/1024.0)) 
FROM sys.fulltext_index_fragments 
-- WHERE table_id = OBJECT_ID('dbo.specific_table_name') 
GROUP BY table_id; 

조각 수가 많으면 재구성을 고려할 수 있습니다. 특정 카탈로그 사용 SSMS 후 경우

+0

감사! 나는 잠시 동안이 프로젝트에서 일하지 않았기 때문에 이것을 확인하기 위해 약간의 시간이 필요할 것입니다. – Poli

+0

@Poli 예, 질문을받은 지 2 년 후이 질문을 내 관심으로 가져 왔는지 모르겠습니다. –

+0

이것은 전체 텍스트 조각의 음 압축 된 크기 인 것 같습니다. 'sys.internal_table'을 보면 압축 된 프래그먼트의 크기와 나머지 전체 텍스트 인프라에 필요한 공간을 얻을 수 있습니다. 예제 쿼리에 대한 내 대답을 참조하십시오. – TheConstructor

1

- CLIK [데이터베이스]에서와 객체 을 확장 - [저장] 을 클릭 - 마우스 오른쪽을 클릭 {특정 카탈로그} - Propertie을 선택하고 클릭합니다. 일반 탭에서 .. 당신은 카탈로그 크기를 찾을 수 = '윈'

1

나는 (또한 XML-인덱스의 크기를 계산합니다 ... 경우)이 비슷한

SELECT S.name, 
     SO.name, 
     SIT.internal_type_desc, 
     rows = CASE WHEN GROUPING(SIT.internal_type_desc) = 0 THEN SUM(SP.rows) 
       END, 
     TotalSpaceGB = SUM(SAU.total_pages) * 8/1048576.0, 
     UsedSpaceGB = SUM(SAU.used_pages) * 8/1048576.0, 
     UnusedSpaceGB = SUM(SAU.total_pages - SAU.used_pages) * 8/1048576.0, 
     TotalSpaceKB = SUM(SAU.total_pages) * 8, 
     UsedSpaceKB = SUM(SAU.used_pages) * 8, 
     UnusedSpaceKB = SUM(SAU.total_pages - SAU.used_pages) * 8 
FROM sys.objects SO 
INNER JOIN sys.schemas S ON S.schema_id = SO.schema_id 
INNER JOIN sys.internal_tables SIT ON SIT.parent_object_id = SO.object_id 
INNER JOIN sys.partitions SP ON SP.object_id = SIT.object_id 
INNER JOIN sys.allocation_units SAU ON (SAU.type IN (1, 3) 
             AND SAU.container_id = SP.hobt_id) 
             OR (SAU.type = 2 
              AND SAU.container_id = SP.partition_id) 
WHERE S.name = 'schema' 
     --AND SO.name IN ('TableName') 
GROUP BY GROUPING SETS(
         (S.name, 
         SO.name, 
         SIT.internal_type_desc), 
         (S.name, SO.name), (S.name),()) 
ORDER BY S.name, 
     SO.name, 
     SIT.internal_type_desc; 
를 사용

이것은 일반적으로 sys.fulltext_index_fragments보다 높은 숫자를 제공하지만 표의 sys.partitions과 결합하면 EXEC sys.sp_spaceused @objname = N'schema.TableName';에서 반환되는 숫자가 합쳐집니다.

는 SQL 서버 2016로 테스트하지만, 문서는 2008 년