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

Откуда:
Сообщений: 194
Привет.
Интересует совершенно отвлеченный вопрос о том, как энджин физически вставляет запись в таблицу, на которой определен кластерный индекс. Предположим, в 5 гигабайтную таблицу в 3-й или 5-й ряд вставляется\удаляется запись. Кластерный индекс требует соответствия записей на диске заданному индексу. Неужели вся эта масса в 5Гб начинает переписываться в новые сектора диска так, чтоб индекс оставался валидным? Это ж кошмар что будет.
Спасибо.
17 сен 14, 17:19    [16586831]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
mabanza
Кластерный индекс требует соответствия записей на диске заданному индексу
Это где такое написано?
17 сен 14, 17:24    [16586857]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
mabanza,

https://www.sql.ru/articles/mssql/03013101indexes.shtml
17 сен 14, 17:27    [16586882]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
mabanza
Member

Откуда:
Сообщений: 194
>Это где такое написано?
Интересный форум - я у вас спрашиваю, вы у меня спрашиваете в ответ.

Насчет статьи. Познавательно. И все-таки в предельном случае, когда все страницы заполнены и нужно вставить запись в первую страницу - что происходит?
Спасибо.
17 сен 14, 17:50    [16586997]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
mabanza
>Это где такое написано?
Интересный форум - я у вас спрашиваю, вы у меня спрашиваете в ответ.
Я спрашиваю про источник ваших фантазий. Вы это сами лично придумали или прочитали где?

mabanza
И все-таки в предельном случае, когда все страницы заполнены и нужно вставить запись в первую страницу - что происходит?
Происходит расщепление страницы на две.

Сообщение было отредактировано: 17 сен 14, 18:02
17 сен 14, 18:02    [16587072]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
mabanza,

> И все-таки в предельном случае, когда все страницы заполнены и нужно вставить запись в первую страницу - что происходит?

где-то в файле данных будет выделена еще одна страница, примерно половина записей будет перенесена в нее, остальное останется на исходной. никаких 5 Гб при этом сдвигать не надо - страница выделяется там, где место есть. физически страницам не обязательно следовать друг за другом - они просто объединены в двусвязный список, и это справедливо и для кластерного индекса тоже.
17 сен 14, 18:14    [16587118]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
mabanza
Member

Откуда:
Сообщений: 194
Понятно. То есть каждый раз переносится максимум 8 Кб, а, как правило, меньше или вообще ничего.

Странно, что кластерный индекс с точки зрения доступа к диску, такая же небыстрая вещь как и некластерный. Чтоб сформировать страницу, контроллер определяет сектор, подводит головку, пропускает пару-тройку оборотов для стабилизации, наконец читает. За следующей записью может быть перепрыгивает в другое место диска и процесс повторяется. Это для кластерного индекса.
Некластерный делает то же, но еще один дополнительный шаг - читает фактические данные по некоторму уникальному номеру, который он хранит.

Сразу же тут будет возражение уважаемого Сергея Алексеевича: А ты дефрагментируй диск.
Но утилита дефрагментации ничего не знает о страничной структуре БД. И прыжки продолжатся в том же темпе и после дефрагментации.

Ну, в общем, на вопрос отвечено и понято.
Спасибо.
17 сен 14, 19:03    [16587334]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
gandjustas
Member

Откуда:
Сообщений: 857
Блог
mabanza
Странно, что кластерный индекс с точки зрения доступа к диску, такая же небыстрая вещь как и некластерный.


Это гениально, тысячачертей!
17 сен 14, 19:07    [16587361]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Если коротко - то феерический бред.

mabanza
Странно, что кластерный индекс с точки зрения доступа к диску, такая же небыстрая вещь как и некластерный.
Раз индексы такие медленные, то не делайте их. Это ж всяко быстрее перебирать все записи для поиска одной.

mabanza
Чтоб сформировать страницу, контроллер определяет сектор, подводит головку, пропускает пару-тройку оборотов для стабилизации, наконец читает.
Это если страницы не оказалось в буфер-пуле. Или страница не лежала в кеше контроллера.

mabanza
За следующей записью может быть перепрыгивает в другое место диска и процесс повторяется. Это для кластерного индекса.
Если эта следующая запись не оказалась в тех же кешах, потому что сервер умный и может читать больше, чем его просят. И контроллеры умные и тоже могут читать больше, чем их просят.

mabanza
Некластерный делает то же, но еще один дополнительный шаг - читает фактические данные по некоторму уникальному номеру, который он хранит.
Не всегда. И не только так.

mabanza
Сразу же тут будет возражение уважаемого Сергея Алексеевича: А ты дефрагментируй диск.
Но утилита дефрагментации ничего не знает о страничной структуре БД. И прыжки продолжатся в том же темпе и после дефрагментации.
Утилита дефрагментации дефрагментирует файл, чтобы все его куски были расположены последовательно и не мешались с другими файлами. Процедура дефрагментации индекса делает то же самое со страницами индекса.

mabanza
Ну, в общем, на вопрос отвечено и понято.
Уверены? Я вот нет.
17 сен 14, 19:21    [16587425]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
mabanza
Member

Откуда:
Сообщений: 194
>Если коротко - то феерический бред.
Александр Сергеевич.
Избавьтесь от манеры давать личностные оценки на форуме. Бред это или нет - это вопрос новичка (см. тайтл). Я с уважением отношусь к любому собеседнику, но если я вижу, что одно мое высказывание приводит к каскаду нервных цитат, я вижу очень ограниченного собеседника (извините за эту самую личностную оценку). А может быть даже деперсонализованного с манией гениальности. С таким беседовать интересно разве что специалисту, но не мне уж точно.
Здоровья вам.
17 сен 14, 19:48    [16587533]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
mabanza
Александр Сергеевич.
Это вы сейчас с Пушкиным разговариваете? Или просто не в состоянии прочитать, как меня зовут?

mabanza
Избавьтесь от манеры давать личностные оценки на форуме. Бред это или нет - это вопрос новичка (см. тайтл). Я с уважением отношусь к любому собеседнику, но если я вижу, что одно мое высказывание приводит к каскаду нервных цитат, я вижу очень ограниченного собеседника (извините за эту самую личностную оценку). А может быть даже деперсонализованного с манией гениальности. С таким беседовать интересно разве что специалисту, но не мне уж точно.
Как-то странно видеть личностные оценки на форуме от человека, который просит избавиться от манеры их давать.

И да, играть в доктора и ставить диагнозы очень не рекомендую.

mabanza
Здоровья вам.
И вам не болеть.
17 сен 14, 20:01    [16587598]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
rcryo
Member

Откуда: Москва
Сообщений: 324
Проблема в том, что чем больше человек общается с компьютерами и прочими инф. технологиями, тем труднее ему в общении с обычными людьми. Профессиональная деформация так сказать, ничего не поделаешь. Задавая вопрос на форуме будьте морально готовы, здесь много таких.
17 сен 14, 20:03    [16587603]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Модератор: mabanza, rcryo,

Официально предупреждаю: дружно закончили играть в докторов. Иначе мы окажемся в неравном положении - я вам лечение назначить смогу, а вы мне на форуме в течение недели даже ничего в ответ написать не сможете.


Сообщение было отредактировано: 17 сен 14, 20:07
17 сен 14, 20:06    [16587618]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос новичка  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> Странно, что кластерный индекс с точки зрения доступа к диску, такая же небыстрая вещь как и некластерный.

можно же считать, что стакан наполовину полон: некластерный индекс, с точки зрения доступа к диску, такая же быстрая вещь, как и кластерный.

> Но утилита дефрагментации ничего не знает о страничной структуре БД.

сервер зато знает об этом и обладает средствами как для отслеживания логической фрагментации, так и для ее устранения ( http://msdn.microsoft.com/en-us/library/ms189858.aspx ). по умолчанию этого не делается, но настроить подобное обслуживание особого труда не составит (прямо на этом форуме готовые скрипты выкладывались множество раз).
а постоянное (при каждой вставке/изменении данных) поддержание строго последовательного физически хранения данных в индексе было бы слишком дорогим удовольствием - очевидное соображение на этот счет вы же и высказали в заглавном посте.
17 сен 14, 21:49    [16587938]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить