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

Откуда:
Сообщений: 316
Скажте, чем более фрагментирован индекс тем больше времени необходимо на его перестроение?
26 июн 12, 11:19    [12775204]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
aux3
Member

Откуда:
Сообщений: 316
up!
26 июн 12, 14:58    [12776970]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Скорее всего, да. Хотя тут больше роляет не фрагментация как таковая, а заполненность страниц: чем менее они заполнены, тем их больше, тем больше их надо читать.
26 июн 12, 15:31    [12777288]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
больше всего на скорость перестроения влияет селективность первого ключевого поля
26 июн 12, 15:48    [12777433]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ну и чем менее селективно первое поле - тем быстрее "вырождается" такой индекс - чаще надо перестраивать. прям замкнутый круг :)
26 июн 12, 16:20    [12777707]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Crimean, маловато будет, нужны подробности.
26 июн 12, 22:45    [12779453]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Mnior
нужны подробности


надо делать большую табличку. и брать приличную железку. тогда будет очень показательно
полное репро давать не буду
дам краткие итоги из письма в ms
табличка 68 лямов записей
железка более чем достаточная, даже слишком. по-моему 8 нума нодов, тер озу и т.д.
1.индекс по ( название, ид ), "хороший" - названия достаточно уникальные (порядка 100 записей на каждое название максимум), перестраивается 16 секунд. тип данных для "название" - "варчар дофига", заполненность - выше среднего
2.индекс по ( филиал, ид ), "плохой" - филиалов в репро вообще 2. но тип данных - инт (ид тоже инт). перестроение индекса 3:24, что в 12 раз медленнее, чем перестроение предыдущего индекса по названию
27 июн 12, 11:09    [12780921]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Про скорость перестроения это понятно, непонятно это:
Crimean
чем менее селективно первое поле - тем быстрее "вырождается" такой индекс
Процессы и факторы непонятны. И вообще как-то смутно это всё. Может просто перефразируете более понятнее, точнее, многограннее.
28 июн 12, 21:15    [12791035]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Crimean
больше всего на скорость перестроения влияет селективность первого ключевого поля


что-то селективность не влияет никак...
или что вы имели в виду?
if exists ( select  *
                from    sys.tables t
                        inner join sys.schemas s on t.schema_id = s.schema_id
                where   s.name = 'dbo'
                        and t.name = 'XData' ) 
    begin					
        drop table dbo.XData
    end
go

create table dbo.XData (
	id int identity (1, 1) primary key clustered,
	Branch int,
	Branch2 int,
	Branch3 int,
	varchardata varchar(500)
)

go

; with cte 
as (
		select 1 as id
		union all
		select id + 1
		from cte
		where id < 10000000
)
insert into dbo.XData ( Branch, branch2, branch3, varchardata)
select id % 2, id%10, id%100, null--replicate(char(id % 100), 200 + id % 200 )
from cte
option ( MAXRECURSION 0)
go

create unique index IDX_Branch on dbo.XData ( Branch, id ) 
go
create unique index IDX_Branch2 on dbo.XData ( Branch2, id ) 
go
create unique index IDX_Branch3 on dbo.XData ( Branch3, id ) 
go
--create unique index IDX_varchardata on dbo.XData ( varchardata, id ) 
--go

------------------------------
-- запустить несколько раз (ну типа посмотреть как "вырождается" (фрагментируется?) индекс
; with cte 
as (
		select 1 as id
		union all
		select id + 1
		from cte
		where id < 200000
)
insert into dbo.XData ( Branch, branch2, branch3, varchardata)
select id % 2, id%10, id%100, null--replicate(char(id % 100), 200 + id % 200 )
from cte
option ( MAXRECURSION 0)

go

select i.name, s.*
from sys.dm_db_index_physical_stats(db_id('testdb'), object_id('dbo.xdata'), null, null, default) s
	inner join sys.indexes i on s.index_id = i.index_id and s.object_id = i.object_id
-- запустить несколько раз (end)
------------------------------

go

set statistics time on;
set statistics io on;
go

alter index IDX_Branch on dbo.XData rebuild; 
go
alter index IDX_Branch2 on dbo.XData rebuild; 
go
alter index IDX_Branch3 on dbo.XData rebuild; 
go


--alter index IDX_varchardata on dbo.XData rebuild; 
go
28 июн 12, 22:41    [12791454]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Владимир Затуливетер
что-то селективность не влияет никак...
Вообще не могу понять как фрагментация связана со значениями. По идее только от наличия вставок/удалений. Они могут быть равномерными и не очень.
И эта вставка также не зависит от селективности (в общем случае).

Правильно ли я понимают, что сортировка ключа в некластеризованном индексе также присутсвует? Не?
29 июн 12, 12:48    [12793842]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3755
Mnior
Владимир Затуливетер
что-то селективность не влияет никак...
Вообще не могу понять как фрагментация связана со значениями. По идее только от наличия вставок/удалений. Они могут быть равномерными и не очень.
И эта вставка также не зависит от селективности (в общем случае).

Правильно ли я понимают, что сортировка ключа в некластеризованном индексе также присутсвует? Не?

сортировка среди одинаковых значений ключа??? зачем
29 июн 12, 16:57    [12796072]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ivan Durak
сортировка среди одинаковых значений ключа???
Каких одинаковых значений? У ключа?!
1. Любой кластерный индекс имеет уникальный ключ (на то он и называется ключ)
Да, даже на не уникальном кластерном есть уникальный ключ (4 байта, uniqueifier, бла-бла-бла)
2. Каких нафиг уникальных? Под полем "секас", "постоянный" к примеру, хранится 100500 разных идентификаторов клиентов.
Весь индекс - от полей не кластерного, до значений ссылок (RID или ключ кластерного) составляет уникальную комбинацию.
Ivan Durak
зачем
Ну чтоб последовательно считывать данные по одинаковому значению индекса. Ну ... гипотетически возможно будет применить адекватные алгоритмы при плохой селективности. Хотя я не вижу как (просто обратное пока тоже не очевидно для меня, пока).
... Хотя нет, вот к примеру: замерджить два индекса.
Если у них ключи не упорядочены, то не получится.
--------
Короче, Crimean, удочку вы закинули, но рыбки не видно.
2 июл 12, 19:46    [12806330]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Crimean
Member

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

у меня была приличная железка и на ней приличная тестовая базка. на ней описанное явление проявлялось в полный рост
с учетом того, что базу генерили с нуля под заданные тесты - репро было чистое, без исторической наведенки
итоги я честно (честно!) показал, в жалобе в мс были + скрины + подробнее данные из профайлера и т.д.
на задохлых железках запросто не проявится - не спорю - или разница будет несущественная
поскольку интереса от мс не последовало - на проблему как обычно забили
2 июл 12, 21:51    [12806642]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Crimean, вопрос не веры, я вам верю на слово. Проблема в том что ваши слова непонятны.
Еще раз мои посты:
Mnior
Про скорость/время перестроения это очевидно, непонятно это:
Crimean
чем менее селективно первое поле - тем быстрее "вырождается" такой индекс
Вообще не могу понять как фрагментация связана со значениями. По идее только от наличия вставок/удалений. Они могут быть равномерными и не очень.
И эта вставка также не зависит от селективности (в общем случае).

Вы писали только про скорость/время, но про фрагментацию даже словом не обмолвились.

А вот скрипт Владимира я честно не запускал. У меня частенько не сопоставимо время на чтение форума с доступом к нужному железу.
А там чётко написано: dm_db_index_physical_stats.

Crimean, то есть у вас скрипт (с dm_db_index_physical_stats) показывает разницу?

И конечно же то, что отделяет технаря и адекватного человека от остальных - идеи/модели/гипотезы/предположения/намёки почему оно "так".
А ещё хорошо бы ссылку на MS connection привести (или вы там их 100500 уже насоздавали :) ).
2 июл 12, 23:30    [12806864]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
без нумы (а сервера с нумой сейчас под рукой нету) на приведенном примере скорость индексации условно сравнимая. данных догнал до 40 000 000, время индексации по профайлеру 20-30 секунд для всех индексов. "кото-страфическая" разница была именно на машинах с нумой и там было видно что распределение данных влияет на вовлечение нама дон в процесс индексации. а возможно что у меня просто диски затычные и задают потолок. а на "тех" тестовым машинках по дискам затыков точно не было
3 июл 12, 16:04    [12810906]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Может просто ноды неправильно сконфигурены? А то мы в свое время нахлебались, когда винда с одним известным вендром плохо дружила, и неправильно видела всю процессорную топологию.
3 июл 12, 16:07    [12810936]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Гавриленко Сергей Алексеевич
Может просто ноды неправильно сконфигурены? А то мы в свое время нахлебались, когда винда с одним известным вендром плохо дружила, и неправильно видела всю процессорную топологию.


вряд ли. я пока больше склоняюсь к тому, что сейчас ровные результаты скорее от затычности дисков. потому как на одной железяке даже с криво сконфигуреной нумой все бы хреново работало. а так разница перестроения индексов одной таблицы на порядок.. с чего бы это?
3 июл 12, 17:55    [12811705]     Ответить | Цитировать Сообщить модератору
 Re: фрагментация индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
я боюсь (по результатам статистики, что уже есть + тестирование приведенного здесь примера) вообще достаточно сложно обсуждать скорость перестроения индексов в отрыве от вполне конкретного оборудования.. данные - то мы воспроизведем, а вот затычность оборудования, бывает, такое подкидывает..
3 июл 12, 19:15    [12812004]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить