|
|
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Есть ли смысл помещения одной таблицы в кластер? Таблица ссылается сама на себя, то есть есть столбец id и parent_id. Для таблицы есть в равной мере все операторы DML. Но скорость важна для SELECT. В запросе столбцы указываются во фразе WHERE. Как правильно рассчитать параметры кластера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 14:54 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Может иметь смысл если обращение в основном по кластерному ключу. У индекса будет минимальный кластеринг-фактор. Если интенсивный DML , то лучше не связываться. Все имхо. Про параметры достаточно подробно сказано в документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 15:11 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
То есть как я понимаю, кластер подходит больше для чтения или другими словами, если будет много DML - операций - кластер становится неэффективным? Каковы причины? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 16:16 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Оценка размера кластера выполняется следующими шагами: 1. Вычислите общий размер заголовка блока. 2. Вычислите размер свободной памяти в блоке данных. 3. Вычислите сумму длин столбцов для средней строки на ключ кластера. 4. Вычислите общий размер средней строки для всех кластеризуемых таблиц. 5. Вычислите средний размер блока кластера. 6. Вычислите общее число блоков, требуемое для кластера. Ниже объяснен каждый из этих шагов. Шаг 1: Вычислите общий размер заголовка блока Память, требуемая для заголовка блока, представляется следующей формулой: заголовок блока = фикс.заголовок + перем.заголовок транзакций + оглавление таблиц + оглавление строк Здесь: фикс.заголовок (*) 57 байт переменный (*) 23*I заголовок где I - значение INITRANS для таблицы транзакций оглавление таблиц 4*N + 1 где N - число таблиц в сегменте данных оглавление строк 2*R где R - число строк на блок (вычисляемое в шаге 5) Если INITRANS = 2, то мы можем частично разрешить предыдущие формулы: заголовок блока = 57 + 46 + (4N + 1) + 2R байт = 104+ 4Т + 2R байт Шаг 2: Вычислите размер свободной памяти в блоке данных Память, резервируемая в каждом блоке для данных и специфицируемая параметром PCTFREE, вычисляется как процент от размера блока за вычетом заголовка блока: свободная память = (размер блока - общий размер заголовка) Размер блока базы данных устанавливается при создании базы данных; вы можете узнать его, выдав команду SQL*DBA SHOW: SHOW PARAMETERS db_block_size; Замечание: Для дополнительной информации о команде SQL*DBA SHOW обратитесь к документу ORACLE7 Server Utilities User's Guide. Предположив, что размер блока равен 2K, мы получим следующую оценку для свободной памяти для новых данных в блоке: свободная память = (2048 - (104 + 4N + 2R) = (1944 - 4N - 2R) байт Принимая, что в кластере две таблицы (т.е. N = 2), мы можем упростить эту формулу до следующей: свободная память = 1944 - (4*2) - 2R байт = 1932 - 2R байт Шаг 3: Вычислите сумму длин столбцов для средней строки на ключ кластера Вычислите память, требуемую для значений средней строки, используя шаг 3 процедуры, обсуждавшейся в секции "Расчет памяти для некластеризованных таблиц" на странице 8-19. Обратите внимание на следующие тонкости: * Вычислите память, требуемую для значений средней строки, отдельно по каждой таблице в кластере. Например, если кластер содержит таблицы T1 и T2, вычислите средний размер строки для обеих этих таблиц. Управление объектами схемы 8-45 * Не включайте в указанные выше расчеты память, требуемую для ключа кластера. Однако отметьте количество памяти, требуемое для хранения среднего значения ключа кластера, для шага 5. Например, вычисляя память, требуемую для средней строки таблицы T1, не включайте память, требуемую для хранения ключа кластера. * Не включайте память, требуемую для заголовка строки (т.е. байты длины дя каждого столбца); эта память будет подсчитываться на следующем шаге. Например, предположим, что две кластеризуемые таблицы созданы следующими предложениями: CREATE TABLE t1 (a CHAR(10), b DATE, c NUMBER(10,2)) CLUSTER t1_t2 (c); CREATE TABLE t2 (c NUMBER(10,2), d CHAR(10)) CLUSTER t1_t2 (c); Заметьте, что ключом кластера является столбец C в каждой таблице. Рассматривая эти таблицы, вычислим память, требуемую для средней строки таблицы T1 (D1) и память, требуемую для средней строки таблицы T2 (D2): D1 (память на среднюю строку) = (a + b) = (10 + 7) байт = 17 байт D2 (память на среднюю строку) = (d) = 10 байт Шаг 4: Вычислите общий размер средней строки для кластеризуемых таблиц Вы можете вычислить минимальный объем памяти, требуемой для строки в кластеризованной таблице, по следующей формуле: S(n) байт/строку = заголовок строки + F(n) + V(n) + D(n) где: заголовок строки(*) 4 байта на строку для кластеризованной таблицы. F(n) Общее число байтов длины для всех столбцов в таблице (n) с длинами 250 байт или меньше. На каждый такой столбец отводится один байт длины. V(n) Общее число байтов длины для всех столбцов в таблице (n) с длинами больше 250 байт или меньше. На каждый такой столбец отводится 3 байта длины. D(n) Комбинированная память для всех столбцов в средней строке таблицы (n) (из шага 3). Замечание: Не включайте длины столбцов для ключа кластера в переменные F и V ни для одной таблицы в кластере. Эта память будет подсчитана на шаге 5. Например, общий размер средней строки кластеризованных таблиц T1 и T2, описанных в шаге 3, составляет: S(1) = (4 + (1 * 2) + (3 * 0) + 17) байт = 23 байта S(2) = (4 + (1 * 1) + (3 * 0) + 10) байт = 15 байт Замечание: Абсолютный минимум для размера строки кластеризованной таблицы равен 10 байт, и зависит от операционной системы. Поэтому, если ваше вычисленное значение общего размера средней строки таблицы меньше 10, используйте вместо него число 10 в последующих расчетах. Шаг 5: Вычислите средний размер блока кластера Чтобы вычислить средний размер блока кластера, сначала оцените среднее число строк (по всем таблицам) на ключ кластера. После того, как это известно, используйте следующую формулу для вычисления среднего размера блока кластера: средний размер блока кластера (байт) = (( R(1)*S(1) ) + ( R(2)*S(2) ) + .. + ( R(n)*S(n) )) + заголовок ключа + C(k) + S(k) + 2R(t) где: R(n) Среднее число строк в таблице (n), ассоциированных с ключом кластера. S(n) Средний размер строки в таблице (n), вычисленный на шаге 4. заголовок ключа(*) 19 C(k) Длина столбцов для ключа кластера. Управление объектами схемы 8-47 S(k) Память, требуемая для хранения среднего значения ключа кластера. R(t) Общее число строк, ассоциироованных со средним ключом кластера (т.е. сумма R(1)+R(2)+...+R(n)). Это учитывает память, требуемую в заголовке блока для каждой строки в блоке. Например, рассмотрим кластер, содержащий таблицы T1 и T2. Пусть средний ключ кластера имеет одну строку на таблицу T1 и 20 строк на таблицу T2. Пусть также ключ кластера имеет тип данных NUMBER (один байт на длину столбца), и среднее значение ключа имеет 4 цифры (3 байта). С учетом этих условий и предыдущих результатов, средняя память на ключ кластера (и ассоциированные строки) составит: SIZE = ((1 * 23) + (20 * 15) + 19 + 1 + 3 + (2 * 21) байт = 388 байт Подставьте вычисленное значение в опцию SIZE, когда вы создаете кластер с помощью команды CREATE CLUSTER. Это оценивает память, требуемую для хранения среднего ключа кластера и всех ассоциированных с ним строк; ORACLE использует значение SIZE для того, чтобы ограничить количество ключей кластера, которе могут назначаться одному и тому же блоку данных. Вычислив среднее значение SIZE, несколько увеличьте его, чтобы учесть память, требуемую для тех ключей кластера, которые перевешивают среднюю оценку. Чтобы оценить число ключей кластера, которые умещаются в блоке данных, используйте следующую формулу, которая использует размер свободной памяти, вычисленный вами на шаге 2, число строк, ассоциированных со средним ключом кластера R(t), и значение SIZE: # ключей/блок = FLOOR ( своб.память + 2R / (SIZE + 2R(t)) ) Например, взяв значение SIZE = 400 байт (оцененное значение 388 после округления вверх), R(t) = 21, а размер свободной памяти в блоке = 1742 - 2R байт, получим следующий результат: # ключей/блок = FLOOR ((1936 - 2R + 2R) / (400 + 2 * 21)) = FLOOR (1936 / 442) = FLOOR (4.4) = 4 Шаг 6: Вычислите общее число блоков, требуемое для кластера Чтобы вычислить общее число блоков, требуемое для кластера, вы должны оценить число возможных значений ключа в кластере. После этого используйте следующую формулу, чтобы вычислить общее число блоков, требуемое для кластера: # блоков = CEIL(# ключей кластера / # ключей на блок) Замечание: если у вас есть тестовая база данных, вы можете использовать статистику, сгенерированную командой ANALYZE, чтобы определить количество значений ключа кластера. См. "Анализ таблиц, индексов и кластеров" на странице 8-62. Например, предположим, что в кластере T1_T2 приблизительно 500 значений ключа кластера. # блоков T1_T2 = CEIL(500/3) = CEIL(166.7) = 167 Чтобы вычислить это же значение в байтах, умножьте результат на размер блока данных соответствующей базы данных. Не забывайте, что эта процедура предоставляет приемлемую ОЦЕНКУ размера кластера, но не точное число блоков или байт. Оценив размер кластера, вы можете использовать эту информацию при специфицировании параметра памяти INITIAL (размера начального экстента кластера) в вашем соответствующем предложении CREATE CLUSTER. Требования памяти для существующих таблиц кластера После того как кластеризованные таблицы созданы и используются, память, требуемая для них, обычно выше, чем оценка, данная в предыдущей секции. Больше памяти требуется из-за метода, с помощью которого ORACLE управляет свободным пространством в базе данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 16:48 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Сорри за предыдущее сочинение :_) Я сейчас пытался найти в книгах/доках причины по которым кластер тормозит операции записи но пока что-то не вижу... Но хешированный кластер точно так себя ведёт.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 16:57 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Вожможным решением является использование IOT. (не уверен до конца что эффективнее IOT или Cluster) Если приоритетным является доступ по parent_id и в запросе участвуют всегда parent_id и node_id, то PK для IOT должен быть: primary key --> parent_id, node_id в этом случае Oracle всегда будет искать node_id внутри range по выбранному parent_id. НО ЭФФЕКТИВНОСТЬ БУДЕТ СИЛЬНО ЗАВИСИТЬ ОТ СРЕДНЕГО КОЛИЧЕСТВА NODE_ID ПРИХОДЯЩИХСЯ НА 1 PARENT_ID. ПРИ ЗНАЧИТЕЛЬНОМ УВЕЛИЧЕНИИ ЭТОГО ПАРАМЕТРА ОСОБЕННО ПРИ БОЛЬШОЙ AVG ROW LENGHT ЭФФЕКТИВНОСТЬ БУДЕТ ПАДАТЬ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 21:22 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
В "Performance Tuning Guide and Reference" написано: "Do not cluster tables if the application joins them only occasionally or modifies their common column values frequently. Modifying a row's cluster key value takes longer than modifying the value in an unclustered table, because Oracle might need to migrate the modified row to another block to maintain the cluster." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 09:03 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
to Oleg Afanasiev: Спасибо за развёрнутый ответ. Надеюсь, что ты - это всё, не руками писал? to ShgGena: А что такое node_id? Я не совсем понял. А вообще я пока так и не получил чёткого утверждения в каких именно случаях эффективно(и наоборот) использование кластера. Я же исходил из того, что раз кластер эффективен при помещении нескольких таблиц, у которых есть общий столбец и эти таблицы связываются в запросе. В моём случае таблица одна, но она сама ссылается на себя, то есть в принципе ситуация такая же что и скажем с двумя таблицами. Прирост строк в моей таблице составляет где-то 10% в месяц. Удалений в принципе не сильно много. Есть апдейты. К сожалению не могу точно сказать, так как это таблица не в моей базе. Причём есть такой нехороший момент как изменения первичного ключа (id). Как это опять же влияет на кластер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 09:08 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
А какой столбец ты собираешься использовать в качестве кластерного ключа ? Предполагаю, что parent_id, но хотелось бы уточнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 10:25 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Вот ещё накопал, надеюсь будет полезно: Здесь же есть некоторые пояснения к update и insert ------------------------------------------------------------------------ Кластеры могут уменьшить производительность предложений INSERT в сравнении с раздельным хранением таблиц со своими собственными индексами. Эти недостатки обусловлены использованием пространства и числом блоков, которые должны быть посещены для просмотра таблицы; поскольку в каждом блоке хранятся данные из нескольких таблиц, для хранения каждой кластеризованной таблицы требуется больше блоков, чем если бы она была некластеризована. Чтобы определить данные, которые целесообразно было бы хранить в кластеризованной форме, поищите таблицы, связанные друг с другом через ограничения ссылочной целостности, а также таблицы, которые часто используются совместно через предложения SELECT, соединяющие данные из нескольких таблиц. Кластеризуя таблицы по столбцам, используемым в соединениях таблиц, вы уменьшаете число блоков данных, которые должны быть просмотрены при обработке запроса; все строки, требуемые для соединения по ключу кластера, находятся в одном блоке. Поэтому производительность соединений улучшается. Аналогично, может оказаться полезным кластеризовать индивидуальную таблицу. Например, таблицу EMP можно было бы кластеризовать по столбцу DEPTNO, чтобы сгруппировать вместе строки для сотрудников по каждому отделу. Это дало бы преимущество приложениям, обычно обрабатывающим строки по отделам. КЛЮЧ КЛАСТЕРА - это столбец или группа столбцов, общих для всех кластеризованных таблиц. Столбцы ключа кластера указываются при создании кластера. Эти же столбцы впоследствии специфицируются при создании каждой таблицы, добавляемой в кластер. Для каждого столбца, заданного при создании кластера как часть ключа кластера, каждая таблица, создаваемая в кластере, должна иметь столбец, совпадающий с ним по типу и размеру. Ключ кластера не может иметь более 16 столбцов, и значение ключа кластера не может превышать приблизительно одной трети свободного пространства в блоке данных. Ключ кластера не может включать столбец LONG или LONG RAW. Значения данных в кластеризованных столбцах таблиц можно обновлять. Однако, поскольку размещение данных зависит от ключа кластера, изменение ключа кластера в строке может повлечь за собой физическое перемещение строки. Поэтому часто обновляемые столбцы не являются хорошими кандидатами для ключа кластера. Индекс кластера --------------- После создания кластера вы должны создать индекс по столбцам ключа кластера. ИНДЕКС КЛАСТЕРА - это индекс, определенный специально для кластера. Такой индекс содержит запись для каждого значения ключа кластера. При поиске строки в кластере индекс кластера используется для определения ключа кластера, который указывает на блок, ассоциированный с этим ключом. Поэтому любая данная строка извлекается минимально за две операции ввода-вывода (возможно, больше, в зависимости от числа уровней, которые необходимо пройти в индексе). Индекс кластера должен быть создан прежде, чем для таблиц кластера можно будет использовать любые предложения DML (включая INSERT и SELECT). Поэтому в кластеризованную таблицу нельзя загрузить данные, пока не создан индекс кластера. Как и индекс таблицы, индекс кластера создается и хранится в сегменте индекса. Поэтому кластер и индекс кластера можно разместить в разных табличных пространствах. Индекс кластера отличается от индекса таблицы в следующих аспектах: * Пустые ключи имеют записи в индексе кластера. * Записи индекса указывают на первый блок в цепочке для данного значения ключа кластера. * Индекс кластера содержит одну запись на значение ключа кластера, а не на каждую строку кластера. * Отсутствие индекса таблицы не влияет на возможность доступа, но данные кластера недоступны, пока не создан индекс кластера. Когда индекс кластера удаляется, данные в кластере остаются, но становятся недоступными, пока не будет создан новый индекс кластера. Вы можете пожелать удалить индекс кластера, чтобы переместить его в другое табличное пространство или изменить его характеристики пространства; однако вы должны заново создать индекс кластера, чтобы открыть доступ к данным кластера. ------------------------------------------------------------ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 10:59 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Если рассматривать единственную таблицу как две таблицы, то в качестве ключа кластера выбирается столбец id. Так как второй таблицы нет, но есть столбец parent_id, как в таком случае указать ключ кластера? И вообще, в случае двух таблиц, столбец для ключа кластера должен называться одинаково? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 11:25 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Если по логике то да так как помещать в кластер рекомендуют таблицы связанные по ключу, а он соотв одинаков. Но это IMXO я вообще-то на практике ещё не юзал кластеры. :_) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 12:00 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Расскажу о собственном опыте работы с кластерами. Лет шесть назад стали мы стали разрабатывать приложение. В нем самыми центральными являлись две таблицы - ШАПКА ДОКУМЕНТА и СТРОКА ДОКУМЕНТА. В шапке документа был первичный ключ - number-столбец, заполняемый из секвенции(d_kod). В строках документа был составной первичный ключ - код документа (dr_d_kod),номер строки документа (dr_nstr). Столбец dr_d_kod ссылается на d_kod в шапке документа. Каждому документу(ШАПКА ДОКУМЕНТА) могло соответствовать от 0 до сотен строк (СТРОКА ДОКУМЕНТА). Запрсы обычно шли или по таблице ШАПКА ДОКУМЕНТА или по обеим таблицам ( ... from ШАПКА ДОКУМЕНТА, СТРОКА ДОКУМЕНТА where d_kod=dr_d_kod and ...). По обеим таблицам активные insert-ы и update-ы. Удалений из шапки документов почти не было. После долгих и мучительных раздумий решили положить эти две таблицы в кластер с кластерным ключом d_kod. И стало все это у нас работать. Года через два, когда все приложения, работающие с этими таблицами, устаканились, и в таблицах накопилось приличное количество реальных данных стало интересно, а не ошиблись ли мы с этим кластером ? Взяли тестовую базу на тестовом сервере. В этой базе создали две пары таблиц соответствующих исходным. Только одну пару создали в кластере, а другую - поодиночке. Затем закачали в эти таблицы данные из "настоящих" таблиц и стали тестировать. 1. Две отдельные таблицы заняли в три раза !!! меньше места чем кластер. 2. Запросы вида ( ... from ШАПКА ДОКУМЕНТА, СТРОКА ДОКУМЕНТА where d_kod=dr_d_kod and ...) с кластеризованными таблицами работали примерно на 10% быстрее. 3. Запросы из одной таблицы (хоть из шапки, хоть из строк) на отдельных таблицах выполнялись в несколько раз быстрее, чем на кластеризованных. Это при использовании индексов. Full scan-ы на кластерных таблицах длились бесконечно долго. Я их убивал не дождавшись. 4. Про скорость update-ов не помню. В результате мы убрали кластер и сделали таблицы отдельно. Жить стало немного полегче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 13:14 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
А какой был тип кластера: индексированный или хэш? Я читал что большое значение имеет правильный подбор параметров хранения для индексированного. Вообще на этом сайте в форуме Oracle очень мало вопросов по кластерам задают. Как говорили когда-то много лет назад преподы в институте - вопросов не бывает по двум причинам: 1) все понятно 2) ничего непонятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 14:04 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Индексированный. При выборе типа кластера тоже были мучительные раздумья, но я их абсолютно не помню. То, что кластер занимает так много места - вполне объяснимо. В один блок могут класться только записи с одинаковым значением кластерного ключа. Следовательно, если клатерный ключ совпадает с первичным ключом таблицы, то каждая запись лежит в отдельном блоке. Т.е. если в таблице 100 тысяч строк, то они будут занимать 100 тысяч блоков. У нас в некластеризованной ШАПКЕ ДОКУМЕНТА на один блок(2К) в среднем приходится 13 записей. Следовательно, для того чтобы добыть записи из ШАПКИ ДОКУМЕНТА ораклу надо прочитать с диска в 13 раз больше данных из кластера чем из отдельной таблицы. Так что использовать кластер для одной таблицы по первичному ключу, думаю, - это изврат. Если кластеризовать по parent_id, то с этим стоит экспериментировать, если записей с одинаковым parent_id набирается на несколько блоков, иначе блоки будут полупустыми и таблица займет много места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 15:12 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
>Вообще на этом сайте в форуме Oracle очень мало вопросов по кластерам задают. их просто относительно редко используют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 15:52 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Значит это не самое удачное решение Oracle corp? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 16:02 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
не самое универсальное, я бы сказал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 16:23 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно, в чём должна быть универсальность возможностей в Oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 16:45 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
>> А что такое node_id? Я не совсем понял. Таблица, если на нее ссылаются по parent_id должна иметь первичный ключ: номен узла (PK строки) в иерархической структуре --> node_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 17:06 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
Я в принципе написал, что есть id и parent_id, естественно что id - и есть первичный ключ, parent_id - внешний ключ. Поэтому упоминание node_id несколько вносит непонятность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 17:09 |
|
||
|
Помещение в кластер одной таблицы
|
|||
|---|---|---|---|
|
#18+
>> Я же исходил из того, что раз кластер эффективен при помещении нескольких таблиц, у которых есть общий столбец и эти таблицы связываются в запросе. В моём случае таблица одна, но она сама ссылается на себя, то есть в принципе ситуация такая же что и скажем с двумя таблицами. osnovnaiy ideia - gruppirovat zapici s odinakovim parent_id v odnom ili blizkih bd blokah ESLI ISPOLZOVAT HASH ili INDEKSIROVANNIY KLUSTER TO CHO MOGET BIT KLUSTERNIM KLUCHEM. RASSMOTRIM VARIANTI: -- ID -- V ETOM CLUCHAE MI VIIGRIVAEM 2-3 READ NA CHTENII INDEKSA DLIA ID. DOSTUP PO PARENT_ID NE ULUCHSHAETSIA (ESLI NE UHUDSITSIA) POSKOLKU FAKTOR KLASTERIZACII DLIA PARENT_ID V ETOI SITUACII APRIORI OCHEN BOLSHOI -- PARENT ID - SITUACIA NAMNOGO LUCHE ESLI V ZAPROSE UCHASTVUET PARENT_ID VSEGDA. VSE ID S DANNIM PARENT_ID BUDUT CHITIVATCIA ZA 1-2.. CHENIIA (ZAVISIT OT : kolichestva id na 1 parent_id, avg rpw len, db block size) esli mi ne vlezli v 1 klusterniy block (t.e. kolichestvo id bolsoe) to ostalnie zapisi Oracle budet pomeschat v oblast perepolneniya (cho pribodit k silnoi degradacii proizvoditelnosti) tak chot raschet na etape planirovania dolgen bit vesma seriozniy ---------------------------------------------------------------------------------------------------------- -- NOTE : eto polnostiu sootvetstvuet INDEX ORGANAZED TABLE esli ispolzovat PK iz 2-h poley parent_id + id i imenno v etom poriadke, tolko maroki mense i uze v osnovnom ne zavisit ot db block size ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 18:56 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32084161&tid=1992336]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 366ms |

| 0 / 0 |
