powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / После перестроения индексов фрагментация остается
16 сообщений из 16, страница 1 из 1
После перестроения индексов фрагментация остается
    #39579233
Bigzone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
На БД 30Гб
скриптом смотрю фрагментацию индексов на таблицах показывает 200 таблиц где фрагментация более 30%


Далее выполняю скрипт по перестроению индексов.
пример ниже.
после проверяю и ситуация с фрагментацией не меняется.
SQL2012 подскажите, что на это может влиять?
также выборочно на таблицах стредствами SQL смотрел фрагментацию индексов и пробовал перестроить и также % фрагментации не меняется к примеру как был 80% так и остается.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
DECLARE @SQL NVARCHAR(MAX)

DECLARE cur CURSOR LOCAL READ_ONLY FORWARD_ONLY FOR
	SELECT '
	ALTER INDEX [' + i.name + N'] ON [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] ' +
		CASE WHEN s.avg_fragmentation_in_percent > 30
			THEN 'REBUILD WITH (SORT_IN_TEMPDB = ON)'
			ELSE 'REORGANIZE'
		END + ';'
	FROM (
		SELECT 
			  s.[object_id]
			, s.index_id
			, avg_fragmentation_in_percent = MAX(s.avg_fragmentation_in_percent)
		FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) s
		WHERE s.page_count > 128 -- > 1 MB
			AND s.index_id > 0 -- <> HEAP
			AND s.avg_fragmentation_in_percent > 5
		GROUP BY s.[object_id], s.index_id
	) s
	JOIN sys.indexes i WITH(NOLOCK) ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
	JOIN sys.objects o WITH(NOLOCK) ON o.[object_id] = s.[object_id]

OPEN cur

FETCH NEXT FROM cur INTO @SQL

WHILE @@FETCH_STATUS = 0 BEGIN

	EXEC sys.sp_executesql @SQL

	FETCH NEXT FROM cur INTO @SQL
	
END 

CLOSE cur 
DEALLOCATE cur;
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579249
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bigzoneпоказывает 200 таблиц где фрагментация более 30%Размером в 1 страницу?
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579270
Bigzone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579340
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bigzoneда
Таблица в одну страницу занимает 8 Кбайт ("но это не точно" (с)), а скрипт в условии перебирает только те таблицы, где "WHERE s.page_count > 128 -- > 1 MB"...
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579527
Bigzone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо (Andy_OLAP)
поменял на
WHERE s.page_count > 0
дефрагментировалось 100 таблиц
осталось еще 160 таблиц, что еще можно попробовать?
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579540
Bigzone,

попробуй почитать и осмыслить реализацию физического хранения данных в MS SQL Server-е. Чтобы не мучить ни сервер бессмысленными попытками дефрагментации того, что невозможно дефрагментировать, ни уважаемых форумчан глупыми вопросами о причинах своих неудач...
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579604
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bigzoneосталось еще 160 таблиц, что еще можно попробовать?Не смотреть на таблицы, которые занимают одну страницу.

Вы думаете, зря стояло условие "s.page_count > 128 -- > 1 MB"? Думаете, это просто бага в скрипте?

Не мучайте сервер, не дефрагментируйте маленькие таблицы.

Если же начальник говорит "всё равно дефрагментируйте, пусть даже серверу будет хуже", то перестройте кластерные индексы.
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579635
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigzoneБольшое спасибо (Andy_OLAP)
поменял на
WHERE s.page_count > 0
дефрагментировалось 100 таблиц
осталось еще 160 таблиц, что еще можно попробовать?

Зачем вы так агрессивно пытаетесь дефрагментировать всё, что видите?
Цель?
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579638
xenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
256k,
авторЗачем вы так агрессивно пытаетесь дефрагментировать всё, что видите?
Цель?

Шоб красиво
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39579652
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kBigzoneБольшое спасибо (Andy_OLAP)
поменял на
WHERE s.page_count > 0
дефрагментировалось 100 таблиц
осталось еще 160 таблиц, что еще можно попробовать?

Зачем вы так агрессивно пытаетесь дефрагментировать всё, что видите?
Цель?Начальник сказал?
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39580818
Bigzone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
либо как исключить таблицы из результат запроса который показывает таблицы к переиндексации
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DECLARE @db_name varchar(50) = N'db_name',
                @table_name varchar(250) = N'db_name.dbo.tbl_name'

SELECT  IndStat.database_id, 
                IndStat.object_id, 
                QUOTENAME(s.name) + '.' + QUOTENAME(o.name) AS [object_name], 
                IndStat.index_id, 
                QUOTENAME(i.name) AS index_name,
                IndStat.avg_fragmentation_in_percent,
                IndStat.partition_number, 
                (SELECT count (*) FROM sys.partitions p
                        WHERE p.object_id = IndStat.object_id AND p.index_id = IndStat.index_id) AS partition_count 
FROM sys.dm_db_index_physical_stats
    (DB_ID(), NULL, NULL, NULL , 'LIMITED') AS IndStat
        INNER JOIN sys.objects AS o ON (IndStat.object_id = o.object_id)
        INNER JOIN sys.schemas AS s ON s.schema_id = o.schema_id
        INNER JOIN sys.indexes i ON (i.object_id = IndStat.object_id AND i.index_id = IndStat.index_id)
WHERE IndStat.avg_fragmentation_in_percent > 10 AND IndStat.index_id > 0
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39584127
Bigzone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запустил стандартный SQL отчет "Физическая статистика индекса" на БД он также показывает рекомендации перестроить либо реорганизовать.
Значит получается скрипт не все делает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
DECLARE @SQL NVARCHAR(MAX)

DECLARE cur CURSOR LOCAL READ_ONLY FORWARD_ONLY FOR
	SELECT '
	ALTER INDEX [' + i.name + N'] ON [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] ' +
		CASE WHEN s.avg_fragmentation_in_percent > 30
			THEN 'REBUILD WITH (SORT_IN_TEMPDB = ON)'
			ELSE 'REORGANIZE'
		END + ';'
	FROM (
		SELECT 
			  s.[object_id]
			, s.index_id
			, avg_fragmentation_in_percent = MAX(s.avg_fragmentation_in_percent)
		FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) s
		WHERE s.page_count > 128 -- > 1 MB
			AND s.index_id > 0 -- <> HEAP
			AND s.avg_fragmentation_in_percent > 5
		GROUP BY s.[object_id], s.index_id
	) s
	JOIN sys.indexes i WITH(NOLOCK) ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
	JOIN sys.objects o WITH(NOLOCK) ON o.[object_id] = s.[object_id]

OPEN cur

FETCH NEXT FROM cur INTO @SQL

WHILE @@FETCH_STATUS = 0 BEGIN

	EXEC sys.sp_executesql @SQL

	FETCH NEXT FROM cur INTO @SQL
	
END 

CLOSE cur 
DEALLOCATE cur;
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39584195
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bigzone, уважаемый в той статье откуда Вы брали этот скрипт внизу все написано. Ограничение в 1Мб вполне нормально и чуть не понятна суть Ваших проблем.
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39584198
Bigzone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из запроса убрал условия ограничения по перестроению индекса.
все равно остаются более 150 таблиц и фрагментироваными индексами. И стандартный отчет SQL рекомендует их перестроить.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
DECLARE @SQL NVARCHAR(MAX)

DECLARE cur CURSOR LOCAL READ_ONLY FORWARD_ONLY FOR
	SELECT '
	ALTER INDEX [' + i.name + N'] ON [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] ' +
		CASE WHEN s.avg_fragmentation_in_percent > 30
			THEN 'REBUILD WITH (SORT_IN_TEMPDB = ON)'
			ELSE 'REORGANIZE'
		END + ';'
	FROM (
		SELECT 
			  s.[object_id]
			, s.index_id
			, avg_fragmentation_in_percent = MAX(s.avg_fragmentation_in_percent)
		FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) s
		GROUP BY s.[object_id], s.index_id
	) s
	JOIN sys.indexes i WITH(NOLOCK) ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
	JOIN sys.objects o WITH(NOLOCK) ON o.[object_id] = s.[object_id]

OPEN cur

FETCH NEXT FROM cur INTO @SQL

WHILE @@FETCH_STATUS = 0 BEGIN

	EXEC sys.sp_executesql @SQL

	FETCH NEXT FROM cur INTO @SQL
	
END 

CLOSE cur 
DEALLOCATE cur;
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39584201
Bigzone,

ты как Партос из мушкетеров, что ли - "дерусь, потому что - дерусь"(с)?
цель всего этого действия какая? красивые показатели в отчете?
Реальные проблемы есть, которыми можно руки занять?
Или всё остальное уже решено?
Если таблица маленькая и хранится в смешанных экстентах - ты её хоть зафрагментируйся - раньше дырку протрешь на блине диска, чем избавишься от фрагментации...
...
Рейтинг: 0 / 0
После перестроения индексов фрагментация остается
    #39584202
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bigzone,

вам уже с десяток раз ответили. Для небольших таблиц от фрагментации не измбавиться, ну или удалите индексы :)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / После перестроения индексов фрагментация остается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]