Программирование >>  Oracle 

1 ... 78 79 80 [ 81 ] 82 83 84 ... 469


tkyte@TKYTE816> create table t (x int, у char(1000) default x) pctfree 10 2 pctused 80;

Table created.

tkyte@TKYTE816> exec measure usage;

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

insert

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

update

FREELIST,

used by

table

PL/SQL

procedure

successfully

completed.

первое же изменение вернуло блох в список свободных из-за намного большего значения pctused

Это демонстрирует последствия увеличения значения параметра PCTUSED. Первое же изменение вернуло блок в список FREELIST. Этот блок может использоваться для вставки новой строки намного быстрее.

Значит ли это, что необходимо увеличивать значение параметра PCTUSED? Нет, не обязательно. Это зависит от того, что впоследствии происходит с данными. Пусть приложение работает по следующему циклу:

1. Добавление данных (множество вставок).

2. Изменение данных, которое приводит к увеличению и уменьшению строк.

3. Снова добавление данных.

Тогда вообще не нужно, чтобы блоки возвращались в список свободных в результате изменения. Желательно установить параметру PCTUSED небольшое значение, чтобы блок попадал в список FREELIST только после удаления из него всех строк данных. В противном случае некоторые из блоков с временно уменьшенными строками при большом значении PCTUSED будут использованы для вставки новых строк. Затем, когда придется изменять старые и новые строки в этих блоках, для них не хватит места и придется часть строк переносить.



Итак, параметры PCTUSED и PCTFREE имеют ключевое значение. С одной стороны, их нужно задавать, чтобы избежать переноса слишком большого количества строк, а с другой, - чтобы избежать избыточных потерь пространства в блоках. Необходимо изучить объекты и их предполагаемое использование, а затем выработать обоснованный план установки значений этих параметров. Простые правила могут и не подойти; оптимальные значения действительно зависят от способов использования объектов. Имеет смысл рассмотреть следующие варианты (помните, большое и небольшое - понятия относительные).

Большое значение PCTFREE, небольшое значение PCTUSED. Для вставки большого количества динамических данных, если при их изменении длина строк часто увеличивается. При этом резервируется много свободного пространства в блоке после вставки (большое значение PCTFREE); прежде чем блок будет возвращен в список свободных, он должен стать практически пустым (небольшое значение PCTUSED).

Небольшое значение PCTFREE, большое значение PCTUSED. Если предполагается только вставка и удаление строк или если при изменении строки ее длина только уменьшается.

Параметры INITIAL, NEXT и PCTINCREASE

Эти параметры хранения определяют размер начального (INITIAL) и последующих экстентов, выделяемых таблице, а также процент увеличения для следующих экстентов. Например, если используется начальный экстент размером 1 Мбайт, следующий - размером 2 Мбайта, а параметр PCTINCREASE имеет значение 50, в таблице будут следующие экстенты:

1. 1 Мбайт.

2. 2 Мбайт.

3. 3 Мбайт (150 процентов от 2).

4. 4,5 Мбайт (150 процентов от 3).

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

Если локально управляемые табличные пространства не используются, я рекомендую всегда устанавливать INITIAL = NEXT и PCTINCREASE = 0. Это позволяет эмулировать процесс выделения пространства, происходящий в локально управляемых табличных пространствах. Для всех объектов в табличном пространстве должна использоваться одинаковая стратегия выделения экстентов во избежание фрагментации.



Параметры LOGGING и NOLOGGING

Обычно объекты создаются с журнализацией (LOGGING), тем самым все действия с объектом, которые могут генерировать информацию повторного выполнения, ее генерируют. Параметр NOLOGGING позволяет выполнять с объектом ряд действий, не генерируя данных повторного выполнения. Параметр NOLOGGING затрагивает лишь несколько специфических действий: первоначальное создание объекта, непосредственная загрузка данных с помощью утилиты SQLLDR или пересоздание (подробнее о том, какие из этих действий применимы к тому или иному объекту базы данных, см. в справочном руководстве по языку SQL - SQL Language Reference Manual ).

Этот параметр не отключает генерирование данных повторного выполнения для объекта вообще, а только для некоторых специфических действий. Например, если таблица создается как SELECT NOLOGGING, а затем выполняется оператор INSERT INTO THAT TABLE VALUES (1), этот оператор будет зарегистрирован в журнале, а создание таблицы - нет.

Параметры INITRANS and MAXTRANS

Каждый блок данных объекта включает заголовок. Часть этого заголовка - таблица транзакций. В таблицу транзакций вносятся записи о том, какие строки/элементы блока заблокированы какими транзакциями. Первоначальный размер таблицы транзакций определяется параметром INITRANS объекта. Для таблиц стандартное значение - 1 (для индексов - 2). При необходимости таблица транзакций может динамически расти вплоть до MAXTRANS записей (естественно, при наличии достаточного свободного пространства в блоке). Каждая запись транзакции занимает 23 байта в заголовке блока.

Таблицы, организованные в виде кучи

Таблицы, организованные в виде кучи, используются приложениями в 99 (если не более) процентах случаев, хотя со временем это может измениться за счет более интенсивного использования таблиц, организованных по индексу, - ведь по таким таблицам

Параметры MINEXTENTS и MAXEXTENTS

Эти параметры управляют количеством экстентов, которые могут быть выделены объекту. Значение MINEXTENTS указывает серверу Oracle, сколько экстентов выделять таблице первоначально. Например, в локально управляемом табличном пространстве с одинаковыми экстентами размером 1 Мбайт при установке параметру MINEXTENTS значения 10 таблице будет выделено 10 Мбайт дискового пространства.

Параметр MAXEXTENTS задает верхний предел для количества экстентов, которые могут быть выделены объекту. Если в том же табличном пространстве задать параметру MAXEXTENTS значение 255, таблица сможет иметь размер не более 255 Мбайт. Конечно, если в табличном пространстве не хватит места для обеспечения такого роста, выделить соответствующие экстенты таблице тоже не удастся.



1 ... 78 79 80 [ 81 ] 82 83 84 ... 469

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика