Показать сообщение отдельно
Старый 18.02.2008, 12:09 Вверх   #2
Admin
 
Аватар для RAMZA
RAMZA вне форума
Доп. информация
Лампочка

В InterBase и Firebird при создании БД используется умолчательный размер страницы в 1 килобайт (1024 байта). Такое значение было выбрано достаточно давно, поэтому сейчас не актуально, и рекомендуется явно указывать размер страницы для новых баз данных - 4096, 8192 или 16384 байт (page_size).

Желательно чтобы размер страницы совпадал с размером кластера логического диска, или был больше. Дело в том, что если размер кластера больше размера страницы БД, то при записи двух страниц БД один и тот же кластер будет записан 2 раза (если размер страницы 4К, а размер кластера 8К). В обратном случае, когда размер page size больше размера кластера, происходит больше чтений или записи кластеров, однако это не так важно, как предыдущий случай (но размер кластера 512 байт при 8К page size - это тоже не очень хорошо).

Оптимальный размер страницы в настоящее время для большинства БД - 8192 байт. Для файловой системы рекомендуется выбирать такой же размер кластера.

Размер страницы в первую очередь влияет на индексы с длинными (строковыми) ключами. Чем больше размер ключа или средний размер записи таблицы, тем больший размер страницы следует выбрать - если у вас gstat -a выдает наличие индексов с Depth = 4, то стоит увеличить размер страницы. Также стоит выбрать больший размер страницы, если в БД предполагается хранить много blob размером 50К и больше.

Разные версии серверов допускают разные предельные размеры страниц для БД. Например, InterBase до версии 7.5. не может создать БД со страницами больше 8К, для InterBase 7.5, Firebird и Yaffil максимальное ограничение - 16К.

Изменить размер страницы (page size) у существующей базы данных можно только через backup/restore (gbak -c -page_size 8192 ...).

При увеличении размера страницы может наблюдаться ухудшение производительности у таблиц, которые имеют столбцы blob, содержащие данные размером меньше размера страницы. Такие blob размещаются на страницах данных вместе с записями (если blob не вмещается рядом с записью, то он размещается на отдельной странице), и в результате таблица оказывается сильно "фрагментированной".
Например, размер страницы 16К. В таблице 461 запись, и занимает таблица 164 страницы. Значит, приходится по 5.8 килобайт на запись. Однако статистика сообщает, что размер записи 106 байт. Значит, каждая запись в среднем содержит по блобу размером 5К. И если бы blob-ов не было, или они были больше 16К каждый, то объем записей в таблице был бы всего 48 килобайт или 3 страницы (в 54 раза меньше). Понятно, что 461 запись это ерунда, но когда в такой таблице десятки и сотни тысяч записей, то ее join с любой другой таблицей будет достаточно медленным, особенно если blob в конкретном запросе никак не выбираются и не используются.
см. статью www.ibase.ru/devinfo/tablefrag.htm

Максимальное количество записей в одной таблице не зависит от размера страницы, и определяется просто суммарным объемом данных в <= 36 гигабайт (на таблицу). В Firebird 2.0 этот лимит (в 36 гигабайт на одну таблицу) убран.
Надо-ли дефрагментировать диск с базой?

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

Лучший "дефрагментатор" для базы данных - это backup/restore.

Кроме этого, у разных файловых систем есть свои особенности - NTFS при наличии свободного места на диске менее 13% и сильной фрагментированности начинает работать медленнее.
Что за версии Embedded или Personal?

Исходные тексты InterBase версии Classic позволял скомпилировать сервер как dll. Т.е. внешне такой "сервер" выглядит как обычная клиентская библиотека gds32.dll, однако имеет размер такой же, как fbserver.exe, и по функциональности аналогична. То есть, сервер Firebird встроен внутрь dll, и запускается только загружающим dll приложением. Соответственно, обратиться к такому серверу можно только изнутри приложения, через локальный (не сетевой) протокол (без указания имени сервера в пути к БД).

Впервые до полноценной "встраиваемой" версии такая dll была доделана в Yaffil, и получила название Personal. Для Firebird аналогичный вариант начал выпускаться при разработке версии 1.5, и называется embedded (в отличие от Yaffil Personal код Firebird Embedded базируется на архитектуре superserver).

Embedded/Personal идеален для "однопользовательских" приложений - в этом случае не требуется совершенно никаких настроек, и достаточно dll положить рядом с EXE. Таким образом, приложение получается автономным, и не требует смены версии сервера, т.е. может работать параллельно с любой установленной серверной или embedded/personal версией.

Однако, embedded/personal имеет ряд ограничений. Поскольку это dll, загружаемая вашим приложением (exe), то сам exe вместе с dll представляет собой процесс сервера. Таким образом, нельзя запустить два exe, обращающихся к одной и той же базе данных - база данных может быть испорчена (Embedded/Personal вообще то блокирует файл для монопольного доступа, чтобы этого не случилось, но если вам попадется ранняя версия Embedded, то может получиться, что два exe откроют одну базу данных). Поэтому при разработке и отладке ваших приложений для работы нужно использовать обычный сервер, а не embedded (иначе вам придется в дизайн-тайме разрабатывать приложение "вслепую", не видя данных). То же самое относится к web-приложениям.

В Yaffil Personal открытие БД двумя dll запрещено, в Firebird Embedded - также запрещено в последних версиях FB Embedded.

Кроме того, embedded/personal обладает функциональностью обычной gds32.dll - если коннект "сетевой", т.е. с указанием имени сервера(srv:c:\dir\data.gdb), то библиотека выполняет функции обычной клиентской dll. Если коннект локальный (c:\dir\data.gdb) - то библиотека выполняет функции сервера.

Будьте внимательны - поскольку при использовании Embedded/Personal сервером является именно ваше приложение, "падение" (по AccessViolation) приложения из-за ошибки в вашем коде может привести к повреждению базы данных. Потому что (см. выше) такое падение эквивалентно падению сервера (который как раз и работает с файлом базы данных).

Дополнительная информация по Embedded также находится в дистрибутиве Embedded (1.5.3) (который является просто архивом, и который надо обязательно распаковывать с подкаталогами) - readme_embedded.txt.

примечание: для работы Embedded/Personal с локальной БД не требуется наличие сетевой карты на компьютере или сетевых протоколов в операционной системе.

примечание: Embedded невозможно "вызвать снаружи". Dll embedded-сервера должна находиться в том же каталоге, что и использующий его exe.
что нового в IB6?

A: Вот сокращенный список наиболее существенных новых возможностей:
новые типы данных - INT64, DATE, TIME, TIMESTAMP, константы для дат и времени.
хранение NUMERIC(11,x) в INT64 (т.е. нет проблем округления)
Функция EXTRACT с поддержкой YEAR, MONTH и т.п.
Изменение типа столбца (или домена) командой ALTER COLUMN x TYPE, изменение позиции поля в таблице командой ALTER COLUMN x POSITION y.
БД с возможностью записи на read-only носители (CD-R)
Services API для удаленного управления серверами, параметрами, базами данных и т.п.

Более подробно - см. документ.

Со времени выпуска 6.0 Firebird, Yaffil и в т.ч. Borland Interbase 6.5 имеют дополнительную функциональность. См. соответствующую информацию.
Что нового в IB 6.5, почему он не бесплатный?

A: Для начала на второй вопрос - 6.5, как и было обещано Borland, является сертифицифицированным билдом, и не будет выпускаться в "бесплатном" виде. Бесплатная OpenSource-версия будет содержать только исправления ошибок, но не новую функциональность 6.5. Это было давно объявлено в FAQ по сертифицированным билдам.
Триал 6.5 доступен для скачки на www.borland.com/interbase (38 мегабайт для Win, и 22 для Linux и Solaris), однако не содержит полного комплекта документации, как IB 6.5 MediaKit (только Operations Guide, Getting Started и Tutorial).

Теперь на второй вопрос - новое в 6.5:
Возможность снятия долгих запросов (из параллельного thread) через IB API
Вывод данных в XML (две функции IB API, компоненты в IBX. В общем аналогично ClientDataSet.SaveAsXML).
ограничители ROWS для SELECT, UPDATE, DELETE, позволяющий ограничить выборку или обновление данных запросом. пример синтаксиса:
SELECT * FROM TABLE
[ROWS <lower_value> [TO <upper_value>] [BY <step_value>] [PERCENT] [WITH TIES]
Поддержка размера одного файла БД более 2/4 гигабайта на Windows и Solaris
Безопасность метаданных. Изменены права по умолчанию для всех системных таблиц. Кроме того, в поставку добавлено три скрипта, которые позволяют a) дать права на модификацию объектов для public; b) дать права на все объекты для public только на чтение; c) сделать все объекты базы данных невидимыми для public.
что нового в IB7?

A: Interbase 7 объявлен 29 октября 2002 года. Вот общий список новой функциональности:

поддержка многопроцессорных компьютеров (SMP)
тип данных BOOLEAN
новый JDBC драйвер (без InterServer)
имена объектов до 68 символов
временные системные таблицы для мониторинга статистики и управления сервером.

Триал на 90 дней можно получить здесь - http://www.borland.com/products/down...interbase.html

Подробнее по функциональности и лицензиям см. http://www.ibase.ru/ib7.htm, http://www.ibase.ru/ib7license.htm
Что нового в IB 7.1/IB 7.1 SP 1

В Interbase 7.1 + Service Pack 1 достаточно много изменений по отношению к IB 7.0.
Версия 7.1 выпущена в июне 2003. SP1 был объявлен 16 октября 2003 года, и пока доступен только для зарегистрированных пользователей серверных лицензий.
Borland Data Provider для ADO.Net
Новая ODS 11.1, в которой значительно ускорена сборка мусора как версий записей, так и ключей в индексах.
SAVEPOINTS на уровне SQL и API
Кодовая страница KOI8R
Events не используют отдельное соединение, т.е. теперь работают по порту 3050, и не имеют проблем с настройками Firewall.
Улучшенная производительность SMP, массовых update, insert.
Умолчательные настройки устраняют проблему с утечками памяти в afd.sys. Появилась возможность проверять "отвалившиеся" коннекты через временные системные таблицы
Новый параметр размера сортировки в памяти SORTMEM_BUFFER_SIZE. значительно ускоряет выполнение запросов с сортировкой не по индексу.
Оптимизатор более правильно выбирает индексы для поиска
Исправлены ошибки предыдущих версий (см. ReleaseNotes.pdf)
Что нового в IB 7.1/IB 7.1 SP 2

В этой версии исправлены следующие проблемы:
Обращение к tmp$procedures после удаления или изменения процедур
Использование индексов оптимизатором в определенных ситуациях
Повреждения индексов при массовых вставках
Потери ключей индекса при rollback или сборке мусора
Медленный fetch
Другие ошибки

Триал IB 7.1 SP2 доступен на сайте Borland.
Что нового в IB 7.5
Возможность запускать несколько серверов IB на одном компьютере
Встроенная в базу поддержка пользователей (rdb$users)
Временные таблицы, в которых записи автоматически удаляются при commit или disconnect
Новые временные системные таблицы tmp$triggers, tmp$heaps
поддержка операторов CASE, COALESCE, NULLIF
Управление кэшем БД - LINGER, GROUP COMMITS, FLUSH
Управление кэшем метаданных (MEMORY RECLAIM)
Размер страницы БД может быть до 16К
Размер кэша БД может быть до 131К страниц
Увеличена производительность, в частности на SMP и при массовых обновлениях записей.
Исправлены ошибки.

Триал можно скачать по ссылке:

http://www.borland.com/products/down...interbase.html

Обновление с 7.1 на 7.5 для зарегистрированных пользователей бесплатно:

http://www.borland.com/products/down...interbase.html
Что нового в IB 7.5.1
опция NO_SAVEPOINT, для ускорения пакетных обновлений и удалений (подробнее)
инсталлятор Windows (инсталлятор на Java также находится на компакт-диске дистрибутива)
поддержка алиасов БД в Services API
возможность указания в параметрах подсоединения к БД, к какому экземпляру сервера подключаться (при использовании multi-instance).
Что нового в InterBase 2007
Журналирование, архивы журналов
Online Dump (инкрементный бэкап)
Пакетные обновления
Наборы символов Unicode UCS-2 и UTF-8
Прозрачное преобразование строк в блобы
Поддержка всей новой функциональности IB 2007 в IBX 11

Подробно обо всем этом можно прочитать InterBase 2007 Update Guide на русском или английском языке.
Что нового в InterBase 2007 SP1

Поддержка Windows Vista плюс мелкие исправления.
Что нового в InterBase 2007 SP2

Этот сервис-пак добавляет следующую функциональность:
возможность преаллокирования пространства для журнала и базы данных
новый порядок сортировки для бразильского португальского
исправления оптимизатора
Forced Write у создаваемых баз данных по умолчанию ON.
Дескрипторы UDF
параметры url JDBC-драйвера

Подробно обо всем этом можно прочитать InterBase 2007 Update Guide на русском или английском языке.
можно ли установить 2 разных сервера на один компьютер

Этот вопрос можно разбить на два - одновременный запуск двух серверов, и поочередный.

Подробно этот вопрос изложен в документе www.ibase.ru/devinfo/inst_manual.htm
Одновременный запуск

Если речь идет об одновременной работе этих серверов, то теоретически - да. Практически это зависит от версий, которые вы собираетесь использовать. Например, одновременно запустить два сервера IB 6.0 на одном компьютере нельзя.

Каждая версия сервера использует свои собственные:
настройки и пути в registry
системные объекты (mutex, семафоры и т.п.)
конфигурационный файл

Например, Firebird 1.5, Yaffil и InterBase 7.x сейчас имеют свои собственные вышеперечисленные характеристики. Единственный конфликтный параметр - это номер порта, используемый клиентом и сервером для работы по TCP. Соответственно, при одновременном запуске этих серверов нужно знать, что только клиентские части FB и Yaffil могут принимать альтернативный номер порта в строке коннекта (например, srv/3070:c:\dir\data.gdb). А на сервере номер порта, используемого конкретным сервером, устанавливается: Firebird 1.5 - в firebird.conf, Firebird 1.0 - services, InterBase - services, Yaffil - ключи командной строки ibserver.exe (это на Windows. На Linux разводка по портам осуществляется конфигурированием inetd/xinetd).

Будьте осторожны при запуске двух серверов одновременно - если вы перепутаете и откроете базу не тем сервером (если базы имеют одинаковый ods), то возможны проблемы при дальнейшей работе правильной комбинации сервер+база данных (несовместимый код BLR процедур или триггеров и т.п.).

InterBase 7.5 может быть запущен на одном компьютере в двух и более экземплярах. Однако для этого нужно соответствующее число серверных лицензий (а также желательна настройка database rerouting).
Поочередный запуск
  Ответить с цитированием
 
Время генерации страницы 0.11783 секунды с 10 запросами