Продолжается подписка на наши издания! Вы не забыли подписаться?

DB2 – дубль восемь

Михаил Купаев

Возможно, кому-то это покажется кощунственным, но с точки зрения клиента нет абсолютно никакой разницы, какую СУБД использовать. Конечно, СУБД – это ядро любой информационной системы, но заказчик-то видит как раз периферию системы – рабочие места, модули администрирования, словом, интерфейс пользователя, и волнует его, как правило, только надежность и скорость. Не считая цены, конечно. О том, что с приобретением (или заказной разработкой) информационной системы он оказывается привязанным к фирме-разработчику СУБД, он задумывается куда реже.

Разработчик изначально привязан к СУБД, впрочем, многоуровневые архитектуры и стандартизация средств доступа к данным постепенно снижают эту зависимость. Функциональность современных СУБД достаточно велика, чтобы не создавать затруднений в большинстве случаев. Трудности начинаются при реализации экзотических случаев, типа пресловутого "потокового видео из БД через Интернет при большом количестве клиентов".

В результате роль технических вопросов при выборе СУБД постепенно снижается, уступая первое место маркетинговым, имиджевым и другим. Например, "наша ИС работает под Oracle" звучит гордо. Вспоминая, что "никого еще не уволили за покупку продуктов IBM", DB2 Universal Database может оказаться если и не самым удачным, то наверняка беспроигрышным выбором.

Практически все вендоры подвержены болезненной страсти к переименованиям. Непременное изменение названий от версии к версии усложняет жизнь интеграторов и выбор продукта для покупателей, но маркетинговому отделу виднее. IBM – не исключение. Теперь вместо Enterprise Edition и Enterprise-Extended Edition (кто бы ещё знал, чем они отличаются!) будет DB2 UDB Enterprise Server Edition. Вместо Workgroup Edition появляется Workgroup Server Edition. И, наконец, вместо Satellite Edition будет Personal Edition. Так что если спросить, а почему, собственно, из новой версии исчез OLAP Starter Kit, вам вполне обоснованно ответят, что это уже другая версия. Впрочем, всё может быть проще – например, в IBM просто потеряли файлы со старым дизайном коробок.

В новой версии исчезает поддержка сразу двух IBM-овских любимцев. Во-первых, больше не поддерживается OS/2. Во-вторых, больше не поддерживается DCE, и, соответственно, DFS. Хотя и в документации, и в инсталляторе, и в сообщениях есть упоминания о DCE и DFS, обращать на них внимание не нужно – их просто забыли вычистить. Поддержка правил безопасности DCE заменяется поддержкой Kerberos, а DCE Directory заменяется LDAP.

Производительность

В новой версии DB2 UDB появились так называемые таблицы материализованных запросов (materialized query table, MQT). Что-то знакомое, не правда ли? Разные варианты материализованных представлений уже были реализованы в СУБД Microsoft и Oracle. IBM не была бы IBM, если бы, посмотрев на реализации конкурентов, не пошла своим путем. Естественно, что у реализации IBM есть радикальное отличие от других реализаций – она по-другому называется.

Под таблицей материализованных запросов в DB2 понимается таблица, чье определение основано на результатах запроса, и чьи данные – предварительно компилированные результаты выборки из одной или нескольких таблиц.

Предыдущие версии DB2 поддерживали так называемые summary-таблицы (они же AST, аutomatic summary tables). Теперь summary-таблицы рассматриваются как частный случай MQT, содержащих GROUP BY в SELECT.

Теперь запросы могут быть перенаправлены оптимизатором к MQT, чьи определения содержат неагрегированный join (раньше – только агрегированный). Например, можно создать таблицу, содержащую join, для хранения информации о покупателях-должниках и их счетах :

CREATE TABLE bad_account AS
  (SELECT customer_name,customer_id,a.balance
    FROM account a,customers c
    WHERE status IN (’delinquent ’,’problematic ’,’hot ’)
    AND a.customer_id =c.customer_id )
    DATA INITIALLY DEFERRED REFRESH DEFERRED

Если пользователь запросит информацию о неоплаченном счете, оптимизатор определит, что затребованная информация содержится в MQT, и вместо базовой таблицы ACCOUNT обратится к BAD_ACCOUNT.

Еще одна разновидность MQT – пользовательские MQT. Многие приложения используют таблицы, содержащие предварительно обработанные данные, полученные в результате запросов к БД. Пометив такие таблицы, как пользовательские MQT, можно добиться значительного ускорения запросов. В таких допустимо использование операторов UPDATE, INSERT и DELETE.

Опережающая выборка (prefetching) теперь может производиться блоками, что существенно увеличивает производительность операций ввода/вывода. Размер блока, и, следовательно, количество страниц, считываемых за одну операцию блочного ввода/вывода, определяется параметром BLOCKSIZE выражений CREATE и ALTER BUFFERPOOL. Режим блочного считывания не исключает считывания отдельных записей – буфер для опережающей выборки состоит из двух частей, страничной и блочной, и страничная область используется для работы с непоследовательными выборками.

Многомерная кластеризация таблиц (Multidimensional clustering, MDC) – это элегантный способ гибкой, непрерывной и автоматической кластеризации данных по нескольким измерениям. MDC дает существенный прирост производительности запросов, существенное снижение накладных расходов на операции, обеспечивающие целостность данных и индексов при операциях вставки, изменения и удаления данных. Многомерная кластеризация в первую очередь полезна при работе с хранилищами данных и просто очень большими БД. Впрочем, она не мешает и в OLTP.

MDC позволяет физически кластеризовать таблицу одновременно по нескольким ключам (или измерениям). Раньше в DB2 поддерживалась только одномерная кластеризация данных с помощью кластеризованных индексов. Используя кластеризованный индекс, DB2 поддерживает физический порядок данных на страницах, соответствующий упорядочиванию ключа индекса, по мере вставки или изменения записей. От использования MDC выигрывают любые запросы, выбирающие данные по диапазонам значений любого измерения или комбинации измерений.

Масштабируемость

DB2 version 8 – хорошо масштабируемая система. Это значит, что система может от однопроцессорного сервера дорасти до кластера с массовым параллелизмом. Не факт, что дело обойдется без болезней роста, но возможность такая есть. Это не удивительно, поскольку IBM издавна позиционировала DB2 как СУБД для распределенных вычислений.

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

Впрочем, сюда же можно отнести введенной некоторое время тому назад понятие интегрированной (в терминах IBM – federated system) системы. Под этим имеется в виду некая разновидность распределенной СУБД, состоящей из экземпляра DB2, выступающего в роли сервера, собственно распределенной базы данных, одного или нескольких источников данных и обращающихся ко всему этому клиентов. В данном случае DB2 становится неким промежуточным слоем, а в системе начинают отчетливо проявляться черты трехуровневой архитектуры.

Такая система позволяет обращаться ко многим источникам данных из одного запроса. В результате пользователь может объединять данные из разных источников, выполнять распределенные запросы, используя возможности удаленных серверов, или, наоборот, воспользоваться возможностями промежуточного сервера, если удаленный источник данных неспособен выполнить запрос самостоятельно (например, просто не имеет нужной функциональности).

До этой версии пользователи могли только обращаться к удаленным БД, но не вносить в них изменения. Теперь же появилась возможность применения операторов INSERT, UPDATE и DELETE, а также создания таблиц на удаленных источниках данных.

В новой версии введена поддержка Windows 2000, Linux и HP-UX. Сейчас интегрированные системы могут строиться на основе СУБД DB2 и Informix IDS.

Администрирование

Если я не ошибаюсь, первой "СУБД без АБД" была Gupta.:) Потом много говорили, что если MS SQL Server не трогать, он будет работать не хуже батарейки Energizer. Теперь пришла пора IBM. В DB2 Version 8 включены первые плоды проекта Self-Managing and Resource Tuning (SMART), призванного автоматизировать множество функций мониторинга и настройки СУБД. АБД искренне интересуются, что эти разработки значат для их будущего. Дошло до того, что DB2 Magazine задается вопросом, нужны ли будут администраторы, если БД станут заниматься "самолечением", и начнут автоматически обнаруживать проблемы и устранять их?

Конечно, это риторический вопрос. Несмотря на все заявления, СУБД без АБД как не было, так и нет, и в ближайшем виде не предвидится. Однако SMART сможет значительно облегчить работу администратора (подробнее о SMART – в статье "SMART и DB2" в этом номере журнала).

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

Известно, что любую большую фирму крайне трудно подвигнуть на что-то. Но убедив ее сделать что-то, практически невозможно заставить прекратить делать это, или хотя бы снизить темп. То есть "горшочек, вари!" работает плохо, а "горшочек, перестань!" почти вовсе не работает. Помните, сколько лет мы смотрели с удивлением на машины IBM PS/2? Вот и с ПО та же история. Если уж вы заставили нас лепить графические средства администрирования, так получите, для всех платформ и в огромном количестве. Все новые визарды и графические утилиты перечислить невозможно, их слишком много. Кое-что на эту тему вы найдете в статье "SMART и DB2" в этом номере журнала.

В Control Center появилось средство Storage Management, дающее возможность мониторинга использования пространства, отведенного для хранения БД, табличных пространств или других объектов. Storage Management позволяет устанавливать пороговые значения для пространства, занимаемого тем или иным объектом. По достижению такого значения АБД будет оповещен о необходимости вмешательства.

Оповещением об этой и других проблемах занимаются средства Health Monitor и Health Center. Health Monitor – это серверное средство, неустанно занимающееся мониторингом состояния сервера. Если Health Monitor обнаруживает, например, что, например, логи уже не помещаются в отведенном месте, он поднимает тревогу. В принципе, возможных вариантов действий только два – либо сделать что-то самому, либо позвать администратора. Health Monitor может сделать и то, и другое – как послать сообщение администратору, так и запустить скрипт или задачу нового Task Center. Health Center – это, в сущности, просто GUI для Health Monitor. Он используется для настройки Health Monitor и просмотра состояния настроенных задач. Кроме просмотра сообщений о случившихся неприятностях, Health Center выводит список рекомендаций по их устранению.

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

Некоторые изменения коснулись процесса загрузки данных в БД. Теперь операция загрузки производится на уровне таблицы, а не табличного пространства, как это было раньше. Это значит, что утилита загрузки данных больше не требует эксклюзивного доступа ко всему табличному пространству, и все таблицы остаются доступными во время проведения этой операции. Именно все, даже та, в которую загружаются данные (такую возможность дает использование опции READ ACCESS команды LOAD). Еще одна новая опция загрузчика данных, LOCK WITH FORCE, дает возможность снять все блокировки, установленные приложениями на обновляемую таблицу. Завершая рассказ об изменениях в загрузчике, стоит сказать, что в Control Center теперь есть Мастер загрузки данных, значительно упрощающий использование как старых, так и новых возможностей.

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

Разработка

Ряд изменений непосредственно касается разработчиков. Например, кое-что изменилось в процедурах. Термин "процедура" здесь относится к хранимым процедурам, пользовательским (user-defined) функциям и методам – в DB2 8 стили параметров, отображение типов данных и системные каталоги одни и те же для всех трех типов процедур.

Все процедуры теперь поддерживают рекурсию. Отсутствуют ограничения на типы вложенных процедур. Например, Java-процедуры могут вызывать процедуры, написанные на других языках, и наоборот.

Теперь все процедуры должны храниться в едином каталоге SYSCAT.ROUTINES, а их параметры – в каталоге SYSCAT.ROUTINEPARMS. Впрочем, если у вас они хранятся где-либо еще, не торопитесь перемещать их на новое место и править конфигурационные файлы приложений. DB2 найдет их и на старом месте. Это просто IBM пытается порядок навести.

Процедуры (хранимые процедуры, пользовательские функции и методы) теперь поддерживают многопоточный режим работы, что значительно увеличивает производительность сервера, одновременно исполняющего множество процедур. Процедуры, определенные как потокобезопасные (fenced), исполняются в одном "огороженном" процессе, а все остальные – в другом. В представлении разработчиков, потокобезопасными являются Java-процедуры, а не потокобезопасными – все остальные.

Вводится новая привилегия EXECUTE, дающая право запуска процедур. Эта привилегия необходима и в том случае, когда процедура вызывается из запроса.

Для регистрации процедуры теперь также нужны особые права – CREATE_EXTERNAL_ROUTINE для потокобезопаных процедур, и CREATE_NOT_FENCED_ROUTINE – для остальных. Даже потокобезопасные процедуры исполняются все-таки внутри единого процесса. Каждая из них может читать память, используемую другой процедурой, работающей в этом же процессе. Таким образом, эта процедура может получить доступ к данным, используемым другими процедурами. Другая опасность состоит в том, что процедура, некорректно работающая с памятью, может привести к краху процесса как такового. Но небезопасные процедуры, исполняемые в том же процессе, что и менеджер БД, имеют доступ ко всем ресурсам и возможностям СУБД. Они могут обрушить уже не отдельный процесс, а всю систему, а также привести к повреждению таблиц БД. Так что упомянутое выше разделение стоит признать вполне оправданным.

В новой версии поддерживаются триггеры INSTEAD OF, появилось полтора десятка новых системных функций (в основном тригонометрических).

В новой версии появился OLE DB Provider for DB2:

При установленном DB2 Connect с использованием OLE DB можно получить доступ к данным, расположенным на DB2 MVS, VSE&VM и SQL/400.

Конечно, в наши дни нельзя обойти стороной такую модную вещь, как Web-сервисы. Объявлено, что DB2 может выступать в роли провайдера Web-сервисов, работая на пару с IBM WebSphere. Кстати, WebSphere Studio и WebSphere Application Server включены в состав поставки DB2 Universal Developer’s Edition.

Для создания приложений, выступающих в роли Web-сервисов, разработчик может воспользоваться программной моделью DADx (DB2’s document access definition extension). Файлы DADx – это просто XML-документы, содержащие ссылки на хранимые процедуры или обычный SQL. Что особенно приятно, создание DADx-файлов не требует никакого Java-программирования.

Значительно улучшилась работа через JDBC. Полностью обновлены JDBC-драйверы, что дало существенное увеличение производительности и стабильности работы.

DB2 Net Search Extender

Текстовые данные часто являются ценным источником неструктурированной информации. Качественный механизм поиска по тексту позволяет значительно повысить эффективность работы с БД. В новой версии DB2 IBM объединены в одно средство имевшийся в версии 7.2 Net Search Extender, предназначенный для поиска в памяти, и Text Information Extender, предназначенный собственно для поиска по тексту.

Новое средство соответствует стандарту SQL/MM (SQL Multimedia). Интеграция поискового механизма с оптимизатором DB2 дает возможность производить быстрый полнотекстовый поиск из SQL-запросов.

Управлять новым средством можно непосредственно из Control Center, что упрощает такие задачи, как, например, создание текстовых индексов. При работе в распределенных системах Net Search Extender можно использовать для индексирования и поиска даже в данных, расположенных на других серверах DB2 или Informix.

Немного экзотики

DB2 Spatial Extender – средство для работы с географическими данными, совместимое со стандартами OpenGIS и ISO. Большинству из нас эта штука вряд ли понадобится, но возможность есть. Возможно, оно пригодится какому-нибудь корифею логистики, составляющему карту расположения клиентов. Оно уже существовало в предыдущей версии, в новой для него придумали еще несколько возможностей и увеличили число поставляемых примеров применения.

Заключение

Это, конечно, далеко не все нововведения, появившиеся в новой версии DB2. Сейчас семейство СУБД от IBM претерпевает существенные изменения – после приобретения Informix в руках IBM оказалось большое количество наработок отнюдь не бесталанных разработчиков. Это, конечно, не значит, что IBM как-то обижает Informix. Совсем недавно объявлено о выпуске новой версии IDS, также содержащей немало нового.

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


Copyright © 1994-2016 ООО "К-Пресс"