Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Освойте дефрагментатор Informix Server V11.7

Новый инструмент для оптимизации вашего сервера Informix

Роберт Нельсон Коркоран, архитектор ПО, IBM
Nelson Corcoran photo
Нельсон Коркоран был членом команды разработки ядра Informix в течение 12 лет, работая в различных областях, включая интеллектуальные большие двоичные объекты, параллелизм, планирование, файловые системы и другие.
Камини Джагтиани, инженер по программному обеспечению, IBM
Kaminit Jagtiani photo
Камини Джагтиани работала в Informix в течение 10 лет, специализируясь на компрессии данных, конверсии/реверсии, HDR и других функциях ядра СУБД.

Описание:  Начиная с версии 11.70.xC1 IBM® Informix®, вы можете дефрагментировать таблицы, фрагменты илииндексы, включая системные каталоги. Это позволяет уменьшить число экстентов, в которых находятся ваши данные. В этой статье вы узнаете, что такое дефрагментатор, некоторые соображения об его необходимости и примеры использования.

Дата:  15.12.2010
Уровень сложности:  средний PDF:  A4 and Letter (33KB | 8 страница)Загрузить Adobe® Reader®
Активность:  2712 просмотров
Комментарии:  


Почему дефрагментатор необходим?

Подобно другим файловым системам, разделы Informix могут содержать много экстентов, которые являются смежными блоками хранилища. В Informix разделы находятся в пространствах БД. После некоторого времени обновления данных пространство БД может быть сильно фрагментировано и следующий экстент необходимой длины может быть недоступен, тогда будет использован более короткий экстент неоптимальной длины. Поиск длинного экстента во фрагментированном пространстве БД может занять значительное время, т.к. пространство БД может содержать множество маленьких свободных экстентов, которые будут проверяться в ходе поиска; это время может быть существенным. Короткие экстенты заставляют сервер преждевременно останавливаться, в случае операций ввода-вывода над большими блоками (например, во время выполнения облегченного сканирования "light scans"). Кроме того, операции преобразования логических адресов в физические потребляют значительные ресурсы ЦП и время. Для максимальной эффективности, часто используемые таблицы должны иметь как можно меньшее число экстентов. Операции требующие больше времени с короткими экстентами: нахождение экстентов, преобразование логических адресов в физические, "light scans", архивация, опережающее считывание и сброс буферов при создании контрольной точки.

Слияние экстентов для сокращения их числа (дефрагментация) является выгодным для клиентов, имеющих большое количество экстентов в разделах и сталкивающихся с вероятной проблемой переполнения страницы раздела. В Informix 11.70 вводятся страницы с картой переполнения экстентов, таким образом максимальное число экстентов достигает 32767, однако использование страниц с картой переполнения экстентов снижает эффективность.

Пользователи знающие версию 7.3x могут вспомнить утилиту oncheck -me. oncheck -me утилита являлась ограниченной версией дефрагментатора для серверов версии 7.3x, которая имела ряд недостатков. Основной недостаток заключается в том, что для ее работы требовалась эксклюзивная блокировка таблицы. Кроме того, oncheck -me не может восстанавливаться после сбоя сервера. С дефрагментатором версии 11.70 экстенты соединяются пока раздел используется для чтения или обновления данных, а также доступно полное восстановление на случай сбоя. Архивация, чтение и обновление данных может работать параллельно с новым дефрагментатором.


Что делает дефрагментатор?

Дефрагментатор соединяет множество коротких экстентов в более длинные в разделе, уменьшая тем самым общее число экстентов в разделе. Если доступен непрерывный экстент подходящего размера, то после завершения работы дефрагментатора, раздел всегда будет иметь один экстент в конце, при том, что вы не добавляли экстенты к разделу во время работы дефрагментатора. Раздел может содержать данные или индексы. Операция дефрагментации - онлайн операция. Дефрагментатор не получает эксклюзивную блокировку в ходе своей работы, поэтому раздел доступен для других операций.

Informix 11.70 также обеспечивает компрессию, переупаковку и уплотнение. Так как же дефрагментатор в версии 11.70 отличается от вышеперечисленных операций?

  • Компрессия уменьшает размер хранимых данных, тем самым создавая неиспользованное пространство в разделе.
  • Переупаковка перемещает записи из конца раздела в доступное свободное пространство в верхней части раздела.
  • Уплотнение освобождает экстенты которые были очищены и возвращены обратно в пространство БД.

Таким образом, компрессия, переупаковка и уплотнение могут уменьшить общее число экстентов в разделе, также как и дефрагментатор. Однако, компрессия, переупаковка и уплотнение оперируют на уровне записей, а дефрагментатор на уровне экстентов.


Как работает дефрагментатор?

Когда вызывается дефрагментатор для раздела, вначале выполняется проверка того, что раздел подходящего типа и отсутствуют конфликтующие операции работающие параллельно, такие как компрессия. (Дефрагментатор вернет код ошибки в случае присутствия работающих конфликтующих операций.) Затем выполняется проверка того что дефрагментация действительно необходима. Если в разделе не более одного экстента, то нет возможности выполнить дефрагментацию; в этом случае дефрагментатор завершится успешно без кода ошибки.

Когда операция дефрагментации начинается, в таблице создается запись, см. команду onstat -g defragment. Тогда раздел помечается как "frozen" (другими словами только текущее число экстентов предполагается дефрагментировать). Экстенты добавленные в ходе работы дефрагментатора будут исключены из обработки. Причем на данный момент возможно выполнять только одну операцию дефрагментации над каждым пространством баз данных.

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

Свободное пространство в конце раздела рассматривается как пространство, которое будет использовано дефрагментатором. Если это нежелательно, тогда воспользуйтесь уплотнением перед использованием дефрагментатора.

Как только дефрагментатор находит свободный экстент, который может покрыть два и более экстента раздела, он сразу же перемещает страницы из старого экстента в новый. Дефрагментатор использует буферный пул для перемещения страниц для того чтобы поддерживать данные в целостности относительно других операций. Если дополнительная нагрузка на буферный пул не желательна, тогда лучше запускать дефрагментатор во время отсутствия нагрузки на сервер. После перемещения очередной страницы, раздел доступен для других операций, например, обновление. Время блокировки сведены к минимуму, так что пользователи даже не замечают что выполняется дефрагментация. После перемещения страницы записывается короткая запись в журнал. Когда изначальный экстент очищен полностью, транзакция завершается и перемещение считается завершенным. Транзакции дефрагментатора короткие, соответственно нет вероятности возникновения длинной транзакции. Дефрагментатор не блокирует создание контрольных точек.

Раздел может также содержать пустые страницы, что обычно встречается в конце раздела, но эти страницы не копируются.

При каждом запуске дефрагментатора в online.log записывается соответствующее сообщение.

Сбой в момент работы дефрагментатора вызовет лишь отмену последней транзакции. В большинстве случаев, нет необходимости повторно что-либо выполнять. Дефрагментатор не запускается автоматически после сбоя в работе сервера. Во время процесса быстрого восстановления, все совершенные транзакции выполняются повторно, неполностью совершенные - отменяются, и целостность пространства баз данных восстанавливается. Команда oncheck -ce позволяет убедится в том, что пространство баз данных не содержит так называемых "дырок", т.е. неиспользованных мест между экстентами.

Воспользуйтесь командой oncheck -pt для проверки числа экстентов в разделе после дефрагментации.

Специальные операции с разделами которые конфликтуют с дефрагментатором версии 11.70 включают в себя: компрессию, переупаковку, уплотнение, изменение параметров раздела, создание индекса в режиме онлайн, усечение и удаление раздела. Дефрагментатор не может быть запущен для раздела разделов, на вторичном сервере или для временной таблицы.


Примеры использования дефрагментатора

Дефрагментатор можно запустить используя execute function синтаксис базы данных dbadmin или посредством интерфейса OAT. Указав имя таблицы, все ее фрагменты будут дефрагментированы. Вы также можете указать номер раздела (partnum), в таком случае только этот раздел будет дефрагментирован. В версии 11.70 UC2 и старше, вы можете указать непосредственно имя индекса. В версии 11.70 UC1, вы также можете дефрагментировать индексы, но вам необходимо указать их номер раздела.

Синтаксис execute function доступен из dbaccess, ESQL C или Java программы.

Давайте используем для примера таблицу "sales" из демонстрационной базы данных, которая поставляется вместе с Informix. Вы можете создать эту демонстрационную базу с помощью скрипта dbaccessdemo_ud из каталога sqldist bin. (Дополнительная информация по настройке находится в руководстве пользователя по IBM Informix DB Access) К сожалению, таблицы созданные скриптом dbaccessdemo_ud короткие и иногда имеют всего один экстент. Чтобы посмотреть количество экстентов для данной таблицы воспользуемся командой:

oncheck -pt sales_demo:sales 

Как видно, всего 3 экстента в этой таблице. Если бы был 1 экстент, то дефрагментатор бы ничего не сделал и просто завершил свою работу без ошибок. Например, в результатах выполнения oncheck -pt, должно быть примерно следующее, как показано в листинге 1:


Листинг 1. Список экстентов
      
     Extents                       
Logical Page     Physical Page        Size     Physical Pages
	
     0           1:186118             8        8
     8           1:186132             8        8
     16          1:186168             16       16
       

Это означает, что таблица "sales" содержит 3 экстента. Первый экстент длиной 8 страниц начинается на странице 186118. Давайте дефрагментируем этот раздел используя команду dbadmin. В dbaccess выберите базу данных sysadmin и запустите команду:


Листинг 2. Дефрагментация раздела
      
       execute function task ('defragment', 'sales_demo:sales');
        или если вы хотите дефрагментировать индекс или один
         фрагмент таблицы выполните: execute function task 
         ('defragment partnum', '1049104'); 
         Вы можете найти номер раздела (partnum) в результатах oncheck -pt.
          После дефрагментации еще раз выполните команду oncheck -pt, 
          чтобы проверить количество экстентов раздела.
           В этом примере вы должны увидеть один экстент. 
           Extents Logical Page Physical Page Size Physical Pages
                                    0           1:186184 32 32 
       


Как осуществлять мониторинг дефрагментации

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

Результат выполнения команды выглядит следующим образом:


Листинг 3. Результат выполнения onstat -g defragment
 
     onstat -g defragment

Defrag info
id  table name          id  dbsnum  partnum  status                substatus  errnum
62  test:informix.tab1  55  3       3145730  SEARCHING_FOR_EXTENT  0          0  
62  test:informix.tab1  55  3       3145730  MERGING_EXTENTS       0          0  
      
      Различные типы статуса: SEARCHING_FOR_EXTENT, MERGING_EXTENTS, 
      DEFRAG_COMPLETED, DEFRAG_FAILED В случае DEFRAG_FAILED- 
      возвращается номер ошибки (errnum). Во всех остальных случаях код 
      ошибки будет 0. 
      


Ограничения

Пожалуйста примите во внимание следующие ограничения:

  • Одновременно возможна только одна операция дефрагментации раздела.
  • Одновременно возможна только одна операция дефрагментации пространства базы данных.
  • Операция дефрагментации прерывается, если хотя бы одна из следующих операций над разделом уже выполняется:
    • Усечение
    • Удаление
    • Компрессия, переупаковка, уплотнение
    • Распаковка
    • Построение индекса в режиме онлайн
    • Обновление

Заключение

Сервер Informix 11.70 содержит полный набор инструментов, работающих совместно для оптимизации использования хранилища и обеспечивающих наилучшую эффективность доступа. Эти инструменты включают в себя: компрессию, упаковку, уплотнение и дефрагментацию. Дефрагментатор является одним компонентом из этого набора и в частности полезен для перемещение разделов в частообновляемых пространствах баз данных. Если таблица часто и много обновляется, то вам необходимо принять решение о ее периодической дефрагментации.


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторах

Nelson Corcoran photo

Нельсон Коркоран был членом команды разработки ядра Informix в течение 12 лет, работая в различных областях, включая интеллектуальные большие двоичные объекты, параллелизм, планирование, файловые системы и другие.

Kaminit Jagtiani photo

Камини Джагтиани работала в Informix в течение 10 лет, специализируясь на компрессии данных, конверсии/реверсии, HDR и других функциях ядра СУБД.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=601528
ArticleTitle=Освойте дефрагментатор Informix Server V11.7
publish-date=12152010
author1-email=ncorcora@us.ibm.com
author1-email-cc=
author2-email=jagtiani@us.ibm.com
author2-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).