5

Tôi có một cơ sở dữ liệu SQL 2008 R2 với một số bảng trên đó có một số trong các bảng đó một Chỉ mục Toàn văn được xác định. Tôi muốn biết làm thế nào để xác định kích thước của chỉ số của một bảng cụ thể, để kiểm soát và dự đoán sự tăng trưởng của nó.Làm thế nào để xác định kích thước của chỉ mục toàn văn trên SQL Server 2008 R2?

Có cách nào để thực hiện việc này không?

+0

Có lẽ điều này có thể có ích: http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize tài sản) –

+0

* IndexSize * thực sự trả về kích thước của Danh mục FTS và một danh mục có thể có nhiều chỉ mục. Tôi muốn kích thước của từng chỉ mục riêng lẻ. – Poli

Trả lời

9

Chế độ xem danh mục sys.fulltext_index_fragments theo dõi kích thước của từng đoạn, bất kể danh mục, vì vậy bạn có thể lấy SUM theo cách này. Điều này giả định giới hạn của một chỉ mục toàn văn trên mỗi bảng sẽ vẫn là trường hợp. Truy vấn sau sẽ giúp bạn có được kích thước của mỗi chỉ mục toàn văn trong cơ sở dữ liệu, một lần nữa bất kể danh mục, nhưng bạn có thể sử dụng mệnh đề WHERE nếu bạn chỉ quan tâm đến một bảng cụ thể.

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; 

Cũng lưu ý rằng nếu số lượng đoạn cao bạn có thể xem xét tổ chức lại.

+0

Cảm ơn! Tôi sẽ cần một thời gian để kiểm tra điều này vì tôi đã không làm việc trong dự án này một thời gian ... – Poli

+0

@Poli yeah, tôi không chắc điều gì đã khiến câu hỏi này chú ý đến tôi gần hai năm sau khi được hỏi. –

+0

Điều này có vẻ là kích thước không nén của các đoạn văn bản đầy đủ. Bằng cách nhìn vào 'sys.internal_table' bạn có thể nhận được kích thước của các mảnh nén và không gian cần thiết cho phần còn lại của toàn bộ cơ sở hạ tầng. Xem câu trả lời của tôi cho một truy vấn ví dụ. – TheConstructor

1

Nếu bạn là sau một Catalogue cụ Sử dụng SSMS - Clik vào [Cơ sở dữ liệu] và mở rộng các đối tượng - Click vào [Lưu trữ] - Click chuột phải vào {Catalogue cụ thể} - Chọn Propertie và nhấn chuột. TRÊN chung TAB .. Bạn sẽ tìm thấy kích thước Catalog = 'nn'

1

tôi sử dụng một cái gì đó tương tự như sau (mà cũng sẽ tính toán kích thước của XML chỉ số, ... nếu có)

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; 

Điều này thường sẽ cung cấp cho số cao hơn sys.fulltext_index_fragments, nhưng khi kết hợp với sys.partitions của bảng, nó sẽ thêm đến các số được trả lại từ EXEC sys.sp_spaceused @objname = N'schema.TableName';.

Thử nghiệm với SQL Server 2016, nhưng tài liệu nói rằng họ nên có mặt từ năm 2008.

Các vấn đề liên quan