PDA

View Full Version : بدست آوردن size index در هر جدول در full text search



hassanzarabi
شنبه 01 مهر 1396, 12:29 عصر
با سلام و خسته نباشید خدمت شما
من یک جدول دارم و full text search را بر روی آن اعمال کرده ام و یکسری فایل را درون فیلد varbinary max اضافه کرده ام فقط می خواهم حجم اطلاعاتی که Index شده است را بدست بیاورم آیا می شود که لحظه ای حجم اطلاعات index شده را به ما نمایش دهد اگر می توانید یک کد به من معرفی کنید؟
من کوئری زیر را اجرا می کنم اما لحظه ای به من حجم ایندکس ها را نمایش نمی دهد حتما باید یک فرگمنت اضافه بشود تا حجم ایندکس ها اضافه بشود چرا باید فرگمنت اضافه بشود تا حجم ایندکس ها را به ما نمایش بدهد چرا لحظه ای نمایش نمی دهد مثلا ما 100 رکورد اضافه کرده ایم اما هیچ رکوردی اضافه نمی شود پس نمی توانیم هم حجم اینکدس ها را داشته باشیم و هم نمی توانیم به صورت لحظه ای درصد فرگمنت هم داشته باشیم؟


WITH FragmentationDetails
AS (
SELECT
table_id,
COUNT(*) AS FragmentsCount,
CONVERT(DECIMAL(9,2), SUM(data_size/(1024.*1024.))) AS IndexSizeMb,
CONVERT(DECIMAL(9,2), MAX(data_size/(1024.*1024.))) AS largest_fragment_mb
FROM sys.fulltext_index_fragments
GROUP BY table_id
)
SELECT
DB_NAME() AS DatabaseName,
ftc.fulltext_catalog_id AS CatalogId,
ftc.[name] AS CatalogName,
fti.change_tracking_state AS ChangeTrackingState,
fti.object_id AS BaseObjectId,
QUOTENAME(OBJECT_SCHEMA_NAME(fti.object_id)) + '.' + QUOTENAME(OBJECT_NAME(fti.object_id)) AS BaseObjectName,
f.IndexSizeMb AS IndexSizeMb,
f.FragmentsCount AS FragmentsCount,
f.largest_fragment_mb AS IndexLargestFragmentMb,
f.IndexSizeMb - f.largest_fragment_mb AS IndexFragmentationSpaceMb,
CASE
WHEN f.IndexSizeMb = 0 THEN 0
ELSE
100.0 * (f.IndexSizeMb - f.largest_fragment_mb) / f.IndexSizeMb
END AS IndexFragmentationPct
FROM
sys.fulltext_catalogs ftc
JOIN
sys.fulltext_indexes fti
ON
fti.fulltext_catalog_id = ftc.fulltext_catalog_id
JOIN FragmentationDetails f
ON f.table_id = fti.object_id
;

با تشکر از شما