24.07.2013 Views

Ибрахим Ахмед З. ОПТИМИЗАЦИЯ РАБОТЫ СИСТЕМЫ

Ибрахим Ахмед З. ОПТИМИЗАЦИЯ РАБОТЫ СИСТЕМЫ

Ибрахим Ахмед З. ОПТИМИЗАЦИЯ РАБОТЫ СИСТЕМЫ

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ОПТИМИ<strong>З</strong>АЦИЯ <strong>РАБОТЫ</strong> <strong>СИСТЕМЫ</strong> УПРАВЛЕНИЯ ХРАНЕНИЕМ<br />

Abstract<br />

ДАННЫХ В ORACLE<br />

<strong>Ибрахим</strong> <strong>Ахмед</strong> <strong>З</strong>.<br />

ДонНТУ<br />

Кафедра ПМиИ<br />

ahmedzmio@hotmail.com<br />

Ibrahim Ahmed Z., Optimization of work of the control system by data storage in<br />

Oracle. After Oracle it has left frameworks of university, became a commercial product.<br />

Relational Software Incorporated issued this system in second half 80 th , which now refers to as<br />

ORACLE Corporation.<br />

The system of storage of a database and increase or reduction of volume of the data<br />

stored in a database results in a fragmentation of a database which occurs in result to an insert<br />

of rows, their update or remove, and at creation or remove of objects. As a result of a<br />

fragmentation the space is vainly spent, that sometimes results in decline of productivity.<br />

База Данных Oracle<br />

После того, как Oracle вышла из рамок университета она стала коммерческим<br />

продуктом. Эта система была выпущенная фирмой Relational Software Incorporated во<br />

второй половине 80-х гг., которая теперь называется ORACLE Corporation [1].<br />

БД (База данных) - это хранилище данных. СУБД (система управления базой<br />

данных) – это программа, управляющая доступом к базе данных. Oracle – это современная<br />

система управления реляционной базой данных, которая поддерживает работу в<br />

различных операционных средах, таких как Windows NT, Linux, Unix и др. [4, с. 3]. База<br />

Данных Oracle состоит из множества компонентов, которые используют дисковые<br />

пространства и системные ресурсы [2, с. 353].<br />

Система хранения базы данных и увеличение или уменьшение объема данных,<br />

хранящихся в базе данных, приводит к фрагментации базы данных, которая появляется в<br />

903


результате вставки строк, их обновления и удаления и при создании и удалении объектов.<br />

В результате фрагментации напрасно расходуется пространство, что иногда приводит к<br />

снижению производительности [3].<br />

Виды фрагментации базы данных Oracle:<br />

- фрагментация табличного пространства [2, с. 358];<br />

- фрагментация блоков данных [3];<br />

- сегментная фрагментация [3];<br />

- цепочки строк и миграция строк [2, с. 362].<br />

1 Фрагментация табличного пространства<br />

Вследствие неупорядоченного и запланированного удаления и повторного создания<br />

объектов базы данных (см. рис. 1), внутри табличного пространства оно фрагментируется.<br />

Если возникают фрагменты свободного пространства между используемыми экстентами<br />

(экстент это расширения сегмента), то образуется фрагментация табличного пространства<br />

[2, с. 358].<br />

Рис. 1. Вид табличного пространства<br />

1.1 Причина появления фрагментации табличного пространства<br />

Фрагментация табличного пространства появляется, когда удаляется одна или<br />

несколько таблиц и вместо этих таблиц не возможно добавить новые таблицы, из-за того<br />

что, размер новой таблицы больше размера свободного пространства [2, с. 359].<br />

1.2 Влияние фрагментации табличного пространства на производительность<br />

На практике, фрагментация табличного пространства исключительно редко влияет<br />

на производительность. Если негативное влияние имеется, оно может быть устранено<br />

регулированием параметров хранения или настройкой приложения [3].<br />

1.3 Решение проблемы фрагментации табличного пространства<br />

Фрагментация табличного пространства может быть устранена на уровне<br />

приложения или на уровне базы данных. Единственным путем устранить фрагментации<br />

табличного пространства является физическое перемещение сегментов Oracle. Это может<br />

904


быть выполнено различными путями, но основной стратегией является перемещение<br />

сегментов из фрагментированного табличного пространства, дефрагментация табличного<br />

пространства и перемещение сегментов обратно в исходное табличное пространство [3].<br />

2 Фрагментация блоков данных<br />

При частом удалении строк фрагментируется таблица, а это приводит к созданию<br />

многих блоков, которые полностью не заполнены. Этот тип фрагментации может привести<br />

к возникновению значительного количества свободных зон и снижет производительность<br />

[3].<br />

2.1 Причина появления фрагментации блоков данных<br />

Фрагментация блоков данных появляется, когда строка удаляется из таблицы и,<br />

следовательно, удаляется из блока данных [3].<br />

2.2 Влияние фрагментации блоков данных на производительность<br />

Фрагментация блоков данных снижает производительность запросов к данным и<br />

уменьшает производительность работы системы. Производительность изменяется в связи с<br />

тем, что чем выше фрагментация блоков данных, тем меньше строк данных выбирается за<br />

один доступ к блоку. Издержки не зависят от того, где находится блок - на диске или в<br />

КЭШе буфера блоков данных [3].<br />

Серверному процессу легче выбрать 100 блоков данных, содержащих 600 строк<br />

вместо 150 блоков данных, содержащих те же 600 строк, поскольку Oracle выбирает<br />

данные поблочно, а не построчно [3].<br />

2.3 Решение проблемы фрагментации блоков данных<br />

Существует два метода решения проблемы:<br />

- Первый метод заключается в изменении параметров хранения (pctfree, pctused).<br />

Уменьшение параметра pctfree или увеличение параметра pctused проводит тому, что<br />

каждый блок будет заполняться большим числом строк, чем в прошлом;<br />

- Второй метод заключается в реорганизации объекта. Можно написать процедуру,<br />

которая могла бы копировать строки фрагментированных блоков в другое место, затем<br />

могла бы удалять эти строки (очищая блок), затем добавить их вновь в исходную<br />

таблицу[3].<br />

905


3 Сегментная фрагментация<br />

Сегментная фрагментация появляется при быстром динамическом расширении<br />

(rapid dynamic extension). То есть строки добавляются, сегмент расширяется, строки<br />

добавляются, сегмент расширяется и т.д. [3].<br />

Сегментная фрагментация является естественным и нужным явлением базы данных<br />

Oracle и формой существования множественности экстентов сегмента. Когда сегмент<br />

Oracle имеет более одного экстента, технически он фрагментирован. Содержит ли два<br />

экстента или три сотни экстентов, сегмент все равно будет фрагментирован [3].<br />

3.1 Причина появления сегментной фрагментации<br />

Объекты базы данных в Oracle расширяются вследствие своего, естественного<br />

роста. Когда текущий экстент заполняется и требуется новое пространство, серверный<br />

процесс берет непрерывную область свободного пространства и создает новый экстент [3].<br />

3.2 Влияние сегментной фрагментации на производительность<br />

Исследование влияния сегментной фрагментации концентрируется вокруг операций<br />

чтения и записи с помощью индексного сканирования (index scan) и операций полного<br />

сканирования таблицы (full table scan). Операция записи не вызывает проблем до тех пор,<br />

пока не возникает быстрого динамического расширения (rapid dynamic extension) и точно<br />

так же индексное чтение не вызывает проблему, поскольку индексное чтение считывает<br />

один блок. Быстрое динамическое расширение является результатом неправильного<br />

выбора размеров экстентов [3], поэтому, надо исследовать операции полного<br />

сканирования таблиц, имеющих несколько экстентов [4].<br />

3.3 Решение проблемы сегментной фрагментации<br />

Необходимо изменить (увеличить) параметры хранения initial и next и pctincrease,<br />

для устранения сегментной фрагментации.<br />

4 Миграция строк<br />

Миграция строк происходит, если при обновлении строка не помещается в одном<br />

блоке (см. рис. 2). В этом случае данные этой строки мигрируют в новый блок данных.<br />

Новый адрес строки сохраняется в исходном месте. Если ее надо найти, то<br />

просматривается ее исходное место и осуществляется поиск указателя и выполняется<br />

переход к новому адресу [2, с. 362].<br />

906


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

Рис. 2. Миграция строк<br />

Цепочки строк появляются, когда строка слишком большая и не помещается ни в<br />

один из блоков сегмента данных (см. рис. 3). Из-за этого строка сохраняется в цепочке из<br />

нескольких блоков данных [2, с. 363].<br />

Рис. 3. Образование цепочки строк<br />

4.1 Причина появления фрагментации строк<br />

Причиной фрагментации строк может быть только оператор обновления (update),<br />

который увеличивает длину строки. Вставки, удаления, запросы к данным не могут быть<br />

причиной фрагментации строк. Каждый раз, когда блок читается с диска, возникает<br />

дополнительная операция ввода/вывода. Также, каждый раз, когда блок размещается в<br />

КЭШе буфера данных, требуется дополнительная операция ввода/вывода (логическая или<br />

физическая) [3].<br />

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

По влиянию на производительность фрагментация строк является, бесспорно,<br />

наиболее негативной, чем любой другой тип фрагментации. Для каждой<br />

фрагментированной строки требуется удвоенное число физических и логических операций<br />

ввода/вывода [3].<br />

4.3 Решение проблемы фрагментации строк<br />

Существует два основных метода или инструмента разрешения фрагментации<br />

строк. Методом предотвращения фрагментации строк является увеличение параметра<br />

хранения pctfree. Он будет заставлять Oracle не добавлять так много строк в блок данных,<br />

907


в связи с чем будет оставаться дополнительное место для роста строк в момент их<br />

изменения. Другим методом, который обычно используется в комбинации с<br />

переустановкой pctfree, является либо реорганизация фрагментированных строк, либо<br />

реорганизация всей таблицы [3].<br />

<strong>З</strong>аключение<br />

Увеличение или снижение объема данных в базе приводит к фрагментации базы<br />

данных, что иногда приводит к снижению производительности.<br />

Предложенный подход к решению проблем фрагментации блоков данных и<br />

сегментные фрагментации доказывает, что для устранения таких типов фрагментации<br />

необходимо изменить значение параметров хранений.<br />

Данное исследование доказывает, что в случае существования любого типа<br />

фрагментации (фрагментация табличного пространства, фрагментация блоков данных,<br />

сегментная фрагментация, фрагментация строк) ее можно определить и устранить<br />

многими эффективными методами, чтобы она не влияли на производительность.<br />

Литература<br />

1. Настройке и оптимизации работы сервер ORACLE<br />

http://www.g0.narod.ru/ORACLE/oracle0.html.<br />

2. Пейдж, Вильям, Дж., и др. Использование Oracle 8/8i. Специальное издание.: Пер. с<br />

англ. – М.: Издательский дом “Вильямс”, 2000. – 1024 с.:ил.<br />

3. Все о фрагментации базы данных в Oracle Craig A. Shallahamer Orig. December 6,<br />

1999, Версия 1k, Март 23, 2000 http://www.orapub.com/.<br />

4. Баженова И. Ю. Oracle 8/8i. Уроки программирования. - М.: Диалог - МИФИ, 2000 -<br />

304 с.<br />

908

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!