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

Откуда:
Сообщений: 1906
Определение сабжа я знаю такое
https://habrahabr.ru/post/247373/
Коэффициент заполнения индекса определяет количество пространства на странице для хранения индекса на нижнем уровне (уровень листьев) перед тем как начать заполнять новую страницу. К примеру, если коэффициент выставлен в значение 90, то при росте индекс займет на странице 90%, а затем перейдет на следующую страницу.


1. Почему(когда) этот коэффициент важен ?
2. Как понять какое значение нужно выставить. по каким критериям ?
3. Чем плохи крайние значения? (0 и 100)
12 сен 16, 18:31    [19655852]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
iljy
Member

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

не, че-то хреновое какое-то определение. Этот коэффициент определяет наполнение страниц при создании индекса, дальше страницы расщепляются только при полном заполнении. Важно это в ситуации, когда данные могут быть вставлены в середину индекса. Если не зарезервировать под них место (коэффициент 100, 0 его эквивалент), то любая вставка будет приводить к расщеплению страницы и, как следствие, к большой фрагментации. Если индекс заполняется последовательно, то можно вполне поставить 100.
12 сен 16, 18:36    [19655867]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
questioner
Member

Откуда:
Сообщений: 1906
iljy
questioner,

не, че-то хреновое какое-то определение. Этот коэффициент определяет наполнение страниц при создании индекса, дальше страницы расщепляются только при полном заполнении. Важно это в ситуации, когда данные могут быть вставлены в середину индекса. Если не зарезервировать под них место (коэффициент 100, 0 его эквивалент), то любая вставка будет приводить к расщеплению страницы и, как следствие, к большой фрагментации. Если индекс заполняется последовательно, то можно вполне поставить 100.


допутим у нас 2 страницы целиком заполненные.

1: 1-2-3-4-6
2: 7-8-9-11-12

и мы вставляем 5.

Как будет примерно перестроены страницы ?

это и есть расщепление?

это то же самое, что и фрагментация?
12 сен 16, 18:53    [19655933]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
iljy
Member

Откуда:
Сообщений: 8711
questioner
iljy
questioner,

не, че-то хреновое какое-то определение. Этот коэффициент определяет наполнение страниц при создании индекса, дальше страницы расщепляются только при полном заполнении. Важно это в ситуации, когда данные могут быть вставлены в середину индекса. Если не зарезервировать под них место (коэффициент 100, 0 его эквивалент), то любая вставка будет приводить к расщеплению страницы и, как следствие, к большой фрагментации. Если индекс заполняется последовательно, то можно вполне поставить 100.


допутим у нас 2 страницы целиком заполненные.

1: 1-2-3-4-6
2: 7-8-9-11-12

и мы вставляем 5.

Как будет примерно перестроены страницы ?

это и есть расщепление?

это то же самое, что и фрагментация?


1: 1-2-3
2: 4-5-6
3: 7-8-9-11-12

Расщепление - это процесс, а фрагментация - вероятный его результат. Означает, что физически у вас страницы могут быть теперь расположены как 1, 3, ......., 2.
12 сен 16, 18:56    [19655941]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
questioner
Определение сабжа я знаю такое
https://habrahabr.ru/post/247373/
Коэффициент заполнения индекса определяет количество пространства на странице для хранения индекса на нижнем уровне (уровень листьев) перед тем как начать заполнять новую страницу. К примеру, если коэффициент выставлен в значение 90, то при росте индекс займет на странице 90%, а затем перейдет на следующую страницу.


1. Почему(когда) этот коэффициент важен ?
2. Как понять какое значение нужно выставить. по каким критериям ?
3. Чем плохи крайние значения? (0 и 100)


Вы можете выставить значение, но по мере работы с таблицей оно может меняться. Выставить -- значить при создании или обновлении индекса перестроить его так, чтобы наполненность приблизилась к этой величине.

"Как понять какое значение нужно выставить. по каким критериям ?" ответа на этот вопрос в общем виде нет. Вы смотрите, что происходит с вашей таблицей, как коэффициент меняется и принимаете решение. Частая вставка в разные места -- оставьте побольше пространства 60%-70%. Если таблица обновляется раз в год и только читается -- заполните её, перестройте индекс с коэффициентом 100 и сделайте её readonly.
12 сен 16, 19:28    [19656079]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
questioner
Member

Откуда:
Сообщений: 1906
iljy

Расщепление - это процесс, а фрагментация - вероятный его результат. Означает, что физически у вас страницы могут быть теперь расположены как 1, 3, ......., 2.


Не уловил как страницы поменялись местами
12 сен 16, 19:30    [19656091]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
questioner
iljy
Расщепление - это процесс, а фрагментация - вероятный его результат. Означает, что физически у вас страницы могут быть теперь расположены как 1, 3, ......., 2.


Не уловил как страницы поменялись местами


Взяли и поменялись. Где было место, туда страницу и поместили. Называется фрагментация. https://ru.wikipedia.org/wiki/Дефрагментация_диска
12 сен 16, 19:35    [19656118]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
iljy
Member

Откуда:
Сообщений: 8711
questioner
iljy
Расщепление - это процесс, а фрагментация - вероятный его результат. Означает, что физически у вас страницы могут быть теперь расположены как 1, 3, ......., 2.


Не уловил как страницы поменялись местами


Они не поменялись. Просто старая вторая страница теперь стала третьей, а новая вторая была добавлена туда, где в файле было место.
12 сен 16, 19:37    [19656128]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
questioner
Member

Откуда:
Сообщений: 1906
iljy
questioner
пропущено...


Не уловил как страницы поменялись местами


Они не поменялись. Просто старая вторая страница теперь стала третьей, а новая вторая была добавлена туда, где в файле было место.


а чем плохо, что страницы не отсортированы?
13 сен 16, 11:42    [19658272]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
iljy
Member

Откуда:
Сообщений: 8711
questioner
а чем плохо, что страницы не отсортированы?


Тем, что быстрее и оптимальнее всего читаются последовательно расположенные данные. Погуглите про фрагментацию и чем она плоха.
13 сен 16, 11:52    [19658379]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
questioner
Member

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

я нагуглил только про фрагментацию диска(на вики) Там объяснение без привязки к страницам.

Как я себе понял исходя из статьи, фрагментация это когда остаются небольшие свободные куски в памяти когда например из таблицы что-то удалили. Минусы в том, что головка винчестера преодолевает большие расстояния. и это дольше?

большая фрагментация и маленький fill factor это не одно и то же?

А кстати fill factor учитывает только записи для своей таблицы ?

Ну то бишь скажем fill factor 80 в настройках выставлен. с течением времени на странице 40 процентов пространства занимают данные искомой таблицы и 40 данные откуда-то из другого места(другая таблица, другое приложение - не важно)

Такое возможно?
если да, то
Какой будет fill factor в этом случае?
13 сен 16, 13:18    [19659014]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
questioner
Минусы в том, что головка винчестера преодолевает большие расстояния. и это дольше?
Именно так.
questioner
я нагуглил только про фрагментацию диска(на вики) Там объяснение без привязки к страницам.
Наверное, там объяснение с привязкой к дисковым блокам? Вот для сиквела это аналог страниц, а файл данных сиквела - аналог диска.

questioner
Ну то бишь скажем fill factor 80 в настройках выставлен. с течением времени на странице 40 процентов пространства занимают данные искомой таблицы и 40 данные откуда-то из другого места(другая таблица, другое приложение - не важно)

Такое возможно?
Нет.
questioner
А кстати fill factor учитывает только записи для своей таблицы ?
Да.
13 сен 16, 13:22    [19659032]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Спасибо.
alexeyvg

questioner
Ну то бишь скажем fill factor 80 в настройках выставлен. с течением времени на странице 40 процентов пространства занимают данные искомой таблицы и 40 данные откуда-то из другого места(другая таблица, другое приложение - не важно)

Такое возможно?
Нет.
questioner
А кстати fill factor учитывает только записи для своей таблицы ?
Да.


То есть на одной странице обязательно данные только с одной таблицы?

в sql server фрагментация это есть отклонение от fill factor ?
13 сен 16, 13:42    [19659157]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
msLex
Member

Откуда:
Сообщений: 9308
iljy
Тем, что быстрее и оптимальнее всего читаются последовательно расположенные данные. Погуглите про фрагментацию и чем она плоха.

Стоит отметить, что есть два вида фрагментации (оба присутствуют в вашем примере)

1. Логическая (она же внешняя) - это то, что вы как раз описали - несоответствие логического порядка страниц в индексе и их "физического" расположения внутри файла данных.
"Физического" в кавычках, т.к. расположение страниц в файле данных может очень сильно отличаться от расположения этих данных на носителей (райды, схд и прочее)

2. Физическая (она же внутренняя) - это заполненность страниц данными. В вашем примере страницы 1 и 2 будут физически фрагментированы на 50 % (ну почти)
13 сен 16, 14:00    [19659279]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
questioner,

То есть на одной странице обязательно данные только с одной таблицы?

в sql server фрагментация это есть отклонение от fill factor ?

вы как-то рано в filfactor полезли... ну и надо понимать что его установка действует только при создании/rebuild, потом всё равно стремиться к 100. И если вы не ВИДИТЕ проблемы в разряженности/сплитах то и трогать значение в 80 не стоит :)
13 сен 16, 14:04    [19659298]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
questioner
То есть на одной странице обязательно данные только с одной таблицы?

как же всё плохо...это во всех учебниках в первой главе описывают...
13 сен 16, 14:21    [19659392]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
questioner
Member

Откуда:
Сообщений: 1906
msLex
iljy
Тем, что быстрее и оптимальнее всего читаются последовательно расположенные данные. Погуглите про фрагментацию и чем она плоха.

Стоит отметить, что есть два вида фрагментации (оба присутствуют в вашем примере)

1. Логическая (она же внешняя) - это то, что вы как раз описали - несоответствие логического порядка страниц в индексе и их "физического" расположения внутри файла данных.
"Физического" в кавычках, т.к. расположение страниц в файле данных может очень сильно отличаться от расположения этих данных на носителей (райды, схд и прочее)

2. Физическая (она же внутренняя) - это заполненность страниц данными. В вашем примере страницы 1 и 2 будут физически фрагментированы на 50 % (ну почти)


Как получить логическую фрагментацию я представил


По поводу физической.

допустим индекс занимал
1-5 страницы. со второй страницы данные целиком очистились(удаление случилось). но потом в конец таблицы добавили новые значения(таблица с кластерным индексом). Так вот планировщик(я не знаю как эта сущность называется верно) видит пустую страницу и страницу, что идёт после пятой(фактически шестую) вставляет на место бывшей страницы 2.

Так это происходит?
13 сен 16, 14:34    [19659483]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно выставить коэффициент заполнения индекса.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
questioner,

http://blog.sqlauthority.com/2010/01/12/sql-server-fragmentation-detect-fragmentation-and-eliminate-fragmentation/
13 сен 16, 14:41    [19659526]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить