Ибрахим Ахмед З. ОПТИМИЗАЦИЯ РАБОТЫ СИСТЕМЫ
Ибрахим Ахмед З. ОПТИМИЗАЦИЯ РАБОТЫ СИСТЕМЫ
Ибрахим Ахмед З. ОПТИМИЗАЦИЯ РАБОТЫ СИСТЕМЫ
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