Блоки переполнения Oracle Hash Cluster

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

Эти блоки переполнения перечислены как связанные с основным блоком, но я не могу найти подробную информацию о том, как они распределяются или связываются.

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

Как контролируется свободное место в цепочке - в том, что по мере того, как данные продолжают вставляться, должен ли он пройти всю цепочку, чтобы узнать, есть ли у него свободное место в текущей цепочке переполнения, а затем, если он не находит его , затем он выбирает выделение нового блока?


person Andrew    schedule 26.04.2010    source источник


Ответы (1)


Из Руководства по концепциям (прокрутите до «Хэш Кластерного Хранилища»:

Когда пользователи вставляют строки в кластер для отдела 43, база данных не может хранить эти строки в блоке 100, который заполнен. База данных связывает блок 100 с новым блоком переполнения, скажем, блоком 200, и сохраняет вставленные строки в новом блоке. Блоки 100 и 200 теперь могут хранить данные для любого отдела. Как показано на рисунке 2-7, запрос любого отдела 20 или 43 теперь требует двух операций ввода-вывода для извлечения данных: блока 100 и связанного с ним блока 200.

Это означает, что блок переполнения выделен исключительно для этого хеш-значения.

Хотя я не знаю ответа на ваш второй вопрос.

person Tony Andrews    schedule 26.04.2010
comment
Я видел диаграмму, хотя в ней явно не указано, что она является исключительной, вывод таков, что это так. - person Andrew; 26.04.2010
comment
Да, я согласен, что взаимосвязь неявная, а не явная, но эта часть достаточно ясна: база данных связывает блок 100 с новым блоком переполнения, скажем, блоком 200. Здесь не говорится, что блок базы данных связывает блок 100 с новым блоком переполнения, скажем, блок 200 или существующий блок переполнения. Подразумевается, что блок переполнения принадлежит исходному блоку, а исходный блок, как мы знаем, принадлежит хеш-значению. - person Tony Andrews; 26.04.2010
comment
+1 пока, просто нужна вторая часть, которая является более важным аспектом с точки зрения производительности. - person Andrew; 27.04.2010
comment
Логически вполне логично, что Oracle выделяет свободный блок в конце цепочки. Я не знаю, будут ли цепочки блоков одно- или двухзвенными. Я бы подозревал двойную связь, поскольку это существующий механизм для листовых блоков индекса. С точки зрения ввода-вывода я не знаю, почему это действительно важно; вам придется искать каждый блок в хэш-цепочке, и ни один из этих блоков переполнения не будет непрерывным после первоначального распределения. - person Adam Musch; 27.04.2010
comment
Это имеет отношение к производительности вставки, поскольку она будет становиться все медленнее и медленнее, чем больше блоков переполнения выделяется для каждого хэш-значения. В том, в котором они находятся, ввод-вывод для этого хэш-значения будет постоянным, и я согласен, что нужно читать каждый блок. - person Andrew; 27.04.2010