Фрагментация БД   Фрагментация табличного пространства   Фрагментация блоков данных   Сегментная фрагментация   Миграция строк  

Образование цепочки строк

Назад


Цепочки строк появляются, когда строка слишком большая и не помещается ни в один из блоков сегмента данных. В результате из за этого, строка сохраняется в цепочке из нескольких блоков данных (см. рис. 7) [2].


Причина фрагментации строк


Причиной фрагментации строк может быть только оператор update (обновление), который увеличивает длину строки. Вставки, удаления, запросы к данным не могут быть причиной фрагментации строк. Каждый раз, когда блок читается с диска, возникает дополнительная операция ввода/вывода. Также, каждый раз, когда блок размещается в КЭШе буфера данных, требуется дополнительная операция ввода/вывода (логическая или физическая) [4].



Фрагментация табличного пространства
Рис. 7. Образование цепочки строк

Методы обнаружения фрагментации строк


Для Обнаружения фрагментации строк, надо проанализировать (analyze) таблицу и выбрать колонку chain_cnt из представления user_table (см. скрипт. 1). Дополнительно можно сохранить информацию о сцепленных строках (такую как ROWID) для последующего анализа [4].

SQL> analyze table gl_balances compute statistics;
Table analyzed.
SQL> Select chain_cnt
2 From user_tables
3 Where table_name = 'GL_BALANCES';
CHAIN_CNT
---------
10
1 row selected.
Скрипт 5. Обнаружения фрагментации строк

Команда analyze имеет возможность сохранять информацию о фрагментированных строках. Это дает возможность скопировать строки во временную таблицу, удалить оригинальные строки и вновь добавить их в исходную таблицу.


Чтобы избежать образование миграции строк и цепочки строк, необходимо определить значение параметров PCTFREE PCTUSED по формуле PCTFREE = 100 * у / х где х - это средняя длина строки таблицы в байтах, и у - это предположение ее расширения в байтах. Подробнее об этом методе смотри в разделе "Решение проблемы фрагментации строк" [2].


Влияние фрагментации строк на производительность

По влиянию на производительность фрагментация строк является, бесспорно, наиболее негативной, чем любой другой тип фрагментации. Это так, поскольку для каждой фрагментированной строки требуется удвоенное число физических и логических операций ввода/вывода [4].

Можно сказать, что фрагментация строк будет влиять как на подсистему ввода/вывода, так и на ресурс ЦПУ. Когда выполняется дополнительная операция физического чтения, серверный процесс Oracle должен обратиться к подсистеме ввода/вывода для дополнительной операции. Когда блок уже в КЭШе буфера данных, серверный процесс Oracle также должен выбрать два блока вместо одного [4].

Решение проблемы фрагментации строк

Существует два основных метода или инструмента разрешения фрагментация строк. Методом предотвращения фрагментации строк является увеличение параметра хранения pctfree. Он будет заставлять Oracle не добавлять так много строк в блок данных, в связи с чем, будет оставаться дополнительное место для роста строк в момент их изменения. Другим методом, который обычно используется в комбинации с переустановкой pctfree, является либо реорганизация фрагментированных строк, либо реорганизация всей таблицы [4].

Не считая возможности реорганизации, корректная установка pctfree является ключом в предотвращении появления фрагментации строк. При проектировании объектов приложения надо определить таблицы, строки которых будут изменяться, и потенциально расти. Для этих случаев надо установить значение pctfree выше нормального. Это значение всегда можно уменьшить, если необходимо [4].

Анализ такого типа фрагментации в файле anaoc.zip (9281) bytes.

Сначало

Назад