Используем навыки работы с PostgreSQL V8.1 для изучения DB2, Version 8.2

Воспользуйтесь вашими знаниями и навыками работы с PostgreSQL для быстрого изучения новейшей технологии DB2® .

Тед Дж. Вассерман (Ted J. Wasserman), консультант по базам данных, IBM

Тед Дж. Wasserman's photoТед Дж. Вассерман (Ted J. Wasserman) является консультантом по базам данных в лаборатории IBM в Силиконовой долине, г. Сан-Хосе, штат Калифорния. Тед работает в группе решения технических проблем деловых партнеров DB2 (Business Partner Technical Enablement), где специализируется на помощи деловым партнерам IBM в переносе их приложений и баз данных в DB2 UDB. Тед имеет степень магистра в области информационных технологий и степень бакалавра в области информационных технологий в Королевском университете (г. Кингстон, штат Онтарио, Канада).



30.03.2006

Введение

В настоящий момент сложились самые благоприятные условия для принятия решения о переходе на DB2. С объявлением о выходе DB2 Universal Database™ (UDB) Express-C Edition V8.2, полнофункциональной бесплатной версии DB2 для платформ Linux®, UNIX®и Windows® (32-разрядной и 64-разрядной версий) все больше разработчиков переключаются на использование проверенного сервера данных, вобравшего в себя самые современные технологии и квалификацию растущего сообщества разработчиков. Комплекс программных средств DB2 Express-C строится на той же базовой технологии, что и DB2 UDB Express Edition V8.2 . Программа поддерживает широкий круг языков программирования для разработки и развертывания приложений, включая C/C++, Java™, .NET, PHP и другие.

Изучение нового программного продукта или системы иногда может оказаться сложным и отнимающим много времени занятием. Задача этой статьи – устранить крутую кривую эффективности обучения и за короткое время сформировать у администраторов баз данных и разработчиков, уже имеющих навыки работы с PostgreSQL V8.1, понимание архитектуры DB2 и принципов работы с инструментами программы. Вы получите базовое представление об архитектуре DB2 и ее основных отличиях от PostgreSQL, изучите различные инструменты и утилиты DB2 и узнаете, какие из них аналогичны тем, с которыми вы уже знакомы по PostgreSQL. Затем будут рассмотрены все дополнительные, несложные в использовании возможности и инструменты, которые предлагает DB2, и вам станет ясно, почему стоит перейти на DB2.


Общий обзор системы

На рисунке 1 представлен общий обзор архитектуры PostgreSQL, а на рисунке 2 - общий обзор архитектуры DB2.

Рисунок 1. Архитектура PostgreSQL V8.1
A diagram of the PostgreSQL V8.1 architecture

Рисунок 2. Архитектура DB2 V8.2
A diagram of the DB2 V8.2 architecture

В архитектуре этих двух программ есть сходства и различия. И PostgreSQL, и DB2 имеют архитектуру клиент-сервер, в которой клиент независим от сервера. В обоих случаях клиентское приложение при необходимости использовать базу данных делает запрос по сети и обслуживается процессом на сервере (postmaster в PostgreSQL, db2agent в DB2). PostgreSQL использует простую клиент-серверную модель процесс/пользователь, в которой один клиентский процесс подключается ровно к одному серверному процессу. Главный процесс, который носит название postmaster, слушает конкретные порты TCP/IP в ожидании входящих соединений и запускает новый серверный процесс postgres при каждом запросе соединения. Процессы postgres взаимодействуют друг с другом при помощи семафоров и совместно используют память, чтобы обеспечить целостность данных в процессе параллельного доступа к данным. Доступ к файлам базы данных осуществляется через разделяемые дисковые буферы.

В DB2 агенты-координаторы (db2agent) осуществляют координацию задачи по требованию приложения и взаимодействуют с другими агентами, используя межпроцессорную связь или протоколы удаленного взаимодействия. Все запросы соединения от клиентских приложений, как локальных, так и удаленных, распределяются соответствующим агентом-координатором. Если включена опция параллелизма внутри раздела, агент-координатор запускает дополнительные рабочие агенты, так называемые субагенты (db2agentp), чтобы обеспечить параллельное выполнение задачи. В DB2 база данных может быть разбита на несколько логических узлов, прозрачных для приложения. Эти объекты могут быть размещены на одном или нескольких серверных компьютерах. DB2 осуществляет доступ к файлам базы данных через буферные пулы. Она способна выполнить выборку данных в буферные пулы и извлечь данные из буферного пула асинхронно, используя процессы предвыборки (db2pfchr) и уборщиков страниц (db2pclnr). Процесс записи журнала (db2loggw) сбрасывает записи журнала из буфера журнала в файлы журнала на диске, в то время как процесс чтения журнала (db2loggr) считывает файлы журнала базы данных в процессе обработки транзакций (другими словами, обеспечивает откат), перезапускает восстановление и переходит к последующим операциям. Дополнительную информацию о модели процесса DB2 можно найти в статье "Everything you wanted to know about DB2 Universal Database processes (Все, что вы хотели узнать о процессах DB2 Universal Database)" (сайт developerWorks, 2003 г.).


Основные инструменты администрирования

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

Интерфейс командной строки PostgreSQL – это инструмент psql, представляющий собой интерфейс терминала PostgreSQL, который позволяет интерактивно вводить запросы, выполнять их в PostgreSQL, и просматривать результаты запроса. Альтернативным источником ввода может быть файл. Интерфейс psql показан в листинге 1.

Листинг 1. Интерфейс командной строки psql в PostgreSQL
$ psql mydb

Welcome to psql 8.1.3, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

mydb=#
mydb=# SELECT version();

version
----------------------------------------------------------------
PostgreSQL 8.1.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.4 20050721 
(Red Hat 3.4.4-2)
(1 row)

mydb=# SELECT current_date;
date
------------
2006-03-09
(1 row)

mydb=#

В дистрибутив PostgreSQL не входят графические инструменты, однако на web-сайте PostgreSQL рекомендуются к использованию два популярных инструмента с открытым исходным кодом, PGAdmin III и PhpPgAdmin. Эти инструменты могут устанавливать соединение с базами данных PostgreSQL и помогают в выполнении распространенных задач.

DB2 поставляется в комплекте с несколькими инструментами, которые можно использовать для администрирования базы данных. Обработчик командной строки (CLP) – основной инструмент администрирования DB2 из командной строки. Чтобы запустить этот инструмент в среде Windows, выберите его из меню Пуск (Programs > IBM DB2 > Command Line Tools > Command Line Processor) или введите db2 в окне командной строки. На платформах UNIX и Linux войдите в систему как владелец экземпляра (об этом будет написано далее в статье), и введите db2 в командной строке. Обработчик командной строки может работать в интерактивном режиме, как показано в листинге 2. Он также может работать в обычном, не интерактивном режиме, при этом команда предваряется префиксом db2 или вводится сценарием файла ввода. Дополнительную информацию о модели процесса CLP можно найти в статье "Getting to know the DB2 UDB command line processor (Знакомство с обработчиком командной строки DB2 UDB)" (сайт developerWorks, 2005 г.).

Листинг 2. Интерактивный режим обработчика командной строки
# db2
(c) Copyright IBM Corporation 1993,2002
Command Line Processor for DB2 SDK 8.2.3

You can issue database manager commands and SQL statements from the command
prompt. For example:
    db2 => connect to sample
    db2 => bind sample.bnd

For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
 ? CATALOG DATABASE for help on the CATALOG DATABASE command
 ? CATALOG          for help on all of the CATALOG commands.

To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.

For more detailed help, refer to the Online Reference Manual.

db2 => connect to sample

   Database Connection Information

 Database server        = DB2/LINUX 8.2.3
 SQL authorization ID   = DB2INST1
 Local database alias   = SAMPLE

db2 => values current_date

1
----------
09.03.06

  1 record(s) selected.

db2 =>

Управляющий модуль Control Center, показанный на рисунке 3, - это основной графический инструмент DB2 для администрирования. При помощи Control Center вы можете решать такие задачи, как создание базы данных, резервное копирование базы данных, просмотр планов выполнения запросов, просмотр объектов базы данных, например, таблиц, и настройка параметров базы данных. Чтобы запустить Control Center в среде Windows, выберите этот модуль в меню Пуск (Programs > IBM DB2 > General Administration Tools > Control Center) или наберите db2cc в командной строке. На платформах UNIX и Linux войдите в систему как владелец экземпляра и введите db2сс командной строке.



Рисунок 3. Control Center
A diagram of the Control Center

Кластеры базы данных и экземпляры DB2

В PostgreSQL перед созданием любой базы данных необходимо инициализировать область памяти базы данных на диске. Эта область памяти называется кластером базы данных. Кластер базы данных – это коллекция баз данных, управляемых одним экземпляром работающего сервера базы данных (другими словами, процессом postmaster). В терминах файловой системы, кластер базы данных – это общий каталог, в котором хранятся все данные. Обычно в качестве владельца сервера и его данных используется одна учетная запись пользователя, которая называется учетная запись Postgres. Для выполнения многих операций (например, для запуска сервера) требуется, чтобы вы вошли в систему с учетной записи этого пользователя.

После инициализации кластер базы данных содержит базу данных postgres, которая по умолчанию используется утилитами, пользователями и сторонними приложениями. Кроме того, создается еще одна база данных ( называемая template1), которая используется в качестве шаблона для создания новых баз данных. Пользователь сможет осуществить доступ к базе данных только после того, как будет запущен сервер. Сервер можно остановить при помощи различных сигналов, посылаемых процессу postmaster.

DB2 использует понятие, похожее на понятие кластера базы данных, это так называемый экземпляр. Экземпляр, или администратор базы данных (DBM) - это логическая среда сервера, которая необходима для создания и работы базы данных. На самом деле, это целая коллекция процессов, предоставляющих доступ к базе (базам) данных. Если вы создали больше одного экземпляра, то каждый из них действует как независимая среда сервера, которая может быть остановлена и запущена независимо от других экземпляров. Как и в PostgreSQL, допускается иметь несколько активных экземпляров одновременно, при этом в каждом экземпляре может быть несколько активных баз данных. В процессе установки DB2 на платформе UNIX и Linux у пользователя есть возможность создать образец, который будет использоваться по умолчанию; обычно он называется db2inst1. В этих средах обычно создается специальная учетная запись пользователя, который будет "владеть" экземпляром; этого пользователя называют владельцем экземпляра. В процессе установки в среде Windows всегда создается один экземпляр с именем DB2. По умолчанию в процессе установки в экземпляре не создается баз данных - следует создать их явным образом. Чтобы просмотреть список экземпляров, определенных в системе, вы можете воспользоваться командной db2ilist, которую можно найти в подкаталоге данного экземпляра в установочном каталоге DB2. Листинг 3 представляет собой пример вывода данной команды в среде Linux:

Листинг 3. Пример вывода команды db2ilist
$ /opt/ibm/db2/V8.1/instance/db2ilist
db2inst1
$

По желанию пользователь может просмотреть определенные экземпляры через интерфейс Control Center. Для этого нужно развернуть папку Instances в дереве объектов левой панели, как показано на рисунке 4.

Рисунок 4. Просмотр определенных экземпляров через интерфейс Control Center
A diagram of the instances folder in the Control Center

Для запуска или остановки экземпляра DB2 в среде UNIX и Linux войдите в систему или переключитесь на учетную запись пользователя-владельца экземпляра и выполните команду db2start. Чтобы остановить экземпляр, воспользуйтесь командой db2stop. В среде Windows для остановки и запуска экземпляра можно использовать эти же команды. Однако учетная запись пользователя, используемая для выполнения команд, должна быть членом группы SYSADM, определенной для экземпляра.

Вы также можете запустить и остановить экземпляр через интерфейс Control Center. Нажмите правой кнопкой мыши на названии нужного экземпляра в дереве объектов в левой панели и выберите, соответственно, команду Start или Stop. Для остановки экземпляра все соединения с базой данных в данном экземпляре должны быть обслужены.

Новые экземпляры могут быть созданы при помощи команды db2icrt и удалены командой db2idrop.

Дополнительную информацию об учетной записи пользователя, которая создается в процессе установки DB2, можно найти в статье "Understand how user and group accounts interact with DB2 UDB (Взаимодействие учетных записей пользователей и групп с DB2 UDB)" (сайт developerWorks, 2005 г.).


Базы данных

В PostgreSQL базой данных называется именованная коллекция объектов базы данных. Обычно каждый объект базы данных (таблица, функция и т. д.) принадлежит к одной и только одной базе данных. Тем не менее, существует небольшое количество системных каталогов (например, pg_database), которые принадлежат всему кластеру; доступ к ним может осуществляться из каждой базы данных этого кластера. Базы данных физически разделены, и управление доступом осуществляется на уровне присоединения. Базы данных создаются при помощи команды CREATE DATABASE и ликвидируются при помощи команды DROP DATABASE.

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

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

Существует несколько способов создания базы данных, но чаще всего используется команда CREATE DATABASE:

CREATE DATABASE MYDB ON /database/mydb

После выполнения этой команды, в каталоге /database/mydb создается база данных с именем MYDB, если используются настройки по умолчанию. Существует много других параметров, которые вы можете использовать в этой команде, поэтому изучите схему синтаксиса команды в документации по DB2.

Еще один способ создания базы данных - это использование мастера создания базы данных модуля Control Center. Окно этого мастера показано на рисунке 5. Чтобы запустить мастер, разворачивайте дерево объектов в левой панели, пока не найдете папку Databases. Нажмите правой кнопкой мыши на папке Databases и выберите пункт Create Database, и далее пункт Standard или With Automatic Maintenance. Следуйте указаниям мастера, чтобы завершить процесс создания базы данных.

Рисунок 5. Мастер создания базы данных
A screenshot of the Create Database wizard

Файлы конфигурации

В PostgreSQL много параметров конфигурации, которые влияют на работу системы базы данных. Существует несколько средств для настройки параметров. Чаще всего параметры настраиваются в файле postgresql.conf, который обычно хранится в каталоге данных. В листинге 4 показано примерное содержимое такого файла:

Листинг 4. Пример содержимого файла postgresql.conf
# This is a comment
log_connections = yes
log_destination = 'syslog'
search_path = '$user, public'

Второй способ настройки этих параметров – это передать их из командной строки серверу postmaster:

postmaster -c log_connections=yes -c log_destination='syslog'

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

env PGOPTIONS='-c geqo=off' psql

DB2 следует также сконфигурировать для различных уровней, как показано на рисунке 6.

Рисунок 6. Различные уровни, для которых можно сконфигурировать DB2
A diagram showing the different levels where DB2 can be configured

Сначала отдельные параметры настраиваются на уровне экземпляра, например, такие как коммуникации и безопасность. Чтобы просмотреть список параметров конфигурации на уровне экземпляра, можно выполнить команду GET DB CFG. В листинге 5 показан фрагмент вывода этой команды.

Листинг 5. Пример вывода команды GET DBM CFG
db2 => get dbm cfg

 Database Manager Configuration

 Node type = Enterprise Server Edition with local and remote clients

 Database manager configuration release level            = 0x0a00

 CPU speed (millisec/instruction)             (CPUSPEED) = 4.251098e-07
 Communications bandwidth (MB/sec)      (COMM_BANDWIDTH) = 1.000000e+02

 Max number of concurrently active databases     (NUMDB) = 8
 Data Links support                          (DATALINKS) = NO
 Federated Database System Support           (FEDERATED) = NO
 Transaction processor monitor name        (TP_MON_NAME) =

 Default charge-back account           (DFT_ACCOUNT_STR) =

 Java Development Kit installation path       (JDK_PATH) = /opt/IBMJava2-142

 Diagnostic error capture level              (DIAGLEVEL) = 3
 Notify Level                              (NOTIFYLEVEL) = 3
 Diagnostic data directory path     (DIAGPATH) = /home/db2inst1/sqllib/db2dump
 .....
 .....

Чтобы изменить какой-либо параметр, используйте команду UPDATE DBM CFG:

UPDATE DBM CFG USING <название_параметра> <значение>

Замените <название_параметра> названием параметра, а <значение> - значением параметра. Некоторые параметры являются динамически изменяемыми, то есть любое изменение немедленно дает эффект. Другие для применения требуют остановки и перезапуска экземпляра.

Некоторые параметры настраиваются на уровне базы данных, например, ведение журнала, сортировка памяти и кэширование предложений SQL. Чтобы просмотреть список параметров конфигурации базы данных, выполните команду GET DB CFG FOR <имя_db>, где параметр <имя_db> определяет имя базы данных. В листинге 6 показан фрагмент вывода этой команды.

Листинг 6. Пример вывода команды GET DB CFG
db2 => get db cfg for sample

       Database Configuration for Database sample

 Database configuration release level                    = 0x0a00
 Database release level                                  = 0x0a00

 Database territory                                      = US
 Database code page                                      = 1208
 Database code set                                       = UTF-8
 Database country/region code                            = 1
 Database collating sequence                             = BINARY
 Alternate collating sequence              (ALT_COLLATE) =
 Database page size                                      = 4096

 Dynamic SQL Query management           (DYN_QUERY_MGMT) = DISABLE

 Discovery support for this database       (DISCOVER_DB) = ENABLE

 Default query optimization class         (DFT_QUERYOPT) = 5
 Degree of parallelism                      (DFT_DEGREE) = 1
 Continue upon arithmetic exceptions   (DFT_SQLMATHWARN) = NO
 Default refresh age                   (DFT_REFRESH_AGE) = 0
 Default maintained table types for opt (DFT_MTTB_TYPES) = SYSTEM
 Number of frequent values retained     (NUM_FREQVALUES) = 10
 Number of quantiles retained            (NUM_QUANTILES) = 20

 Backup pending                                          = NO
 Database is consistent                                  = YES
.....
.....

Чтобы изменить какой-либо параметр, используйте команду UPDATE DB CFG:

UPDATE DB CFG FOR <имя_db> USING <название_параметра> <значение>

Замените <имя_db> именем вашей базы данных, <название_параметра> названием параметра, а <значение> - значением параметра. Одни параметры являются динамически изменяемыми. Другие требуют, чтобы вы деактивировали базу данных (если она была активирована явным образом) или подождали, пока все соединения с базой данных не будут разорваны, прежде чем позволить им восстановить соединение.

Параметры экземпляра и базы данных могут быть также изменены через интерфейс модуля Control Center. Нажмите правой кнопкой мыши на нужном экземпляре или базе данных, в зависимости от того, какие параметры вы хотите изменить, и выберите пункт Configure Parameters. Появится диалоговое окно настройки экземпляра/базы данных, показанное на рисунке 7.

Рисунок 7. Диалоговое окно Database Configuration
A screenshot showing the Database Configuration dialog window

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

Чтобы просмотреть текущие настройки реестра, используйте команду db2set. Для включения в вывод команды дополнительных данных вы можете дополнить ее некоторыми параметрами. Например, параметр –all выводит все переменные реестра, установленные на данный момент. Параметр –lr выводит список всех доступных переменных реестра, которые могут быть настроены для текущей платформы. В листинге 7 показан пример вывода команды db2set.

Листинг 7. Пример вывода команды db2set
 # db2set -all
[i] DB2COMM=TCPIP
[g] DB2SYSTEM=localhost.localdomain
[g] DB2ADMINSERVER=dasusr1

Чтобы установить или изменить один из параметров реестра, используйте команду db2set

db2set <название_параметра>=<значение>

Убедитесь, что ни с одной стороны от знака равенства (=) нет пробелов, в противном случае ваши изменения не окажут действия. Переменные реестра могут быть установлены и применены на разных уровнях. Вы можете выбрать глобальную настройку, тогда они будут применены сразу ко всем экземплярам. Можно выбрать настройку только конкретного экземпляра. По желанию, вы можете настроить параметры на уровне среды, это значит, что они будут установлены извне DB2 командой SET в Windows или командой EXPORT в UNIX и Linux. За очень немногими исключениями, экземпляры следует перезапустить, прежде чем любые изменения начнут действовать.

Чтобы получить рекомендации по первоначальной базовой настройке среды, можно использовать утилиту Configuration Advisor. Эту утилиту можно запустить из командной строки при помощи команды AUTOCONFIGURE или воспользовавшись мастером модуля Control Center Чтобы запустить утилиту из Control Center, нажмите правой кнопкой мыши на нужной базе данных и выберите пункт Configuration Advisor.


Буфер и буферный пул

PostgreSQL использует разделяемую системную память в качестве буфера. Параметр конфигурации shared_buffers в файле postgresql.conf устанавливает количество буферов разделяемой памяти, используемых сервером базы данных. Значение по умолчанию – обычно 1000, но буферов может быть меньше, если параметры ядра не поддерживают такое значение. Каждый буфер имеет размер 8192 байт, если только при создании сервера не было выбрано другое значение параметра BLCKSZ.

DB2 использует объекты базы данных, которые называются буферными пулами, в качестве кэша для данных таблицы и индекса. Буферные пулы создаются на уровне базы данных и не разделяются несколькими базами данных. При создании буферного пула следует определить размер страницы памяти, который вы хотите использовать, а также число страниц. DB2 поддерживает следующие размеры страниц: 4K, 8K, 16K, и 32K. В зависимости от сложности ваших рабочих задач, вы можете выбрать использование только одного крупного буферного пула или использовать несколько буферных пулов, каждый из которых имеет свой размер страниц. Чтобы создать буферный пул, используйте оператор CREATE BUFFERPOOL. Примеры:

CREATE BUFFERPOOL bp16k SIZE 1000 PAGESIZE 16K

Буферный пул можно создать и через интерфейс модуля Control Center. Разверните нужную базу данных, затем нажмите правой кнопкой мыши на папке Buffer Pools и выберите пункт Create. Откроется диалоговое окно создания буферного пула, показанное на рисунке 8.

Рисунок 8. Диалоговое окно Create Buffer Pool
A screenshot showing the Create Buffer Pool dialog window

По умолчанию, при создании новой базы данных создается буферный пул с размером страницы 4К и именем IBMDEFAULTBP. Размер этого буферного пула обычно недостаточен, поэтому вам захочется увеличить его или создать новый, большего размера.

Обратите внимание на кнопку Show Command в нижней части окна на рисунке 8. Большая часть диалоговых окон интерфейса Control Center позволяет просмотреть предложение SQL или команду, которая в данный момент выполняется в фоновом режиме. Эти команды можно сохранить в виде сценариев для использования впоследствии. Кроме того, это прекрасный способ изучить синтаксис DB2.


Пространства таблиц

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

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

Пространства таблицы могут быть определены как управляемые системой (SMS) или базой данных (DMS). Пространства таблиц SMS управляются операционной системой; при необходимости их размер может быть увеличен. Они обеспечивают хорошую производительность при минимальном администрировании. Пространства таблиц DMS предварительно распределяются и управляются DB2. Этот тип пространств таблиц обычно превосходит по производительности SMS, но требует большего расхода ресурсов на администрирование. Пространства таблиц DMS обладают большей гибкостью в том смысле, что позволяют распределить данные таблиц, индексы и крупные объекты по отдельным пространствам таблиц.

Чтобы создать пространство таблиц, используйте команду CREATE TABLESPACE:

CREATE TABLESPACE USER_16K
PAGESIZE 16K
MANAGED BY SYSTEM
USING ('d:\usp3_cont1', 'e:\usp3_cont2', 'f:\usp3_cont3')
BUFFERPOOL bp16k

Эта команда создает пространство таблиц, использующее страницы размером 16 кбайт и ассоциированное с буферным пулом bp16k. Пространство таблиц распределено по трем контейнерам, каждый из которых размещен на отдельном диске.

Пространства таблиц можно создавать и через интерфейс модуля Control Center. Разверните нужную базу данных, затем нажмите правой кнопкой мыши на папке Table Spaces и выберите пункт Create. Откроется окно мастера создания пространств таблиц, показанное на рисунке 9.

Рисунок 9. Мастер создания пространств таблиц
A screenshot showing the Create Table Space wizard

При создании новой базы данных (с настройками по умолчанию) создаются три пространства таблиц, описание которых приведено в таблице 1.

Таблица 1. Пространства таблиц, генерируемые по умолчанию при создании новой базы данных
Имя пространства таблицОписание
SYSCATSPACEПространство таблиц для каталога, которое содержит таблицы системного каталога.
TEMPSPACE1Временное системное пространство таблиц, используемое DB2 в качестве рабочей области при выполнении операций, например, присоединения и сортировки.
USERSPACE1В этом пространстве таблиц хранятся таблицы пользователя, если пространство таблиц не было явно указано во время создания таблицы.

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


Схемы

Схемы в PostgreSQL и DB2 не имеют принципиальных отличий. Каждая база данных содержит одну или более именованных схем, которые, в свою очередь, содержат таблицы и другие объекты базы данных. Схемы можно создать при помощи команды CREATE SCHEMA. Примеры:

CREATE SCHEMA myschema

Кроме того, DB2 позволяет создавать схемы "на лету", если не определена ни одна схема. Такие действия разрешаются только тем пользователям, которым предоставлено право IMPLICIT_SCHEMA в отношении базы данных.

Для удаления схемы используется команда DROP SCHEMA. Примеры:

DROP SCHEMA myschema

Главное различие между PostgreSQL и DB2 состоит в том, что происходит, если не определена ни одна схема. В PostgreSQL, если вы создаете объект, не определив имя схемы, то он автоматически помещается в схему public. Эта схема существует в каждой новой базе данных. Другими словами, в PostgreSQL следующие предложения эквивалентны:

CREATE TABLE products ( ... )

и

CREATE TABLE public.products ( ... )

Если схема не задана, то система определяет, в какой схеме следует разместить объект, следуя по пути поиска, который представляет собой список схем. Первый подходящий объект, размещенный в схеме пути поиска, рассматривается как искомый. Если в пути поиска подходящий объект не найден, генерируется сообщение об ошибке, даже если подходящие имена объекта существуют в других схемах базы данных. Первая схема, названная в пути поиска, называется текущей схемой. По умолчанию, это схема public. Помимо того, что она является первой схемой, которую ищет система, именно в ней будут созданы новые объекты, если в команде CREATE <object> не задано имя схемы. Именно по этой причине новые объекты создаются в схеме public, если она по умолчанию стоит первой в маршруте поиска. Этот путь можно изменить при помощи предложения SET:

SET search_path TO myschema,public;

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

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

Чтобы изменить схему, используемую по умолчанию, используйте предложение SET SCHEMA. Например, предложение:

SET SCHEMA JIM

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


Таблицы, индексы и представления

Таблицы, представления и индексы в PostgreSQL и DB2 не отличаются. В DB2 вы должны соединиться с базой данных, в которой хотите создать объект, до создания объекта. Вы можете создать эти объекты при помощи командного синтаксиса или мастера модуля Control Center. На рисунке 10 показан мастер создания таблиц. Чтобы запустить мастер создания таблиц, нажмите правой кнопкой мыши на папке Tables в нужной базе данных и выберите пункт Create Table.

Рисунок 10. Мастер создания пространств таблиц
A screenshot showing the Create Table Space wizard

Хотя синтаксис, используемый при создании объектов, несложен, каждая база данных реализует его по-своему. Например, в PostgreSQL вы можете определить тип создаваемого индекса: B-Tree, R-Tree или Hash. В DB2 у вас нет такой возможности. Однако DB2 при необходимости автоматически создает особые типы индексов, например, растровые индексы при выполнении некоторых видов запросов, или блочные индексы при работе с многомерными таблицами кластеризации (таблицами MDC). В DB2 тоже есть особый механизм реализации объектов, которого нет в PostgreSQL; это таблицы MDC и таблицы материализованных запросов.


Объекты приложений базы данных

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

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

PostgreSQL предоставляет четыре вида функций:

  • Функции языка запросов (функции, которые написаны на "чистом" SQL);
  • Функции процедурного языка (например, функции, написанные на PL/pgSQL или PL/Tcl);
  • Собственные функции (функции, написанные на С, которые были статически прикомпонованы к серверу PostgreSQL);
  • Функции языка С (написанные на С или на языке, который может быть совместим с языком С, и скомпилированные в динамически загружаемые объекты; загружаются сервером по требованию).

PostgreSQL поддерживает также триггеры. Код триггера в действительности содержит функцию триггера, которая представляет собой особую функцию, содержащую логическую схему выполнения триггера. Функция триггера может быть создана до создания самого триггера. Она может быть написана на одном из распространенных процедурных языков, включая PL/pgSQL, PL/Tcl, PL/Perl, и PL/Python.

DB2 поддерживает хранимые процедуры, пользовательские функции и пользовательские хранимые процедуры. Хранимые процедуры могут быть написаны на C/C++, Java, OLE, COBOL, языках Microsoft с поддержкой CLR или процедурном языке SQL DB2 (SQL PL). При создании хранимой процедуры SQL, ее процедурные выражения преобразуются в собственное представление DB2, которое хранится в каталогах базы данных, как это происходит с другими предложениями SQL. При вызове процедуры собственное представление загружается из каталога и выполняется механизмом DB2.

DB2 предлагает возможность создавать настраиваемые пользовательские функции (UDF), используя язык SQL PL. Функции могут быть написаны и на внешнем языке, например, на С или Java. Функции UDF могут быть инкапсулированы в часто используемые логические схемы для снижения сложности разработки приложения. Процедурный язык DB2 для пользовательских функций UDF, по сути, является подмножеством процедурного языка DB2 PSM. По сути, некоторые элементы языка SQL PL, которые поддерживаются хранимыми процедурами SQL, не поддерживаются пользовательскими функциями UDF.

И, наконец, DB2 поддерживает использование триггеров в предложениях операторов INSERT, UPDATE и DELETE. DB2 также поддерживает триггеры, определенные на основе представлений, так называемые триггеры INSTEAD OF. Важно отметить, что процедурный язык DB2 для триггеров, по сути, является подмножеством процедурного языка DB2 PSM. Некоторые элементы языка SQL PL, которые поддерживаются хранимыми процедурами SQL, не поддерживаются в триггерах.


Безопасность

И PostgreSQL, и DB2 имеют механизмы аутентификации и авторизации. Аутентификацией называется процесс проверки достоверности регистрационных данных пользователя. Авторизацией называется процесс установления факта наличия у пользователя соответствующих привилегий базы данных, необходимые для выполнения какого-либо действия.

PostgreSQL предлагает несколько различных методов аутентификации клиента. Для аутентификации конкретного соединения клиента может быть выбран способ на основе адреса клиентского компьютера, базы данных или пользователя. Аутентификацией клиента управляет файл конфигурации, который традиционно называется pg_hba.conf и хранится в каталоге данных кластера базы данных. Обычный формат файла pg_hba.conf – это набор записей, по одной в каждой строке. Каждая запись содержит тип соединения, диапазон IP-адресов клиента (если это существенно для данного типа соединения), имя базы данных, имя пользователя и метод аутентификации, который следует использовать для тех соединений, которые соответствуют данным параметрам. Для аутентификации используется первая запись, содержащая подходящий тип соединения, имя базы данных, запрашивающей соединение, и имя пользователя. Если ни одна из записей не соответствует запросу, доступ запрещается. В листинге 8 приведен пример фрагмента файла pg_hba.conf.

Листинг 8. Пример содержимого файла pg_hba.conf
# Allow any user on the local system to connect to any database under
# any database user name using Unix-domain sockets (the default for 
# connections).
#
# TYPE	DATABASE	USER	CIDR-ADDRESS		METHOD
  local	all		all					trust

# The same using local loopback TCP/IP connections.
#
# TYPE	DATABASE	USER	CIDR-ADDRESS		METHOD
  host	all		all	127.0.0.1/32		trust

# Allow a user from host 192.168.12.10 to connect to database
# "postgres" if the user's password is correctly supplied.
#
# TYPE	DATABASE	USER	CIDR-ADDRESS		METHOD
  host	postgres	all	192.168.12.10/32	md5

Остальные параметры аутентификации и соединений настраиваются в файле postgresql.conf.

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

По умолчанию, аутентификация осуществляется на сервере DB2. DB2 поддерживает несколько методов аутентификации, включая аутентификацию клиента (разрешающую доступ по схеме "один вход в систему"), средство обеспечения безопасности Kerberos или подключаемый администратором модуль общей службы безопасности (Generic Security Service, GSS). Среди дополнительных вариантов аутентификации – возможность шифрования имени пользователя и пароля, а также данных, при передаче по сети между клиентом и сервером. Вы можете изменить значение параметра экземпляра DB2, вызвав функцию AUTHENTICATION, предназначенную для изменения параметров аутентификации всего экземпляра. Все базы данных в этом экземпляре будут использовать указанное значение.

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

Поскольку в DB2 нет понятия пользователя базы данных или приложения, то необходимо создать некоторых пользователей операционной системы, которых ваше приложение будет использовать для соединения с базой данных, после чего предоставить им конкретные привилегии на объекты базы данных. Чтобы упростить администрирование и управление, вы также можете создать группы пользователей и дать конкретные привилегии этим группам. Пользователи, принадлежащие к группам, наследуют привилегии, предоставленные группам. Привилегии могут быть предоставлены и отозваны при помощи стандартных операторов GRANT и REVOKE. Привилегиями можно также управлять через Control Center. Список различных привилегий, которые могут быть предоставлены и отозваны, можно найти в документации по DB2. Привилегии предоставляются на уровне базы данных и применяются только к конкретной базе данных, а не ко всем базам экземпляра. Если вы хотите предоставить пользователю одинаковые привилегии в нескольких базах данных, вы должны явно назначить эти привилегии для каждой из баз.

DB2 UDB предоставляет также иерархию административных прав на уровне системы (SYSADM, SYSCTRL, SYSMAINT, SYSMON). Эти права также позволяют пользователями выполнять подмножество задач по администрированию, например, создать/удалить базу данных и вынудить пользователей покинуть систему. Права назначаются на уровне экземпляра посредством добавления имени группы к соответствующему параметру на уровне экземпляра (SYSADM_GROUP, SYSCTRL_GROUP, SYSMAINT_GROUP, SYSMON_GROUP). Пользователи, принадлежащие к этой группе, наследуют права для всех баз данных экземпляра.

Дополнительную информацию об учетных записях пользователей и привилегиях/правах можно найти в статьях "Understand how user and group accounts interact with DB2 UDB (Взаимодействие учетных записей пользователей и групп с DB2 UDB)" (сайт developerWorks, 2005 г.) и "rstand how authorities and privileges are implemented in DB2 UDB (Реализация прав и привилегий в DB2 UDB" (сайт developerWorks, 2006 г.).


Параллелизм

В отличие от традиционных систем баз данных, которые используют для управления параллелизмом блокировки, PostgreSQL управляет целостностью данных при помощи модели, поддерживающей использование многих версий (механизм управления параллелизмом с поддержанием многих версий, MVCC). Это означает, что при запросе базы данных каждая транзакция видит состояние данных на какой-то предшествующий обращению момент времени независимо от текущего состояния данных. Это защищает транзакцию от получения противоречивых данных, которые могли бы появиться вследствие обновления тех же строк данных другой конкурирующей транзакцией.

Спецификация SQL описывает четыре уровня локализации транзакций и связанные с этими проблемы параллелизма, которые могут возникнуть в каждом из случаев. В PostgreSQL вы можете запросить любой из четырех стандартных уровней локализации, однако внутренне существуют только два различных уровня локализации, которые соответствуют уровням Read Committed и Serializable. Когда вы выбираете Read Uncommitted, вы, в действительности, получаете Read Committed, а при выборе уровня Repeatable Read вам, на самом деле, предоставляется Serializable, так что реальный уровень локализации может быть более строгим, чем выбирает пользователь.

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

Модель управления параллелизмом в DB2 радикально отличается от модели, используемой PostgreSQL. В любой момент времени здесь существует только одна копия или экземпляр записи. DB2 для обеспечения целостности и непротиворечивости данных использует блокировку записей и таблиц. При любом запросе записи для чтения или изменения DB2 применяет блокировку, за исключением случаев, когда приложение, запрашивающее запись, использует уровень локализации транзакций Uncommitted Read; в этом случае для операций чтения не применяется блокировка записей. Операторы изменения всегда требуют блокировки с монополизацией. Эти блокировки осуществляются при завершении или откате транзакций. Параметры блокировки можно настроить; среди настраиваемых параметров – объем памяти, выделяемой на обслуживание блокировки (параметр конфигурации базы данных LOCKLIST), время ожидания приложением блокировки (параметр конфигурации базы данных LOCKTIMEOUT) и максимальный размер памяти, выделяемый на обслуживание блокировки для одного приложения в процентах ( параметр конфигурации базы данных MAXLOCKS).

DB2 поддерживает различные уровни управления параллелизмом, чтобы соответствовать потребностям большей части приложений. Приложение должно использовать тот уровень локализации транзакций, который обеспечивает необходимый уровень параллелизма. Уровень локализации транзакций определяется для каждого соединения с базой данных, то есть, разные соединения с базой данных могут использовать различные уровни локализации. Чаще всего достаточным является установленная по умолчанию настройка Cursor Stability. DB2 также позволяет определить уровень локализации транзакций на уровне предложения SQL; этот уровень заменяет для данного предложения уровень локализации, установленный для базы данных. Предположим, например, что некоторому приложению необходимо приблизительно подсчитать количество записей в таблице. При этом крайне важна производительность, поэтому требуется степень локализации Cursor Stability для всех действий, за исключением одного предложения SQL. Для получения этой информации можно использовать следующее предложение SQL:

SELECT COUNT(*) FROM tab1 WITH UR

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

Чтобы повысить степень параллелизма в системе, чаще фиксируйте транзакции, включая и транзакции только для чтения. По возможности, постарайтесь перепланировать приложения, которые конкурируют за доступ к одной и той же таблице. Кроме того, используйте уровень локализации Uncommitted Read (UR) для тех транзакций, при которых целостность при чтении не составляет проблемы.

Возможно, вы также захотите задействовать три относительно новых переменных реестра (DB2_EVALUNCOMMITTED, DB2_SKIPINSERTED и DB2_SKIPDELETED), чтобы обеспечить параллелизм этой системы. Такая практика может оказаться выгодной при преобразовании данных из системы с управлением параллелизмом по механизму MVCC, например, PostgreSQL. Дополнительную информацию об этих переменных реестра можно найти в статье "Lock avoidance in DB2 UDB V8 (Предотвращение блокировок в DB2 UDB V8)" (сайт developerWorks, 2005 г.).


Резервное копирование и восстановление данных

В базах данных PostgreSQL используются три метода резервного копирования: Дамп SQL, резервное копирование файловой системы и резервное копирование в реальном времени. По методу "Дамп SQL" система генерирует текстовый файл, содержащий команды SQL, которые при возврате серверу воссоздают базу данных в состоянии на момент записи дампа. Для этих целей используется вспомогательная программа pg_dump. Для создания резервной копии всего кластера базы данных имеется программа pg_dumpall. Другая стратегия резервного копирования заключается в непосредственном копировании файлов, которые PostgreSQL использует для хранения всех данных базы, любым методом, который вы предпочитаете использовать для резервного копирования файловой системы. И, наконец, вы можете комбинировать резервное копирование на уровне файловой системы с файлами сохраняющей регистрации, чтобы восстановить базу данных до состояния на конкретный момент времени.

В DB2 резервное копирование следует выполнять отдельно для каждой базы данных при помощи команды BACKUP. Эта команда сохраняет двоичную копию состояния базы данных на момент резервного копирования; копия впоследствии может быть использована для восстановления базы данных до сохраненного состояния. DB2 поддерживает три вида резервного копирования: полное, инкрементное и дифференциальное. Полная резервная копия – это полный снимок текущего состояния базы данных. Инкрементное резервное копирование позволяет создать резервную копию только тех индексов и страниц данных, которые были изменены с момента предыдущего резервного копирования. Дифференциальные резервные копии включают данные, которые были изменены с момента последнего инкрементного или дифференциального копирования. В дополнение к этому DB2 поддерживает резервное копирование в обычном режиме и в режиме реального времени, что дает вам дополнительную гибкость в обеспечении непрерывной работы системы.

Для создания резервной копии воспользуйтесь командой BACKUP. Примеры:

backup database sample to /dev1/backup

Эта команда создает полную резервную копию базы данных SAMPLE в обычном режиме и заменяет файлы резервных копий в каталоге /dev1/backup.

Резервное копирование можно также выполнять через Control Center. Нажмите правой кнопкой мыши на нужной базе данных в дереве объектов левой панели и выберите пункт Backup. Появится окно мастера резервного копирования, показанное на рисунке 11; в этом окне вы сможете настроить параметры резервного копирования.

Рисунок 11. Мастер резервного копирования интерфейса Control Center
A screenshot showing the Backup Wizard

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

Дополнительную информацию о модели процесса BACKUP можно найти в статье "The IBM DB2 Universal Database for Linux, UNIX, and Windows Backup Utility (Утилита резервного копирования универсальной базы данных IBM DB2 для Linux, UNIX и Windows)" (сайт developerWorks, 2005 г.).

База данных может быть восстановлена из образов резервных копий при помощи команды RESTORE. Примеры:

RESTORE DATABASE SAMPLE

Кроме того, вы можете восстановить базу данных через интерфейс модуля Control Center при помощи мастера восстановления базы данных. Для запуска этого мастера нажмите правой кнопкой мыши на папке All Databases, затем выберите пункт Create Database и далее пункт From Backup.

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

Кроме утилиты BACKUP в DB2 имеется еще одна утилита - db2look; она может быть использована для восстановления определений объектов базы данных. Эти определения затем можно использовать для создания этих объектов в другой базе данных. Обратите внимание, что утилита генерирует только определения объектов (DDL), а не данные. Эту утилиту можно вызвать также из модуля Control Center. Нажмите правой кнопкой мыши на объекте (другими словами, на таблице, базе данных и т. д.) и выберите пункт Generate DDL. Дополнительную информацию об утилите db2look можно найти в документации по DB2.


Обслуживание базы данных

В PostgreSQL имеется комплект утилит для обеспечения надлежащего состояния и производительности базы данных. Команду VACUUM следует выполнять на регулярной основе для восстановления дискового пространства, занятого измененными или удаленными записями, а также для обновления статистических данных, используемых планировщиком запросов PostgreSQL. Кроме того, иногда полезно использовать ее для восстановления индексов вместе с командой REINDEX.

В DB2 также имеется несколько утилит, которые можно использовать для поддержания надлежащего состояния и производительности базы данных. Первая, и самая важная, это утилита RUNSTATS. Утилита RUNSTATS собирает статистическую информацию для таблиц и индексов, которая затем используется в процессе оптимизации запросов, что позволяет составить оптимальный план доступа для запросов. Важно обновлять статистику на регулярной основе, а также после загрузки или удаления большого количества записей таблицы или добавления нового индекса. Команда runstats используется для сбора статистики для таблицы. Например, следующая команда runstats собирает подробную статистику для таблицы EMPLOYEE и всех ее индексов:

runstats on table tedwas.employee with distribution indexes all

Эта утилита также доступна через интерфейс модуля Control Center. Нажмите правой кнопкой мыши на нужной таблице в папке Tables интересующей базы данных и выберите пункт Run Statistics. Появится диалоговое окно Run Statistics, показанное на рисунке 12, где вы сможете настроить параметры, используемые при сборе статистики.

Рисунок 12. Диалоговое окно утилиты runstats
A screenshot showing the runstats dialog window

Хотя вы можете осуществлять сбор статистических данных в любое удобное время, DB2 может также автоматизировать этот процесс. Программа способна отслеживать необходимость в обновлении статистики, а затем, если нужно, запустить ее обновление в подготовленном пользователем окне обслуживания. Дополнительную информацию об этой возможности и о самой утилите runstats можно найти в статье " RUNSTATS in DB2 UDB, Version 8.2 (Утилита RUNSTATS в DB2 UDB, Version 8.2)" (сайт developerWorks, 2005 г.).

Еще одна не менее важная утилита DB2 для обслуживания базы данных – это утилита REORG. Утилита REORG помогает с большей эффективностью упорядочить данные в таблицах и индексах. В таблицах она реконструирует записи, чтобы удалить фрагментированные данные, и сжимает информацию. Что касается индексов, то она реорганизует все индексы, определенные в таблице, преобразуя данные индекса в нефрагментированные, физически непрерывные страницы. Например, следующая команда реорганизует таблицу EMPLOYEE:

REORG TABLE tedwas.employee

Утилиту REORG можно вызвать также из модуля Control Center. Нажмите правой кнопкой мыши на таблице в папке Tables в нужной базе данных и выберите пункт Reorganize (или пункт Reorganize Indexes для реорганизации индексов). Появится диалоговое окно Reorganize Table, показанное на рисунке 13, где вы сможете настроить параметры, используемые при реорганизации.

Рисунок 13. Диалоговое окно Reorganize Table
A screenshot showing the Reorganize Table dialog window

Чтобы выяснить, нуждается ли таблица или индекс в реорганизации, можно использовать специальную утилиту REORGCHK. Например, вывод (не показан) следующей команды может помочь определить, нужно ли реорганизовать таблицу EMPLOYEE:

REORGCHK CURRENT STATISTICS ON TABLE tedwas.employee


Мониторинг

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

В DB2 мониторинг может осуществляться на различных уровнях. Для получения информации о состоянии базы данных и любом из установивших соединения приложений вы можете использовать монитор фиксации мгновенных состояний. Снимки мгновенных состояний полезны для определения состояния системы базы данных в конкретный момент времени. Если проводить такой мониторинг через равные промежутки времени, он может также быть полезным для отслеживания тенденций и прогнозирования возможных проблем. Если информация, полученная с базовыми настройками, окажется недостаточной, вы, возможно, захотите настроить несколько переключателей для получения более детализированной информации до того, как сделать снимок мгновенного состояния. Информацию по настройке этих переключателей можно найти в документации по DB2 . Когда все будет готово для создания снимка, выполняется команда GET SNAPSHOT. В листинге 9 приведен фрагмент вывода команды GET SNAPSHOT FOR ALL DATABASES.

Листинг 9. Вывод команды GET SNAPSHOT FOR ALL DATABASES
Database Snapshot

Database name                              = SAMPLE
Database path                              = /home/db2inst1/db2inst1/NODE0000/SQL00001/
Input database alias                       =
Database status                            = Active
Catalog database partition number          = 0
Catalog network node name                  =
Operating system running at database server= LINUX
Location of the database                   = Local
First database connect timestamp           = 09.03.06 11:03:58.417363
Last reset timestamp                       =
Last backup timestamp                      =
Snapshot timestamp                         = 09.03.06 11:41:55.957502

Number of automatic storage paths          = 0

High water mark for connections            = 5
Application connects                       = 47
Secondary connects total                   = 1
Applications connected currently           = 2
Appls. executing in db manager currently   = 0
Agents associated with applications        = 2
Maximum agents associated with applications= 5
Maximum coordinating agents                = 5

Locks held currently                       = 0
Lock waits                                 = 0
Time database waited on locks (ms)         = Not Collected
Lock list memory in use (Bytes)            = 1920
Deadlocks detected                         = 0
Lock escalations                           = 0
Exclusive lock escalations                 = 0
Agents currently waiting on locks          = 0
Lock Timeouts                              = 0
Number of indoubt transactions             = 0

Total Private Sort heap allocated          = 0
Total Shared Sort heap allocated           = 0
Shared Sort heap high water mark           = 0
Total sorts                                = 20
Total sort time (ms)                       = Not Collected
Sort overflows                             = 1
Active sorts                               = 0
...
...

Информацию о мгновенном состоянии можно получить также при помощи SQL, используя соответствующую табличную функцию SNAPSHOT_xxxx(). Список этих функций можно найти в документации по DB2.

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

Монитор событий можно создать, используя синтаксис командной строки или интерфейс Control Center. Например, следующие предложения создают и активируют монитор события для установления соединения приложением и записывают его вывод в файл с именем /tmp/conevents.

CREATE EVENT MONITOR conmon FOR CONNECTIONS WRITE TO FILE '/tmp/conevents'
SET EVENT MONITOR conmon STATE 1

По завершении периода мониторинга, можно сбросить буфер монитора событий и остановить монитор при помощи следующих предложений:

FLUSH EVENT MONITOR conmon
SET EVENT MONITOR conmon STATE 0

Исходные данные монитора событий затем можно отформатировать при помощи утилиты db2evmon.

db2evmon -db sample -evm conmon

В листинге 10 показан фрагмент форматированного вывода монитора событий.

Листинг 10. Фрагмент форматированного вывода монитора события для установлений соединения приложениями
--------------------------------------------------------------------------
                            EVENT LOG HEADER
  Event Monitor name: CONMON
  Server Product ID: SQL08024
  Version of event monitor data: 7
  Byte order: LITTLE ENDIAN
  Number of nodes in db2 instance: 1
  Codepage of database: 1208
  Territory code of database: 1
  Server instance name: db2inst1
--------------------------------------------------------------------------

--------------------------------------------------------------------------
  Database Name: SAMPLE  
  Database Path: /home/db2inst1/db2inst1/NODE0000/SQL00001/
  First connection timestamp: 09.03.06 12:00:22.473810
  Event Monitor Start time:   09.03.06 12:02:39.125790
--------------------------------------------------------------------------

3) Connection Header Event ...
  Appl Handle: 9
  Appl Id: *LOCAL.db2inst1.060309170022
  Appl Seq number: 0007
  DRDA AS Correlation Token: *LOCAL.db2inst1.060309170022
  Program Name    : db2bp
  Authorization Id: DB2INST1
  Execution Id    : db2inst1
  Codepage Id: 1208
  Territory code: 1
  Client Process Id: 16627
  Client Database Alias: SAMPLE
  Client Product Id: SQL08024
  Client Platform: Unknown
  Client Communication Protocol: Local
  Client Network Name: localhost.localdomai
  Connect timestamp: 09.03.06 12:00:22.473810

4) Connection Header Event ...
  Appl Handle: 11
  Appl Id: *LOCAL.db2inst1.060309170318
  Appl Seq number: 0001
  DRDA AS Correlation Token: *LOCAL.db2inst1.060309170318
  Program Name    : DB2HMON
  Authorization Id: DB2INST1
  Execution Id    : db2inst1
  Codepage Id: 1208
  Territory code: 0
  Client Process Id: 16323
  Client Database Alias: SAMPLE
  Client Product Id: SQL08024
  Client Platform: Unknown
  Client Communication Protocol: Local
  Client Network Name: localhost.localdomain
  Connect timestamp: 09.03.06 12:03:17.225823
...
...

Чтобы создать монитор событий через интерфейс Control Center, нажмите правой кнопкой мыши на папке Event Monitors в интересующей вас базе данных и выберите пункт Create. Появится диалоговое окно Create Event Monitor, показанное на рисунке 14, в котором можно настроить характеристики монитора событий.

Рисунок 14. Создание монитора событий через Control Center
A screenshot showing the Create Buffer Pool dialog window

Чтобы запустить или остановить монитор, нажмите правой кнопкой мыши на вновь созданном мониторе в папке Event Monitors и выберите, соответственно, пункты Start Event Monitoring или Stop Event Monitoring. Для просмотра вывода монитора, снова нажмите правой кнопкой мыши на новом мониторе, который вы создали, и выберите пункт Analyze Event Monitor Records. На рисунке 15 показано диалоговое окно Event Analyzer.

Рисунок 15. Просмотр анализа монитора событий при помощи Event Analyzer
A screenshot showing the Create Buffer Pool dialog window

Можно настроить мониторы событий на запись своих выходных данных в программный канал или таблицы.


Сопоставление команд, утилит и прочих инструментов двух сред

В PostgreSQL имеется несколько утилит и команд, которые используются для выполнения обслуживания баз данных. Таблица 2 обобщает сведения об этих инструментах и приводит сведения о соответствующих командах или утилитах DB2, если таковые имеются

Таблица 2. Сопоставление команд и утилит PostgreSQL и аналогичных инструментов DB2
КОМАНДА/УТИЛИТА PostgreSQLОПИСАНИЕЭКВИВАЛЕНТ В DB2
clusterdbУтилита для повторной кластеризации таблиц и базы данных. Осуществляет повторную кластеризацию на основе последнего из используемых индексов. Команда REORG. Это средство также доступно через интерфейс модуля Control Center.
createdbУпаковщик для команды CREATE DATABASE Команда CREATE DATABASE. Это средство также доступно через интерфейс модуля Control Center.
pg_configРаспечатывает параметры конфигурации текущей установленной версии PostgreSQL Утилита db2level.
pg_dumpУтилита для резервного копирования базы данных PostgreSQL. Дампы могут выводиться в формате файла архива или сценария. Команды BACKUP и db2look. Резервная копия DB2 – это битовый дамп базы данных, который может использоваться только командой RESTORE. Команда db2look используется для получения дампа структуры (DDL), как вариант, с включением данных. Это средство также доступно через интерфейс модуля Control Center.
pg_dumpallУтилита для записи ("фиксации дампа") всех баз данных PostgreSQL данного кластера в один файл сценария. Этот файл сценария содержит команды SQL, которые могут быть использованы в качестве исходных данных для команды psql при восстановлении базы данных.В DB2 нет эквивалента. Резервное копирование каждой базы данных в экземпляре должно производится отдельно при помощи утилиты BACKUP; можно также извлечь структуру базы при помощи утилиты db2look.
pg_restoreУтилита для восстановления базы данных PostgreSQL из архива, созданного утилитой pg_dump в одном из форматов, кроме формата plain-text. Команда RESTORE, если резервная копия была создана командой BACKUP. Если структура базы данных и данные были записаны при помощи команды db2look, файл может быть использован в качестве ввода для обработчика командной строки с целью повторного создания объектов базы данных и самих данных.
psqlТерминальный клиент PostgreSQL. Включает интерактивное выполнение запросов и отображает результаты запросов. Альтернативным источником ввода может быть файл. Команда db2. Ввод команды db2 в командной строке операционной системы загружает обработчик командной строки DB2 в интерактивном режиме.
reindexdbУпаковщик для команды REINDEX Утилита REORG Это средство также доступно через интерфейс модуля Control Center.
vacuumdbУпаковщик для команды VACUUM Команда REORG для реорганизации таблиц и индексов. Команда RUNSTATS для сбора статистики для таблиц и индексов. Это средство также доступно через интерфейс модуля Control Center.
initdbСоздает новый кластер базы данных PostgreSQL Кластером базы данных называется коллекция баз данных, которыми управляет один экземпляр сервера. Команда db2icrt Эта команда создает новый экземпляр DB2. Затем в данном экземпляре могут быть созданы базы данных.
pg_controldataРаспечатывает информацию, инициализированную во время выполнения команды initdb, например, версию каталога и языковую настройку сервера.
  • Команда GET DBM CFG отображает информацию об экземпляре.
  • Команда GET DB CFG FOR <имя_db> отображает информацию о базе данных.
Это средство также доступно через интерфейс модуля Control Center.
pg_ctlУтилита для запуска, остановки или перезапуска серверного процесса PostgreSQL (postmaster) или вывода информации о состоянии работающего сервера.
  • Команда db2start запускает экземпляр DB2.
  • Команда db2stop запускает экземпляр DB2.
Это средство также доступно через интерфейс модуля Control Center.
pg_resetxlogСоздает журнал сохраняющей регистрации (WAL) и дополнительно может стирать другую контрольную информацию, которая хранится в файле pg_control Эта функция иногда необходима, если эти файлы были повреждены. Команда RECOVER DATABASE. Эту команду можно использовать для возвращения базы данных в непротиворечивое состояние. Команда RESTORE также может использоваться для восстановления базы данных или пространства таблицы из образа резервной копии или восстановления файла истории базы данных.
postgresВажный серверный процесс PostgreSQL, который выполняет обработку запросов. Обычно он не вызывается непосредственно; вместо этого запускается многопользовательский сервер postmaster. db2sysc – главный процесс экземпляра DB2. Он запускается при выполнении команды db2start и останавливается при выполнении команды db2stop.
postmasterМногопользовательский сервер базы данных PostgreSQL. Клиентское приложение для получения доступа к базе данных соединяется с работающим процессом postmaster. Затем процесс postmaster запускает отдельный серверный процесс (postgres) для обработки соединения. Процесс postmaster также управляет коммуникациями между серверными процессами. db2sysc – главный процесс экземпляра DB2. Он запускается при выполнении команды db2start и останавливается при выполнении команды db2stop. Процесс db2sysc при необходимости запускает другие процессы.

DB2 поставляется с множеством других инструментов, которые не рассматриваются в данной статье. Редактор команд Command Editor, показанный на рисунке 16 - это графический вариант обработчика командной строки для тех, кто привык работать в графической среде.

Рисунок 16. Редактор команд DB2 Command Editor
A screenshot showing the Command Editor

Модуль Configuration Assistant, показанный на рисунке 17, может помочь в настройке клиентских соединений с удаленными базами данных, обнаруживая их в сети и настраивая. При помощи этого инструмента вы также можете настроить соединение вручную.

Рисунок 17. Модуль Configuration Assistant
A screenshot showing the Configuration Assistant

Управляющий модуль Task Center, показанный на рисунке 18, используется для планирования таких задач, как резервное копирование или запуск сценариев обслуживания.

Рисунок 18. Task Center
A screenshot showing the Task Center

И, наконец, центр разработки Development Center, показанный на рисунке 19, представляет собой комплексную интегрированную среду разработки для создания хранимых процедур и пользовательских функций на языках SQL и Java.

Рисунок 19. Центр разработки Development Center
A screenshot showing the Development Center

В среде Windows все эти инструменты могут быть запущены путем выбора их из меню Пуск. Их также можно активировать, нажав соответствующую кнопку в модуле Control Center или выбрав соответствующий пункт из меню Control Center Tools. Настоятельно рекомендуется изучить эти инструменты для повышения производительности и более быстрого овладения программой.


Заключение

В статье был дан обзор основных архитектурных и специфических различий между PostgreSQL и DB2, а также рассмотрены такие важные понятия DB2, как экземпляр, база данных, буферный пул, пространство таблиц и наиболее важные инструменты, среди которых – центр управления Control Center, обработчик командной строки и различные мастера.

Кроме этой статьи, полезная информация представлена в других ресурсах. Вы можете получить ответы на свои вопросы по DB2 Express-C в новом интерактивном форуме, которым занимаются эксперты по DB2, работающие в IBM; этот форум объединяет весьма крупное сообщество разработчиков и администраторов. Раздел Зона перехода сайта developerWorks предлагает обширную информацию о переносе баз данных на платформу DB2, а также дает описание практического подхода и передового опыта. Наконец, множество ресурсов, которые могут помочь пользователю перейти на использование DB2, содержится в разделе Миграционный пункт DB2 сайта developerWorks.

Ресурсы

Научиться

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

  • Загрузите бесплатную версию DB2 Express-C;
  • Создайте свой проект разработки с помощью пробного ПО IBM, которое можно загрузить непосредственно с сайта developerWorks.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


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


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

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

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

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

Выберите имя, которое будет отображаться на экране



При первом входе в 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=145722
ArticleTitle=Используем навыки работы с PostgreSQL V8.1 для изучения DB2, Version 8.2
publish-date=03302006