Что такое хот дроп
hot drop
Смотреть что такое «hot drop» в других словарях:
Drop It Like It’s Hot — Single by Snoop Dogg featuring Pharrell from the album R G (Rhythm Gangsta): The Masterpiece … Wikipedia
Drop It Like It’s Hot — Single par Snoop Dogg extrait de l’album R G (Rhythm Gangsta): The Masterpiece Sortie 26 octobre 2004 Durée 4:26 Genre Pop Rap Format … Wikipédia en Français
Drop the World — Single by Lil Wayne featuring Eminem from the album Rebirth R … Wikipedia
Drop It Low — Single by Ester Dean featuring Chris Brown from the album Music Inspired by More Than a Game Rele … Wikipedia
Drop It on Me — Single by Ricky Martin featuring Daddy Yankee from the album Life R … Wikipedia
Hot n Cold — Single by Katy Perry from the album One of the Boys Released … Wikipedia
Hot air ballooning — is the activity of flying hot air balloons. Attractive aspects of ballooning include the exceptional quiet (except when the propane burners are firing), the lack of a feeling of movement, and the bird s eye view. Since the balloon moves with the… … Wikipedia
Drop a Beat — Single by Moby from the album Moby Released 15 May 1992 … Wikipedia
Drop & Gimme 50 — Single by Mike Jones featuring Hurricane Chris from the album The Voice … Wikipedia
Drop It ’til It Pops — Studio album by Hot Club de Paris Released … Wikipedia
Drop the Dead Donkey — Format Satirical sitcom Created by Andy Hamilton Guy Jenkin … Wikipedia
hot drop
Смотреть что такое «hot drop» в других словарях:
Drop It Like It’s Hot — Single by Snoop Dogg featuring Pharrell from the album R G (Rhythm Gangsta): The Masterpiece … Wikipedia
Drop It Like It’s Hot — Single par Snoop Dogg extrait de l’album R G (Rhythm Gangsta): The Masterpiece Sortie 26 octobre 2004 Durée 4:26 Genre Pop Rap Format … Wikipédia en Français
Drop the World — Single by Lil Wayne featuring Eminem from the album Rebirth R … Wikipedia
Drop It Low — Single by Ester Dean featuring Chris Brown from the album Music Inspired by More Than a Game Rele … Wikipedia
Drop It on Me — Single by Ricky Martin featuring Daddy Yankee from the album Life R … Wikipedia
Hot n Cold — Single by Katy Perry from the album One of the Boys Released … Wikipedia
Hot air ballooning — is the activity of flying hot air balloons. Attractive aspects of ballooning include the exceptional quiet (except when the propane burners are firing), the lack of a feeling of movement, and the bird s eye view. Since the balloon moves with the… … Wikipedia
Drop a Beat — Single by Moby from the album Moby Released 15 May 1992 … Wikipedia
Drop & Gimme 50 — Single by Mike Jones featuring Hurricane Chris from the album The Voice … Wikipedia
Drop It ’til It Pops — Studio album by Hot Club de Paris Released … Wikipedia
Drop the Dead Donkey — Format Satirical sitcom Created by Andy Hamilton Guy Jenkin … Wikipedia
hot drop
1 hot drop
2 hot drop
3 hot drop
См. также в других словарях:
Drop It Like It’s Hot — Single by Snoop Dogg featuring Pharrell from the album R G (Rhythm Gangsta): The Masterpiece … Wikipedia
Drop It Like It’s Hot — Single par Snoop Dogg extrait de l’album R G (Rhythm Gangsta): The Masterpiece Sortie 26 octobre 2004 Durée 4:26 Genre Pop Rap Format … Wikipédia en Français
Drop the World — Single by Lil Wayne featuring Eminem from the album Rebirth R … Wikipedia
Drop It Low — Single by Ester Dean featuring Chris Brown from the album Music Inspired by More Than a Game Rele … Wikipedia
Drop It on Me — Single by Ricky Martin featuring Daddy Yankee from the album Life R … Wikipedia
Hot n Cold — Single by Katy Perry from the album One of the Boys Released … Wikipedia
Hot air ballooning — is the activity of flying hot air balloons. Attractive aspects of ballooning include the exceptional quiet (except when the propane burners are firing), the lack of a feeling of movement, and the bird s eye view. Since the balloon moves with the… … Wikipedia
Drop a Beat — Single by Moby from the album Moby Released 15 May 1992 … Wikipedia
Drop & Gimme 50 — Single by Mike Jones featuring Hurricane Chris from the album The Voice … Wikipedia
Drop It ’til It Pops — Studio album by Hot Club de Paris Released … Wikipedia
Drop the Dead Donkey — Format Satirical sitcom Created by Andy Hamilton Guy Jenkin … Wikipedia
hot drop
Смотреть что такое «hot drop» в других словарях:
Drop It Like It’s Hot — Single by Snoop Dogg featuring Pharrell from the album R G (Rhythm Gangsta): The Masterpiece … Wikipedia
Drop It Like It’s Hot — Single par Snoop Dogg extrait de l’album R G (Rhythm Gangsta): The Masterpiece Sortie 26 octobre 2004 Durée 4:26 Genre Pop Rap Format … Wikipédia en Français
Drop the World — Single by Lil Wayne featuring Eminem from the album Rebirth R … Wikipedia
Drop It Low — Single by Ester Dean featuring Chris Brown from the album Music Inspired by More Than a Game Rele … Wikipedia
Drop It on Me — Single by Ricky Martin featuring Daddy Yankee from the album Life R … Wikipedia
Hot n Cold — Single by Katy Perry from the album One of the Boys Released … Wikipedia
Hot air ballooning — is the activity of flying hot air balloons. Attractive aspects of ballooning include the exceptional quiet (except when the propane burners are firing), the lack of a feeling of movement, and the bird s eye view. Since the balloon moves with the… … Wikipedia
Drop a Beat — Single by Moby from the album Moby Released 15 May 1992 … Wikipedia
Drop & Gimme 50 — Single by Mike Jones featuring Hurricane Chris from the album The Voice … Wikipedia
Drop It ’til It Pops — Studio album by Hot Club de Paris Released … Wikipedia
Drop the Dead Donkey — Format Satirical sitcom Created by Andy Hamilton Guy Jenkin … Wikipedia
MVCC-5. Внутристраничная очистка и HOT
Напомню, что мы рассмотрели вопросы, связанные с изоляцией, сделали отступление про организацию данных на низком уровне, а затем подробно поговорили о версиях строк и о том, как из версий получаются снимки данных.
Сегодня займемся двумя довольно тесно связанными вопросами: внутристраничной очисткой и HOT-обновлениями. Оба механизма можно отнести к разряду оптимизаций; они важны, но в пользовательской документации практически не освещены.
Внутристраничная очистка при обычных обновлениях
При обращении к странице — как при обновлении, так и при чтении — может происходить быстрая внутристраничная очистка, если PostgreSQL поймет, что место на странице заканчивается. Это происходит в двух случаях.
Внутристраничная очистка убирает версии строк, не видимые ни в одном снимке (находящиеся за «горизонтом событий» базы данных, об этом мы говорили в прошлый раз), но работает строго в пределах одной табличной страницы. Указатели на вычищенные версии строк не освобождаются, так как на них могут вести ссылки из индексов, а индекс — это уже другая страница. Внутристраничная очистка никогда не выходит за одну табличную страницу, зато выполняется очень быстро.
Из этих же соображений не обновляется карта свободного пространства; также это приберегает освобожденное место для обновлений, а не для вставок. Не обновляется и карта видимости.
Тот факт, что страница может очищаться при чтении, означает, что запрос на чтение (SELECT) может вызвать изменение страниц. Это еще один такой случай, в дополнение к рассмотренному ранее отложенному изменению битов-подсказок.
Посмотрим, как это работает, на примере. Создадим таблицу и индексы по обоим столбцам.
Если в столбце s хранить только латинские буквы, то каждая версия строки будет занимать 2004 байта плюс 24 байта заголовка. Параметр хранения fillfactor установим в 75% — места будет хватать на три строки.
Для удобства пересоздадим уже знакомую функцию, дополнив вывод двумя полями:
И еще создадим функцию, чтобы заглядывать внутрь индексной страницы:
Проверим, как работает внутристраничная очистка. Для этого вставим одну строку и несколько раз изменим ее:
В странице сейчас четыре версии строки:
Как и ожидалось, мы только что превысили порог fillfactor. На это указывает разница между значениями pagesize и upper: она превышает порог в 75% от размера страницы, что составляет 6144 байтов.
Итак, при следующем обращении к странице должна произойти внутристраничная очистка. Проверим это.
Все неактуальные версии строк (0,1), (0,2) и (0,3) очищены; после этого на освободившееся место добавлена новая версия строки (0,5).
Оставшиеся после очистки версии строк физически сдвигаются в сторону старших адресов страницы так, чтобы все свободное место было представлено одним непрерывным фрагментом. Соответствующим образом изменяются и значения указателей. Благодаря этому не возникает проблем с фрагментацией свободного места в странице.
Указатели на удаленные версии строк освободить нельзя, поскольку на них существует ссылки из индексной страницы. Посмотрим в первую страницу индекса hot_s (потому что нулевая занята метаинформацией):
Ту же картину мы увидим и в другом индексе:
Можно обратить внимание, что указатели на табличные строки идут здесь “задом наперед”, но это не имеет значения, поскольку во всех версиях строк находится одно и то же значение А вот в предыдущем индексе указатели упорядочены по значениям s, и это существенно.
При индексном доступе PostgreSQL может получить (0,1), (0,2) или (0,3) в качестве идентификатора версии строки. Тогда он попробует получить соответствующую строку из табличной станицы, но благодаря статусу dead указателя обнаружит, что такая версия уже не существует и проигнорирует ее. (На самом деле, в первый раз обнаружив отсутствие версии табличной строки, PostgreSQL изменит и статус указателя в индексной странице, чтобы повторно не обращаться к табличной странице.)
Принципиально то, что внутристраничная очистка работает только в пределах одной табличной страницы и не очищает индексные страницы.
HOT-обновления
Чем плохо держать в индексе ссылки на все версии строки?
Во-первых, при любом изменении строки приходится обновлять все индексы, созданные для таблицы: раз появилась новая версия, необходимо иметь на нее ссылки. И делать это надо в любом случае, даже если изменяются поля, не входящие в индекс. Очевидно, что это не слишком эффективно.
Во-вторых, в индексах накапливаются ссылки на исторические версии строки, которые потом приходится очищать вместе с самими версиями (как это делается, мы рассмотрим чуть позже).
Более того, есть особенность реализации B-дерева в PostgreSQL. Если на индексной странице недостаточно места для вставки новой строки, страница делится на две и все данные перераспределяются между ними. Это называется расщеплением (split) страницы. Однако при удалении строк две индексные страницы уже не «склеиваются» в одну. Из-за этого размер индекса может не уменьшиться даже при удалении существенной части данных.
Естественно, чем больше индексов создано на таблице, тем с большими сложностями приходится сталкиваться.
Однако если меняется значение столбца, который не входит ни в один индекс, то нет никакого смысла создавать дополнительную запись в B-дереве, содержащую то же самое значение ключа. Именно так работает оптимизация, называемая HOT-обновлением — Heap-Only Tuple Update.
При таком обновлении в индексной странице находится лишь одна запись, ссылающаяся на самую первую версию строки в табличной странице. А уже внутри этой табличной страницы организуется цепочка версий:
Чтобы посмотреть на работу HOT-обновления, удалим один индекс и очистим таблицу.
Повторим вставку и обновление строки.
Вот что мы видим в табличной странице:
В странице — цепочка изменений:
При этом в индексе одна-единственная ссылка на “голову” цепочки:
Подчеркнем, что HOT-обновления работают в случае, если обновляемые поля не входят ни в один индекс. Иначе в каком-либо индексе оказалась бы ссылка непосредственно на новую версию строки, что противоречит идее этой оптимизации.
Оптимизация действует только в пределах одной страницы, поэтому дополнительный обход цепочки не требует обращения к другим страницам и не ухудшает производительность.
Внутристраничная очистка при HOT-обновлениях
Частный, но важный случай внутристраничной очистки представляет собой очистка при HOT-обновлениях.
Как и в прошлый раз, мы уже превысили порог fillfactor, так что следующее обновление должно привести к внутристраничной очистке. Но в этот раз в странице — цепочка обновлений. «Голова» этой HOT-цепочки всегда должна оставаться на своем месте, поскольку на нее ссылается индекс, а остальные указатели могут быть освобождены: известно, что на них нет ссылок извне.
Чтобы не трогать «голову», применяется двойная адресация: указатель, на который ссылается индекс — в данном случае (0,1), — получает статус «redirect», перенаправляющий на нужную версию строки.
Обратите внимание, что:
Следующее обновление снова вызывает внутристраничную очистку:
Снова часть версий очищена, а указатель на «голову» соответствующим образом сдвинут.
Вывод: при частых обновлениях столбцов, не входящих в индексы, может иметь смысл уменьшить параметр fillfactor, чтобы зарезервировать некоторое место на странице для обновлений. Конечно, надо учитывать, что чем ниже fillfactor, тем больше остается незанятого места на странице и, соответственно, физический размер таблицы увеличивается.
Разрыв HOT-цепочки
Если на странице не хватит свободного места, чтобы разместить новую версию строки, цепочка прервется. На версию строки, размещенную на другой странице, придется сделать отдельную ссылку из индекса.
Чтобы получить такую ситуацию, начнем параллельную транзакцию и построим в ней снимок данных.
Снимок не даст очистить версии строк на странице. Теперь выполняем обновление в первом сеансе:
При следующем обновлении места на странице уже не хватит, но внутристраничная очистка не сможет ничего освободить:
В версии (0,5) видим ссылку на (1,1), ведущую на страницу 1.
Теперь в индексе — две строки, каждая из которых указывает на начало своей HOT-цепочки: