Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
Добрый день.
Возник вопрос - почему изменяется record_count у индекса после его REBUILD ?

Делаю выборку из sys.dm_db_index_physical_stats по конкретному индексу, получаю такие значения:
10 окт 13, 13:32    [14950280]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
Добрый день.
Возник вопрос - почему изменяется record_count у индекса после его REBUILD ?

Делаю выборку из sys.dm_db_index_physical_stats по конкретному индексу, получаю такие значения:
page_count = 145992
10 окт 13, 13:33    [14950294]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Стало меньше или больше?
10 окт 13, 13:35    [14950318]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
Добрый день.
Возник вопрос - почему изменяется record_count у индекса после его REBUILD ?

Делаю выборку из sys.dm_db_index_physical_stats по конкретному индексу, получаю такие значения:
page_count = 145992
record_count = 15790600
avg_fragmentation_in_percent = 57.1524467094087
avg_page_space_used_in_percent = 75.932542624166

Делаю REBUILD командой:
ALTER INDEX ALL ON [dbo].[_AccumRg21828] REBUILD WITH (SORT_IN_TEMPDB = ON, MAXDOP = 3);

После этого повторно делаю выборку из sys.dm_db_index_physical_stats по этому индексу, получаю такие значения:
page_count = 108868
record_count = 15449600
avg_fragmentation_in_percent = 0
avg_page_space_used_in_percent = 99.9752903385224

Все бы хорошо, но беспокоит вопрос - почему значение record_count после REBUILD стало 341000 меньше?

P.S. Извиняюсь, что тремя сообщениями получилось...
10 окт 13, 13:37    [14950336]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
Glory
Member

Откуда:
Сообщений: 104760
rever3
Делаю выборку из sys.dm_db_index_physical_stats по конкретному индексу, получаю такие значения:
page_count = 145992

Так page_count меняется или record_count ?
10 окт 13, 13:38    [14950341]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
tpg
Стало меньше или больше?


В разных случаях по-разному: иногда больше, иногда меньше.
Я в другом сообщении привел пример, в котором стало меньше...
10 окт 13, 13:38    [14950343]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
Glory
rever3
Делаю выборку из sys.dm_db_index_physical_stats по конкретному индексу, получаю такие значения:
page_count = 145992

Так page_count меняется или record_count ?


Почему меняется page_count - это понятно, то я просто привел в примере несколько параметров.

А интересует меня изменение record_count, конечно-же.
10 окт 13, 13:39    [14950358]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
Гость333
Member

Откуда:
Сообщений: 3683
rever3,

А у остальных индексов на этой таблице чему равно значение record_count? Оно совпадает с record_count рассматриваемого индекса?
10 окт 13, 13:41    [14950382]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Таблица - куча или клатеризованный индекс?
10 окт 13, 13:41    [14950386]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
tpg
Таблица - куча или клатеризованный индекс?

Не куча.
Это проявляется как у CLUSTERED так и у NONCLUSTERED индексов.
10 окт 13, 13:45    [14950427]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А значение record_count отличается от значения, которое вернет запрос SELECT COUNT(*) из таблицы?
10 окт 13, 13:48    [14950453]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
Гость333
rever3,

А у остальных индексов на этой таблице чему равно значение record_count? Оно совпадает с record_count рассматриваемого индекса?

Нет, у всех индексов на этой таблице значение record_count разное:
15442800
15456000
15449600
15500000
15449600
15453500
15422500
15453500
10 окт 13, 13:49    [14950464]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
tpg
А значение record_count отличается от значения, которое вернет запрос SELECT COUNT(*) из таблицы?


Отличается: 15459252
10 окт 13, 13:50    [14950471]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А приведите пример запроса из sys.dm_db_index_physical_stats.
10 окт 13, 14:23    [14950820]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
tpg
А приведите пример запроса из sys.dm_db_index_physical_stats.

SELECT * FROM sys.dm_db_index_physical_stats(@DatabaseID, 1941126206, NULL, NULL, 'SAMPLED')

Намекаете на параметр 'SAMPLED' ?

Была у меня такая идея. Особенно наводит на эту мысль то, что этот запрос выводит record_count разный у всех индексов этой таблицы, но все эти значения отличаются от числа строк в таблице дынных и все значения - круглые цифры.
15442800
15456000
15449600
15500000
15449600
15453500
15422500
15453500

А в самой таблице 15459252 записей.
10 окт 13, 14:34    [14950921]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
rever3
Намекаете на параметр 'SAMPLED' ?
Ога.
10 окт 13, 14:40    [14950979]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
tpg
rever3
Намекаете на параметр 'SAMPLED' ?
Ога.


Вы это точно знаете или тоже только предполагаете?

Я до этого считал, что SAMPLED влияет только на процентные показатели, возвращаемые запросом из dm_db_index_physical_stats
10 окт 13, 14:56    [14951134]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
Гость333
Member

Откуда:
Сообщений: 3683
rever3,

Выполните запрос с параметром DETAILED.
Сравните результаты.
10 окт 13, 15:03    [14951208]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
Гость333
rever3,

Выполните запрос с параметром DETAILED.
Сравните результаты.


При DETAILED каждый индекс разбивается еще на index_level (0 1 2 3) - т.е. возвращается строк в 4 раза больше, чем при SAMPLED.

При этом для index_level = 0 значение record_count всегда одно и тоже = 15459252 и это четко соответствует количеству записей в таблице.

В общем да, кажется все дело в SAMPLED.
Я не сверял record_count до и после REBUILD, делая выборку с параметром DETAILED.

Сейчас попробую.
10 окт 13, 15:24    [14951382]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
rever3
Member

Откуда: Киев
Сообщений: 12
rever3
Сейчас попробую.


Провел эксперимент и убедился, что в режиме SIMPLE действительно некорректно выводится record_count.

А вот в режиме DETAILED значение record_count выводится корректно в строках, в которых index_level = 0.
При этом record_count для всех индексов одинаковое и равно количеству записей в таблице данных.

Всем спасибо за участие.
10 окт 13, 19:02    [14952878]     Ответить | Цитировать Сообщить модератору
 Re: Изменяется record_count у индекса после его REBUILD  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну это же всё документировано:
BOL
В режиме SAMPLED статистика основывается на 1-процентной выборке из всех страниц индекса или кучи. Если в индексе или куче менее 10 000 страниц, вместо режима SAMPLED используется режим DETAILED.

В режиме DETAILED проводится просмотр всех страниц и возвращается вся статистика.
11 окт 13, 06:24    [14954329]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить