Мир InterBase

         

Действие


Этот параметр устанавливает ограничения размера рабочей физической памяти (working size), доступно SuperServer на платформе Windows/NT/2000. Параметр измеряется в однокилобайтовых блоках. По умолчанию оба параметра имеют значение 0, что означает "нет ограничений".


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




В системах, не поддерживающих многопоточную обработку, этот параметр устанавливает число семафоров, доступных InterBase. Количество семафоров по умолчанию зависит от ОС и описывается в следующей таблице:

Операционная система

Количество семафоров по умолчанию

EPSON SEMAPHORES

10

М88К SEMAPHORES

10

UNIXWARE SEMAPHORES

10

NCR3000 SEMAPHORES

25

SCO_UN1X SEMAPHORES

25

sgi SEMAPHORES

25

IMP SEMAPHORES

25

DELTA SEMAPHORES

25

Ultrix SEMAPHORES

25

DGUX SEMAPHORES

25

DECOSF SEMAPHORES

16

Other UNIX

32




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




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




Этот параметр устанавливает число страниц из любой базы данных, которое может одновременно находиться в кеше. Если вы увеличиваете это значение. InterBase поместит больше страниц из каждой базы данных в кеш. По умолчанию SuperServer помещает в кеш 2048 страниц из каждой базы данных, a Classic - 75 страниц на каждое клиентское соединение. На 16-битовых версиях \Vindo\vs по умолчанию размер кеша 50 страниц.




Устанавливает приоритет для SuperServer на Windows/NT/2000. Значение 2 этого параметра устанавливает высокий приоритет (HIGH_PRIORITY_CLASS) серверному процессу InterBase - ibserver.exe. Все остальные значения будут устанавливать серверному процессу InterBase значения нормального приоритета (NORMAL_PRIORITY_CLASS). По умолчанию параметр имеет значение 1.




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




Устанавливает состояние блокировки 1 - "Истина", включает сортировку блокировок; 0 - "Ложь", и выключает режим сортировки блокировок. По умолчанию сортировка блокировок выключена.




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

Он может быть в диапазоне от 101 до 2048




Этот параметр определяет число секунд, в течение которых менеджер блокировок будет ожидать разрешения обнаруженного конфликта, а по истечении этого срока конфликт будет рассмотрен как потенциальный deadlock (взаимная

блокировка)




Для архитектуры SuperServer этот параметр не производит никакого действия В архитекторе Classic только один клиент одновременно может обращаться к таблице блокировок Доступ к таблице блокировок определяется мьютексом Запрос мьютекса может быть либо условным, когда задержка является ошибкой и запрос должен быть повторен, либо безусловным, когда запрос будет ожидать до тех пор, пока его не обслужат. Параметр LOCK_ACQUIRE_SPINS устанавливает число попыток выполнения условного запроса. По умолчанию - 0 (нуль).




Устанавливает время ожидания (тайм-аут) соединения. По умолчанию— 180 с.




Этот параметр определяет, насколько часто будут посылаться фиктивные запросы для проверки тоо, что клиент все еще работaei I lo умолчанию эю 60 с.




Этот параметр может использоваться в файле ibconfig несколько раз для того, чтобы определить местоположение временных файлов InterBase. Размер временных файлов задается в байтах. Если в ibconfig нет этого параметра, то InterBase проверяем следующие переменные окружения. INTERBASE_TMP. ТМР, и TEMP

Это г параметр достуен только для архитектуры SuperServer.




Этот параметр может быть использован в ibconfig несколько раз, для того чтобы назначить местоположение для библиотек пользовательских функций (UDF). Если этот параметр отсутствует, то InterBase проверяет каталоги 1NTERBASE/UDF и.ж $INTERBASE/intl. Этот параметр доступен только для варианта SuperServer.




Этот параметр устанавливает максимальный размер пакетов TCP, используемых при обмене между клиентом и сервером. Возможны значения от 1448 до 32768 байт.



Глоссарий


Active tables (активные таблицы). Концепция, применяемая в InterBase для реализации системных таблиц (см. статью System tables). Они активны в том смысле, что изменения в них запускают связанные с этими изменениями логические и физические действия. Например, добавление индекса и его сегментов в соответствующие системные таблицы вызывает распределение страниц, которые будут содержать индексные структуры.

Alternate key (альтернативный ключ). Это уникальный ключ (смотрите unique key), который не является первичным ключом (смотрите Primary key). Такой ключ может использоваться вместо первичного ключа и поэтому называется альтернативным.

BDE. Это аббревиатура от Borland Database Engine. Первоначально созданное как ядро для взаимодействия с базами данных DBASE и Paradox, BDE было расширено набором библиотек, известных как Borland SQL Links, и служит теперь промежуточным программным обеспечением для удаленного подключения к реляционным СУБД через библиотеки SQL Links. Таким образом, BDE поддерживает и навигационный noixoi и синтаксис SQL Имя "BDE" испотьзуется для loio, чюбы обозначить пакет, который содержит технологическое ядро (которое включает в себя инфраструктуру IDAPI (см. соответствующую статью) и общее ядро для осуществления запросов) плюс три IDAPI драйвера/ядра (для Paradox, dBase и текстовых форматов) плюс механизм ODBC Socket, который превращаем любой ODBC-драйвер в IDAPI-драйвер, доступный для использования в IDAPI-приложениях. Важно заметить, что так как BDE связывается с несколькими видами SQL-серверов с помощью SQL, то он не может распознать или воспользоваться преимуществами каждой функции в каждом конкретном реляционном сервере СУБД, поэтому поддержка некоторых функций InterBase в BDE ограничена или вовсе отсутствует.

BLOB. Сокращение для Binary Large Object. InterBase изобрел BLOB-поля несколько лет назад и компания "Боинг" воспользовалась их преимуществами для хранения звукозаписей в базе данных. Насколько я знаю, InterBase предложил первую реализацию BLOB на рынке реляционных СУБД. В InterBase BLOB могут хранить различные подтипы. Однако следует отметить, что изначально слово "BLOB" ничего не означало и, по-видимому, было заимствовано из какого-то кинофильма.


BLR: эта аббревиатура означает Binary Language Representation (двоичное представление языка). Внутри ядра сервера нет ни SQL, ни GDML, ни QUEL - нет реляционных языков, которые спроектированы, чтобы на них писали и читали люди Вместо этого запросы даны в двоичном представлении, которое является надмножеством известных нам реляционных языков Утилиты GPRE и QLI преобразуют SQL и GDML в BLR. Когда вы успешно компилируете хранимую процедуру или триггер, их скомпилированное представление сохраняется в формате BLR в BLOB-полях. Помимо этого, интерфейс DSQL преобразует все запросы к серверу в BLR. Вы можете воспользоваться утилитой командной строки isql для того, чтобы просмотреть BLR-представление триггеров, хранимых процедур, ограничений, значений по умолчанию и представлений, для этого необходимо выполнить команду SET BLOB ALL и затем выбрать соответствующие BLR-поля из системных таблиц (см. System tables).

Character set (набор символов). Языки программирования обычно используют не более двух типов наборов символов - ASCII и UNICODE. Первый набор ограничен 256 возможными символами (включая контрольные последовательности), тогда как второй набор содержит 65536 возможных символов. Проблема соиоиг в том что в базе данных необходимо хранить символы без чрезмерных затрат и в то же время необходимо корректно передавать эти символы клиентам, которые ожидают увидеть правильное изображение для каждого сохраненного кода, обозначающего символ. Не все кодовые таблицы используют одинаковые числовые значения для одних и тех символов, и к тому же некоторые алфавиты полностью отличаются друг от друга или содержат специальные символы. Таким образом, важно определить набор символов, соответствующий кодовой странице, которую будет использовать клиентское приложение. InterBase поддерживает как возможность задать набор символов для всей базы данных, так и возможность явно указать набор символов для каждого поля типа char или \aichdi Не существует набора символов, доступною везде внутри сервера. Если не указывать набор символов, то по умолчанию будет установлен набор символов NONE, который означает, что символы хранятся так, как они есть, и не предпринимается попыток преобразовать эти символы при передаче между клиентом и сервером.



Collation (сопоставление). Это понятие связано с операциями на данном наборе символов. Проще говоря, collation - это сравнение. Collation определяет, как инструкция SORT упорядочивает результаты выборки, как работает функция UPPER и как сравниваются поля в выражениях WHERE и HAVING в предложении SELECT

DDL. Это часть SQL, которая работает с определениями данных, т. е она управляет метаданными и потому именуется Data Definition Language (язык манипуляции данных)

DML. Это часть SQL, которая работает с данными и потому именуется Data Manipulation Language (язык манипуляции данных).

DPB. Это Database Parameter Buffer (буфер параметров базы данных), массив символов, используемый для передачи параметров и соответствующих им значений серверу при вызове функций InteiBase API. DPB включает следующие данные: первый байт, содержащий его версию, а затем идут наборы байтов для каждого параметра, причем каждый набор содержит сначала 1 байт, определяющий тип параметра, затем байт, содержащий длину данного набора после его типа, и потом собственно совокупность байт, которая несет ту или иную информацию в зависимости от типа параметра.

DSQL. Это аббревиатура для Dynamic SQL (динамический SQL). Когда вы читаете в документации: "доступно в DSQL", это означает, что инструкция доступна в программах, которые посылают на сервер SQL-команды (с параметрами или без), созданные во время выполнения. Этот способ работать с сервером является обычным для приложений на Delphi или ВСВ.

DSRI. Аббревиагчра дляDigital Slandaid Relational Inieiface (стандартный Цифровой реляционный интерфейс). Используется в Rdb/VMS, Rdb/ELN, а также в некоторых продуктах компании DEC

DYN. Это еще один язык с байтовым представлением для описания предложений, описывающих данные. Подсистема DSQL в InterBace передает разобранные DDL предложения компоненту, который запускает DYN, а затем Y-Valve (см. соотв. статью), который интерпретирует DYN и прямо изменяет активные системные таблицы (см. Active tables)



ESQL. Embedded SQL (встроенный SQL). Когда вы читаете в документации "доступно в ESQL", это означает, что инструкция доступна в приложениях, в которые встроены статические SQL-команды в формате BLR. См. статью GPRE для получения дополнительной информации.

FIB. Сокращение для Free InterBase Components (свободные компоненты для InterBase). Эти компоненты созданы Грегори Детцом (Greg Deatz), тем самым человеком, который создал библиотеки FreeUDFLib (Delphi/Windows) и FreeUDFLibC (C/Sun). FIB позволяет из программ на Delphi соединяться с InterBace напрямую, минуя BDE. FIB является основой для IBX (см. соотв. статью), и с тех пор, как появился IBX, FIB более не развивался.

FIBPlus. Сергей Бузаджи решил, что FIB достаточно хорош для построения на его основе нового пакета и включил туда множество новых функций, таких, как поддержка InteiBase 6, например. Кроме этого, изменения коснулись оптимизации работы с памятью и значительного увеличения скорости работы компонентов В отличие от FIB. FIBPlus также содержит ряд дополнительных компонентов и экспертов для Delphi и ВСВ, которые упрощают разработку при использовании FIBPlus. Пакет является коммерческим и в настоящий момент поддерживает все версии InterBase, начиная с 4-й, а также клоны InterBase: Firebird и Yaffil.

Foreign key (внешний ключ, FK). Это специальный не уникальный ключ (см. non-unique key), который используется для автоматического обеспечения ссылочной целостности (см. Referential integrity). В InterBase, когда вы создаете FK, соответствующий индекс создается автоматически (и всегда имеет порядок по возрастанию). Поле в мастер-таблице, на которое ссылается внешний ключ, должно иметь первичный ключ (Primary key) или уникальный ключ (Unique key).

Gbak, gdef, gfix, gpre, gsec, gstat, iblockpr and qli. Эти утилиты описаны в главе "Состав модулей InterBase" (ч. 4). Помимо этого, gpre and qli описаны ниже.

GDB. Это расширение, которое по общепринятому соглашению используется для баз данных InterBase. На самом деле InterBase может использовать любое расширение для базы данных. Это расширение служит напоминанием о тех днях, когда компания InterBase Corp называлась Groton Database Systems.



GDDL. Аббревиатура для Groton Data Definition Language. Был инструмент, который анализировал выражения на GDML и генерировал вызовы, которые определяли базы данных. GDML является эквивалентом для DDL в SQL.

GDML. Аббревиатура для Groton Data Manipulation Language. Этот реляционный язык был создан для использования людьми, как и SQL.GDML - первоначальный язык InterBase до сих пор поддерживается в утилите, называемой QLI. GDML является эквивалентом DML в SQL, но в то же время в него входят некоторые возможности DDL.

GPRE. Это препроцессор InterBase. В зависимости от платформы он поддерживает несколько языков и позволяет писать на них приложения, использующие встроенный SQL. GPRE на основе используемых в этих приложениях SQL-команд создает команды в BLR-формате. Чаще всего препроцессором поддерживается язык С, но в зависимости от платформы можно найти поддержку для языков COBOL и ADA. Когда вы читаете в документации: "доступно в GPRE", это означает, что описываемая инструкция может быть использована в программах со статическими SQL-командами. Эти программы предварительно обрабатываются препроцессором GPRE и затем передаются компилятору языка (например, C++) для создания исполняемого файла.

Hierarchical database (иерархическая база данных). Первый (изначальный) вид базы данных. Каждый объект (исключая корень) должен иметь одного и только одного родителя. Компания ШМ использовала этот вид базы данных до 1970 года.

IBX. Сокращение для InterBase Express. Начиная с Delphi 5 компания Borland решила выпускать два "экспресс"-продукта - ADO Express и ШХ. IBX представляет собой пакет компонентов, которые осуществляют прямое соединение с InterBase, используя его API, а не BDE. IBX был создан на основе FIB и был встроен в абстрактную иерархию наборов данных в VCL (Visual Component Library - основная библиотека в Delphi).

IВО. Сокращение для InterBase Objects. IBО - это альтернативный, созданный" "с нуля" коммерческий пакет для доступа к InterBase минуя BDE, через InterBase API. Его разработал Джейсон Вартон (Jason Wharton). ГВО - предназначенный для работы с базами данных пакет, основанный на оригинальных возможностях InterBase по управлению данными и транзакциями. Разработка ГВО основывается на модели клиент-сервер.



IDAPI. Сокращение для Integrated Database API (интегрированный прикладной программный интерфейс для работы с базами данных). IDAPI объединяет навигационный доступ к данных (ISAM) и ориентированный на запросы (SQL или QBE) доступ в модель согласованного курсора (consistent cursor model). IDAPI появилось в середине 1994 года и объединяет в себе работу, проделанную техническим комитетом IDAPI (включающим в себя компании Borland, IBM, Novell и Wordperfect). Первый вариант IDAPI был известен как BDE версии 2 (не существовало BDE версии 1, так как ранее она называлась ODA.Pl). Термин "IDAPI" используется не только для того, чтобы сослаться на часть BDE, реализующую API, но и для того, чтобы указать всю технологию целиком. Термин "IDAPI" вытеснил термин "ODAPI", который использовался в ранних реализациях этой технологии.

Identity key(идентифицирующий ключ). Хотя не существует строгого определения этого ключа, идентифицирующий ключ обычно представляет собой суррогатный ключ на основе поля типа INTEGER, которое автоматически заполняется сервером и может предполагать неявное создание лежащею в его основе индекса. Например, и Paradox и MS SqlServei имет специальный тип поля для этих целей InterBase явно не поддерживает такие типы полей, однако тот же самый результат может быть достигнут с помощью полей типа INTEGER, генератора и триггера (с большими усилиями - но и с большей гибкостью). Триггер типа BEFORE INSERT перед вставкой записи в таблицу вызывает функцию gen_id, которая получает следующее значение генератора. Приращение значения генератора может быть не равным единице, как в Paradox.

ISC: Сообщения об ошибках в InterBase начинаются с сочетания букв ISC, и поэтому люди часто спрашивают, что такое ISC. Это не более чем InterBase Software Corporation, наполовину независимая компания, принадлежавшая Borland. В 1998 году она была окончательно поглощена Borland. В конечном счете ISC возродилась в виде Open Source-проекта InterBase - Firebird.



Isolation level(ypoeenb изоляции). Это характеристика транзакции, которая определяет, как одна транзакция должна взаимодействовать с другими транзакциями в той же самой базе данных, в терминах видимости и блокировок. Обычно используются 3 уровня изоляции: Dirty Read (грязное чтение), Read Commited (подтвержденное чтение) и Repeatable Read (повторяющееся чтение). Первый режим является единственным уровнем изоляции в Paradox и поддерживается немногими реляционными СУБД. Второй уровень используется по умолчанию в почти всех реляционных серверах. Третий режим используется по умолчанию в InterBase, и реализован он таким образом, чтобы его использование не ставило сервер "на колени" (что не является фактом для других серверов). Помимо перечисленных уровней изоляции, InterBase предлагает еще более высокий уровень. известный как Repeatable Read with Stability (стабильное повторяющееся Чтение), который может использоваться для специальных и очень коротких транзакций. Благодаря возможности хранить множество версий записей InterBase также позволяет явно контролировать управление блокировками (избежать, ждать или выдать ошибку). Подобный контроль не имеет смысла на других "классических" серверах. (См. главу "Транзакции в InterBase. Параметры транзакций". - прим. авт.).

ISQL. Interactive SQL, утилита для интерактивного выполнения команд SQL. Когда вы читаете в документации: "доступно в ISQL", это означает, что описываемой инструкцией можно воспользоваться в инструменте пользователя для того, чтобы послать SQL-команды на сервер и увидеть результаты этих запросов.

JRD. Внутренняя часть (ядро) сервера InterBase. Это ядро обязано своим именем Джиму Старки (Jim Starkey), создателю JRD, которая является основой InterBase. JRD расшифровывается как Jim's Relational Database, что отличает ее от параллельно (и официально) разрабатывающейся части RDB в компании DEC.

Key. Несмотря на тот факт, что одной из характеристик реляционного множества является отсутствие повторяющихся элементов, теория множеств сама по себе не дает ответа, как избежать повторения В то же время в реляционной теории важно иметь возможность однозначно идентифицировать запись. Кроме того, хотя множество по определению не является упорядоченным, но упорядочение записей является способом избегать их дублирования, улучшать производительность и группировать кортежи. Существуют следующие типы ключей: unique (уникальный), primary (первичный), alternate (альтернативный), surrogate (суррогатный), identity (идентифицирующий), non-unique (неуникальный) и foreign (внешний).



LIBS. Это сокращение для Local InterBase Server (локальный InterBase- сервер). В прошлом, когда InterBase был закрытым, коммерческим продуктом, было два типа лицензий: локальная (позволяющая устанавливать соединения только с того же компьютера, на котором находится InterBase) и удаленная (позволяющая устанавливать соединения с удаленных компьютеров). Версии, которые поставлялись вместе с Delphi и Borland C++ Builder, были локальными и имели лицензии только для разработки. InterBase 6.0.1 не имеет ни лицензий, ни коммерческих ограничений, и потому понятие LIBS исчезло. Реализация LIBS никогда не отличалась с точки зрения кода от обычного InterBase, всегда использовался тот же самый исходный код, на который налагались ограничения, основывающиеся на лицензиях, которые можно было купить и установить.

MGA. Это аббревиатура для Multi Generational Architecture (архитектура множественных поколений). Это другое наименование многоверсионного ядра сервера, которое позволяет InterBase избегать блокирования и в то же время быстро восстанавливаться в случае отказа (поломки сервера, выключения питания и т. д.) без использования протокола транзакции (см. Transaction log).

Natural scan (натуральный перебор). В случае, если это возможно и имеет смысл, то сервер для поиска записей использует индекс, когда в SQL-предложении появляются части WHERE или GROUP BY. Когда сервер решает пройтись по таблице с первой по последнюю запись в том порядке, в котором они хранятся, то говорят, что ИСПОЛЬЗУЕТСЯ натуральный перебор. Заметьте, что иногда оптимизатор InterBase прав, когда он решает, что натуральный перебор быстрее, чем использование индекса.

Network database (сетевая база данных). Второй вид баз данных после иерархических. Каждый объект может иметь несколько указателей на другие объекты. Таким образом создается ячейка связей и отсюда происходит имя "сетевая".

Non-unique key (NVK, неуникальный ключ). Это ключ (смотрите статью key), который служит для того, чтобы идентифицировать диапазон записей, так как MIKI/KXYIBO ипиесй мог) i mieib ю /ice самое значение JIGIO ключа. Такой ключ предназначен для упорядочения записей и выполнения УСЛОВИЙ ссылочной целостности. В InterBase невозможно создать NUK как часть определения таблицы, вы должны непосредственно создать лежащий в основе NUK индекс. Исключением является случай, когда вы создаете внешний ключ (см. Foreign key) - в этом случае неуникальный ключ создается автоматически.



Null value (неопределенное значение). В действительности это должно называться Null state - неопределенное состояние. По существу NULL - это не значение. Он лишь указывает, что данному полю не было присвоено конкретного значения, поэтому его содержимое неопределенно. NULL - это не нуль и не пустая строка (нулевой длины), потому что все это определенные значения. Операции над NULL возвращают либо NULL, либо UNKNOWN и являются источником замешательства для начинающих разработчиков реляционных баз данных, тем более что проверка на NULL в запросе производится с использованием оператора IS NULL, а занесение в поле значения NULL - присвоением NULL нужному полю.

Object Oriented database (объектно-ориентированная база данных). Это новый тип баз данных, который все еще находится в разработке. В таких базаах данных действительно хранятся объекты. Эти базы данных не требуют нормализации. Схема базы данных отражает структуры данных в программе, и наоборот. Связи представлены указателями. Идея этих СУБД напоминает сетевые базы данных (см. статью network databases), но имеют более проработанную концепцию, потому что объекты выполняют некоторые задачи по управлению базы данных. Несмотря на множество усилий по расширению рынка для объектно-ориентированных серверов, они остаются в своей нише.

ODAPI. Это означает Open Database API (открытый прикладной интерфейс программирования баз данных). Этот проею начатся в 1990 году по инициативе Borland и впервые появился в СУБД Quattro Pro for Windows 1.0 в сентябре 1992 года. Это было начало проекта BDE.

ODBC. Сокращение для Open Database Connectivity. Это интерфейс уровня вызовов (call-level interface), который позволяет приложениям получать доступ к данным в любой базе данных, для которой существует ODBC-драйвер. Используя ODBC, возможно создавать приложения, которые работают с данными в любом базе данных, для которой конечный пользователь имеет ODBC-драйвер. Интерфейс ODBC предоставляет API, которое позволяет приложению не зависеть от сервера базы данных. В настоящее время InterBase v5 имеет ODBC-драйвер от компании Visigenic и более новый, поставляемый компанией Intersolv. К сожалению, ни один из них не предлагает полноценной функциональности, причем оба имеют ошибки и уже не разрабатываются. Новое поколение драйверов для InterBase 6 появилось в конце 2000 года - в том числе драйверы Gemini InterBase и Intersolve for InterBase 6.



ODS. Это аббревиатура для On-Disk Structure (буквально переводится как "структура на диске"). Это внутренняя структура базы данных InterBase. Для InterBase 4.0 ODS имело версию 8, для InterBase 4.2 - 8.2, для InterBase 5.x - 9 и для InterBase 6-10.

OLAP. Аббревиатура для On-Line Analytical Processing (оперативная аналитическая обработка). Объемы данных выросли настолько, что никто из людей, принимающих решения, не в состоянии просмотреть все необходимые данные. Менеджерам нужно определять направления, рассматривать исторические перспективы, пробовать различные сочетания типа "если что-то произойдет, то..." и т. д. Для того чтобы получать такие совокупные отчеты, серверы баз данных должны обладать достаточным быстродействием, чтобы прочитать многие мегабайты в пакетном режиме и в то же время клиенту вернуть результат за приемлемое время.

OLEDB. Это стандарт, разработанный компанией Microsoft, которая решила включить термин "OLE" в название некоторых своих технологий. Это низкоуровневая спецификация для доступа к реляционным и нереляционным данным. Предполагается, что эта технология будет более эффективной, чем ODBC, для реляционных баз данных. В 2001 году существовала реализация OLE DB только под Windows. Термин "ADO" обозначает надстройку над OLEDB.

OLTP. Это On-Line Transaction Processing (оперативная обработка транзакций) Это классическое требование к серверу баз данных клиенты должны совершать транзакции в реальном времени. В большинстве случаев вызываются короткие транзакции, в рамках которых выполняются определенные действия вроде обновления записей о покупателях. Задачи формирования отчетов более продолжительные, но они обычно не меняют данные.

Primary key (первичный ключ, или РК). Это уникальный ключ (см. Unique key), который используется для уникальной идентификации каждой записи в таблице и выполняет роль внешнего ключа (см. Foreign key) в зависимых таблицах. РК может содержать одно или больше полей. В InterBase во время создания первичного ключа автоматически создается соответствующий индекс - причем всегда в возрастающем порядке.



PSQL. Когда вы читаете в документации: "доступно в PSQL", это означает, что описываемая инструкция может быть использована в хранимых процедурах и триггерах на сервере. Отличия между процедурами и триггерами минимальны: процедуры не могут использовать специальные переменные OLD и NEW, в то время как триггеры не имеют параметров и не могут использовать предложение EXIT. Вы не можете явно вызывать триггеры из DML-выражений или из другого триггера или процедуры.

QLI. Это аббревиатура для Query Language Interpreter (интерпретатор языка запросов). Это интерактивный инструмент для извлечения данных (и манипуляции ими) из баз данных InterBase. QLI поддерживает значительные подмножества языков GDML, SQL и GDEF.

QUEL. Был такой академический реляционный язык, который предшествовал SQL. СУБД Ingres и Britten-Lee первоначально были QUEL-серверами.

RDB. Легко догадаться, что это аббревиатура для Relational Database (реляционных СУБД). Это была первая попытка компании DEC создать СУБД, используя такой подход. В то же время RDB стала начальным этапом создания InterBase, в котором теперь с префикса RDB$ начинаются все системные таблицы (см. System tables), for documentation purposes.

RDB$DB_KEY. Обычно упоминается как DB_KEY, это одна из недокументированных возможностей InterBase, которая может быть использована в динамическом SQL (см. DSQL) и в хранимых процедурах.

Referential integrity (ссылочная целостность). В теории баз данных это кон- цешция, которая по-простому может быть объяснена следующим образом: если А зависит от Б и производится попытка удалить или изменить Б таким образом, что какой-либо из изменяемых атрибутов нарушит зависимость А от Б, то в этом случае изменяемое действие должно быть либо отклонено, либо А должно быть изменено таким образом, чтобы синхронизироваться с изменениями в Б (т е чтобы зависимость не нарушилась); или если Б удаляется, то А также должно быть удалено или изменено таким образом, чтобы зависеть от чего-то другого. Ссылочная целостность реализована как автоматический механизм в сервере баз данных, который позволяет поддерживать ссылочную целостность (правила ссылочных ограничений) так, как это установлено пользователем с помощью настроек, определенных в стандарте SQL. Эти настройки распознаются и реализуются в каждом конкретном сервере СУБД.



Relational database (реляционная СУБД). Тип СУБД, который реализован с таких продуктах, как like InterBase, Oracle и Sybase. Основываясь на сильной теоретической базе, разработанной Коддом (Е. F. Codd) и К. Дэйтом (Chris Date), реляционная модель баз данных следует совокупности концепций в математике, в которой взаимосвязи представлены атрибутами "связей". Строго говоря, схема базы данных (структура ее объектов) должна проходить "нормализацию", в течение которой база данных приводится к "нормальным формам", именующимся "первой", "второй", "третьей", "Бойса - Кодда" (Boyce-Codd) и "пятой". На практике база данных, приведенная к 3-й нормальной форме, считается нормализованной. Одной из тем, связанных с нормализацией (которая до сих пор вызывает дискуссии), является представление и использование неопределенных значений (см. Null value).

Special system tables (специальные системные таблицы). Это две системные таблицы (см. System tables), которые находятся вне контекста транзакций. В отличие от остальных пользовательских и системных таблиц изменения в этих таблицах видны любой пользовательской транзакции без необходимости сделать подтверждение (commit) или откат (rollback). Это таблицы rdb$formats и rdb$pages. Вы можете прочитать в InterBase 6 Language Reference, что содержат данные таблицы. Компиляторы и серверы баз данных - это наиболее типичные случаи кода, которые зависят от своих собственных метаданных, используемых при описании данных и других метаданных, однако этот замкнутый круг должен быть где-то разорван, чтобы не попасть в ловушку "что было раньше: курица или яйцо".

SQL. Стандартный язык для управления реляционными СУБД. SQL - это сокращение для Structured Query Language. SQL является декларативным языком, потому что, будучи преобразованным в процедурные языки типа С или Pascal, SQL определяет вещи, которые должны быть выполнены сервером базы данных в терминах ожидаемых результатов, но не то, КАК они должны быть выполнены. Однако в SQL были добавлены функции для контроля над некоторыми особенностями сервера с помощью явного использования планов. Можно проследить причины добавления этих функций в работах компании ГВМ в 60-х годах.



[ Available in] ESQL, DSQL, PSQL and isql ([доступно в] ESQL, DSQL, PSQL and isq ). Если вы читаете руководства по InterBase, то можете увидеть фразы "доступно в SQL, DSQL и isql", когда объясняются какие-либо команды. В данном случае SQL означает Embedded SQL (ESQL), т. е. команды InterBase, которые можно писать внутри базового языка (С в данном случае), затем пропускать эти программы через препроцессор (GPRE), чтобы сгенерировать исходный код на С, который будет использоваться в вашем приложении. Это статические SQL- команды. DSQL означает динамический SQL (DSQL), т. е. команды SQL, которые можно создавать и отправлять InterBase во время выполнения программы. Такие команды не надо предварительно компилировать перед тем, как запустить приложение. И наконец, isql означает Interactive SQL и служит для обозначения инструментов, с помощью которых можно работать с InterBase, набирая команды и просматривая результаты их выполнения. Есть только один "родной" isql инструмент - инструмент командной строки isql.

SQL Links (связи с SQL). BDE может быть расширена дополнительными IDAPI SQL-драйверами, которые обеспечивают прозрачную возможность соединения с широко используемыми SQL-серверами без применения ODBC. Например, существуют SQL-драйвера для серверов InterBase, Oracle, Sybase, MS SQL и Informix. Эти драйверы называются SQL Links, потому что они связывают BDE с удаленными серверами базы данных.

Surrogate key (суррогатный ключ). Когда ни одно поле или комбинация полей в таблице не могут быть уникальными для каждой записи, то в качестве первичного ключа нужно использовать "искусственный" ключ (см. Key}. Обычно это или случайное сгенерированное значение (наподобие GUID), или постоянно возрастающее значение. Суррогатные ключи используются теми разработчиками, которые полагают, что первичные ключи (см. Primary key) должны основываться на генерируемых полях и не должны быть частью естественных атрибутов данных в моделируемой предметной области.



Sweeping. В InterBase это процесс, который собирает и освобождает старые и ненужные версии записей в базе данных. Этот процесс запускается при достижении порогового значения (известного как Sweeping Interval) и является следствием \nioi оиериюнной ар\шек1\ры InieiBase-сервера В других коммерческих СУБД uiKoio процесса не!. Процесс Sweeping может быть явно вызван с помощью у шли! администрирования InterBase. Sweeping - это сборка "мусора", выполняемая для каждой таблицы в базе данных.

System tables (системные таблицы). Реляционные СУБД самодостаточны. Это означает, что данные о структуре пользовательских таблиц также хранятся в таблицах. Эти таблицы, которые хранят данные о данных (метаданные или схему данных), создаются автоматически и называются системными таблицами. Они содержат информацию в том числе и о самих себе, что похоже на попытку выяснить, что был раньше - курица или яйцо. По соглашению названия системных.таблиц и их полей начинаются с префикса RDBS. Однако что действительно отличает системные объекты от остальных, так это особый флаг, распознаваемый InterBase'oM. который хранится в специальном поле в системных таблицах, - в этих таблицах хранится информация о различных объектах базы данных (таблицах, процедурах, генераторах и т. д.).

Transaction (транзакция). Логический набор действий, включающий в себя посылку одной или нескольких команд на сервер баз данных. Транзакция является атомарным действием: либо все действия в рамках транзакции выполняются полностью, либо полностью отменяются.

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



Transaction zero. Все пользовательские транзакции могут только видеть подтвержденные данные или сообщить об ошибке, если новейшая версия записи была создана в рамках другой транзакции, но еще не подтверждена. Но существует транзакция №0, которая запускается сервером. Эта транзакция запущена в особом состоянии предварительной завершенности, поэтому она может видеть все изменения, произведенные в рамках всех транзакций, и завершенных, и подтвержденных, и все версии записей. Это необходимо, например, для осуществления условий ссылочной целостности (смотрите referential integrity) и для обслуживания индексов Оак как индексы отлеживают все версии во всех нолях, на которые они распространяются).

UDF. Сокращение для User Defined Function (определенные пользователем функции). В InterBase имеется небольшое количество встроенных функций, которые определяются стандартом SQL. Для расширения функциональности разработчик может писать функции, вызываемые InterBase-сервером таким образом, что они могут использоваться как встроенные. Библиотека FreeUDFLib служит демонстрацией возможностей UDF, также предоставляя набор очень полезных и часто требующихся функций.

Unique key (уникальный ключ). Значение, которое идентифицирует каждую мнись u\upic/M в ыблице и оыичас! ее oi осыльныч записей Сдедившедьио, юлько одно значение уникальною ключа используется для каждой записи. Простейшим типом уникального ключа является поле, значения которого не могут повторяться, как идентификатор (табельный номер) работника внутри компании. Часто одно поле не удовлетворяет условиям уникальности, поэтому нужно использовать комбинацию полей. Если не существует подходящей для уникального ключа комбинации, то используют суррогатный ключ (см. Surrogate key). Когда объявляется уникальный ключ в InterBase, то автоматически создается соответствующий индекс, причем всегда в порядке возрастания.

Y-Valve. Внутри InterBase имеет несколько "серверов", и когда происходит подсоединение, то InterBase должен решить, какой из серверов использовать для конкретной базы данных. Алгоритм для определения нужного сервера называется Y-valve (по определению Стива Тентона (Steve Tendon)). Помимо прочего Y- Valve должен определить, использовать ли прямой доступ к базе данных (локальная база данных) или подсоединиться к удаленному InterBase-серверу (в InterBase Classic-архитектуры) и какую версию использовать для чтения данной ODS (в случае, когда один и тот же InterBase-сервер может читать разные версии ODS).

GUID (Global Unique Identifier) - глобальный уникальный идентификатор. Под GUID обычно понимается 128-битовое уникапьное значение, которое получается с помощью механизма генерации GUID на основе текущей даты и времени, а также системных номеров процессора и материнской платы. Механизм GUID позволяет получить огромное количество уникальных идентификаторов. Поломч GUID можем быть использован для уникальной идентификации различных объектов (например, СОМ-серверов).


LOCK HASH SLOTS


Параметр lock hash slots был удален из конфигурационного файла InteiBaseGx. no крайней мере в SuperSener под NT Однако исходный KOI д 1я того, чтобы прочитать и интерпретировать этот параметр, все еще существует.



Объяснение


Во всех версиях InterBase, исключая те, которые исполняются под управлением ОС VMS, конфликты распределения ресурсов разрешаются с помощью таблицы блокировок, которую ведет InterBase (только при употребление VMS InterBase пользуется его менеджером блокировок). В архитектуре Classic таблица блокировок находится в совместно используемой всеми серверными процессами памяти. В архитектуре SuperServer таблица блокировок является частью самого серверного процесса.

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


Семафоры используются для блокировок и сообщений о событиях. Теоретически InterBase должен использовать очень маленькое количество семафоров - 32 должно быть более чем достаточно.




В архитектуре Classic, когда один серверный процесс блокирует страницу базы данных или другой ресурс, который необходим второму процессу, второй процесс сигнализирует об этом первому. Чтобы сменить номер сигнала, используется данный параметр. Значение номера сигнала по умолчанию зависит от ОС:

NETWARE_386 BLOCKING_SIGNAL 101

WINDOWS_ONLY BLOCKING_SIGNAL 101 

All Others BLOCKING_SIGNAL SIGUSR1




Таблица событий (event table) хранится в отображенной (mapped) памяти. В архитектуре Classic место под эту таблицу выделяется Для каждого клиентского соединения. В архитектуре SuperServer одна таблица совместно используется всеми клиентами.




Кеш содержит страницы, которые были прочитаны из базы данных, а также вновь созданные страницы. Назначение кеша - уменьшить число чтений- записей страниц в базе данных путем удержания их в ОЗУ. чтобы они были "под рукой", пока подтверждение транзакции (commit) или другое событие не вынудит их быть записанными. Чем больше кеш, тем больше страниц сохранеются в памяти.

Минимальное значение кеша - 50 страниц, и максимальное - 65535. Эмпирический опыт показывает, что значения кеша более 10000 уменьшают производительность. По информации компании Borland, проблема снижения производительности при кеше размером более 10000 буферов ликвидирована в InterBase 6.5.

Вы можете увеличить размер кеша на уровне базы данных (в SuperServer) или на уровне соединения клиент-база данных путем использования параметра соединения, который можно использовать в ISQL, в Server Manager, в IBConsole.

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




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




На Windows-системах (и только Windows) клиент, запущенный на той же машине, что и сервер, может устанавливать соединение с сервером через область разделяемой памяти, а не через TCP/IP. Используйте этот параметр для управления размером этой области.

Память выделяется блоками по 1024 байта. Приемлемый диапазон значений лежит между 1-м и 16-м однокилобайтовым блоком, т. е. значение этого параметра может быть одним из следующих: 1024, 2048, 3072, 4096, 5120, 6144, 7165 8192.9216. 10240, 11264,12288, 13312, 14336, 15360 или 16384.




Ограничивая максимальный размер рабочей памяти, можно заставить InterBase "упасть замертво" раньше времени из-за недостатка памяти. Увеличивая минимальный размер рабочей памяти, вы можете заставить InterBase "захватывать" память тогда, когда она ему не нужна.




Сортировка блокировок достаточно проста, необходимо только узнать немного больше о блокировках. Когда соединение (клиент) запрашивает блокировку на объект, оно указывает в запросе определенный уровень блокировки. Типы блокировок приведены в следующей таблице:

Идентификатор типа блокировки

Английское наименование

Русский перевод наименования блокировки

#define LCK_none 0

Отсутствие блокировок

#define LCK_null 1

Existence

Блокировка существования объекта

#define LCK_SR 2

Shared Read

Совместное чтение

#define LCK_PR 3

Protected Read

Защищенное Чтение

#defme LCK_SW 4

Shared Write

Совместная запись

#define LCK_PW 5

Protected Write

Защищенная запись

#define LCK_EX 6

Exclusive

Эксклюзивная блокировка

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

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

none

null

Shared Read

Protected Read

Shared Write

Protected Write

Exclusive

попе

1

1

1

1

1

1

1

null

1

1

1

1

1

1

1

SR

1

1

1

1

1

1

0

PR

1

1

1

1

0

0

0

SW

1

1

1

0

1

0

0

PW

1

1

1

0

0

0

0

EX

1

1

0

0

0

0

0

Когда соединение желает заблокировать объект, оно подает запрос на блокировку, который определяет блокируемый объект и желаемый уровень блокировки.

Обычно если объект, который какое-то соединение желает заблокировать, уже блокирован другим соединением, то выстраивается очередь доступа, причем соединения, которые желают получить уровень блокировок ниже, чем тот, что уже наложен на объект, продвигаются вперед очереди. То есть если объект был заблокирован с уровнем Protected Read, то следующие соединения, которые запрашивают на этот объект блокировку Protected Read или ниже, передвинутся в начало очереди (точнее, пройдут без очереди), а соединения, которые запрашивают блокировки уровнем выше (например, Shared Write), будут "топтаться" в очереди. Если загрузка базы данных очень велика, такое поведение может привести к тому, что соединения, которые требуют высоких уровней блокировок, могут ждать неопределенно долго, потому что новые читающие соединения (которые запрашивают низкие уровни блокировки) будут постоянно прибывать и "лезть без очереди".




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

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

Что получается в итоге. Чем длиннее будут цепочки, подвешенные к каждому слоту, тем медленнее будет работать менеджер блокировок. В среднем каждая цепочка должна иметь не более 10 ячеек.




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




Условный запрос мьютекса повторяется определенное число раз, устанавливаемое параметром LOCK_ACQUIRE_SPINS, а затем превращается в безусловный запрос. Вроде бы это может принести пользу на машинах с несколькими процессорами (SMP). Что весьма сомнительно.




Чтобы распознать клиентов, которые некорректно разорвали соединение, включая тех Windows-клиентов, которые выключили свои компьютеры не закрыв приложения, InterBase посылает фиктивный пакет в течение времени ожидания (тай-маута) соединения. Если ответа на запрос нет в течение установленного времени, то InterBase разрывает соединение

Время ожидания также может быть указано в dpb (database parameter block). Соответствующий параметр имеет название isc_dpb_connect_timeout.




InterBase закрывает соединение, когда клиент перестает отвечать Для того чтобы определить, что клиент более не отвечает на запросы. InterBase ожидает некоторое время (определяемое параметром CONNECTION_TIMEOUT), а затем посылает фиктивный запрос для проверки соединения. Если при посылке возникает ошибка, то InterBase заключает, что клиент "мертв".

Вы можете настроить частоту, с которой посылаются фиктивные пакеты, либо с помощью этого конфигурационного параметра, либо на уровне соединения, установив в структуре dpb параметр isc_dpb_dumrny_packet_interval.




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




InterBase ищет в заданных им параметром каталогах библиотеки, которые он за! р\жает по ссылке. Этот параметр позволяет задать любое число каталогов, в которых InterBase будет искать библиотеки пользовательских функций (UDF) или определения наборов символов (character set definitions).




InterBase производит упреждающее чтение для клиента и может посылать несколько строк данных в одном пакете. Чем больше размер пакета, тем больше данных пересылается за один раз.



V4_EVENT_MEM_S1ZE 32768


V4_EVENT_MEM_S1ZE 32768

ANY_EVENT_MEM_SIZE 32768

Параметры в ibconfig


SERVER_WORKING_SIZE_MIN 0

SERVER_WORKING_SIZE_MAX 0

quoted directory


TMP_DIRECTORY <size> < quoted directory string>

TMP_DIRECTORY 20000 "/opt/InterBase/tmp"

quoted directory


EXTERNAL_FUNCTION_DIRECTORY < quoted directory string>

EXTERN AL_FUNCTION_DIRECTORY"/opt/InterBase/my_functions"

Показания к изменению параметра


Изменение размера таблицы блокировок может повлиять:

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

на число одновременных транзакций. Каждая транзакция имеет блокировку, которая ее идентифицирует. Блокировка используется для синхронизации транзакций, а также для того, чтобы распознать случаи, когда транзакция завершилась без подтверждения (commit) или отката (rollback).

на события. Механизм оповещения о событиях основывается на блокировках. Число событий и число клиентов, ожидающих эти события, влияют на размер таблицы блокировок.


Если в файле протокола InterBase InterBase.log вы видите сообщение об ошибке "semaphores are exhausted", то следует увеличить количество семафоров.




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

Может случиться так, что другой процесс в операционной системе использует тот же сигнал, что и InterBase. Тогда в случае, если этот процесс не сможет передать сигнал или аварийно завершиться при виде сигнала, который он не может обработать, то вы увидите, что либо InterBase-соединение "зависло", либо ошибки возникнут в другом процессе. В этом случае можно использовать параметр LOCK SIGNAL, чтобы выбрать другой сигнал.

Для систем с ОС Windows нет никакой необходимости изменять этот параметр.




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




Если вам кажется, что ваш InterBase сервер-работает слишком медленно и число страниц в кеше менее 10000, то увеличение размера кеша может улучшить производительность.




Я несколько предубеждена против этого параметра, но если хотите попробовать, то вперед.




Если у вас много памяти и локальных клиентов, то увеличение размеров области обмена (communications area) может улучшить производительность




Установка минимального размера рабочей памяти может устранить некоторые затраты на постепенное разрастание памяти сервера, т. е. выделить столько памяти, чтобы серверу не пришлось больше ее увеличивать и тратить на это какие-тo усилия Установка максимального размера рабочей памяти может удержать сервер захватывания всей доступной памяти на системах с малым ее количеством. Не запускайте InterBase SuperServer на системах с малым количеством памяти.




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




Первым признаком для изменения этого параметра должна быть общая низкая производительность системы с большим количеством пользователей и страниц в кеше Запустите инструмент iblockpr из директории %INTERBASE%\Bin для печати блокировок Если средняя длина более 10, увеличьте число этого параметра Для начала умножьте среднюю длину цепочек на число слотов и поделите на 9, а затем возьмите простое целое число, большее полученного значения (но меньшее 2048). Если вы производите подобную настройку на SuperServer, то необходимо также увеличить размер таблицы блокировок.




Deadlock очень редко встречаются в InterBase Обычная ошибка deadlock, ошибка обновления (Update Conflict) не является тем deadlock, который обнаруживается менеджером блокировок. Представляет интерес запрограммировать действительный случай возникновения deadlock (когда А изменяет строк) 1, В изменяет строку 2, затем А пытается изменить строку 2, а В - строку 1, причем все это без подтверждения изменений - без commit), а затем поэкспериментировать с различными интервалами DEADLOCK_TIMEOUT, чтобы увидеть, как изменяется производительность.



Приложения


Глоссарий

Параметры конфигурационного файла InterBase

LOCK_MEM_SIZE

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

SEMAPHORE COUNT

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

LOCK SIGNAL

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

EVENT MEMORY SIZE

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

DATABASE CACHE SIZE

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

SERVER PRIORITY CLASS

Параметры в ibconfig

Действие

Объяснение

SERVER CLIENT MAPPING

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

SERVER WORKING SIZE

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

LOCK GRANT ORDER

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

LOCK HASH SLOTS

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

DEADLOCK TIMEOUT

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

LOCK ACQUIRE SPINS

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

CONNECTION TIMEOUT

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

DUMMY PACKET INTERVAL

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

Примечание

ТМР DIRECTORY

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

EXTERNAL FUNCTION DIRECTORY

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

TCP REMOTE BUFFER

Параметры в ibconfig

Действие

Объяснение

Показания к изменению параметра

Примечание



Есть непроверенная информация, что значение


Есть непроверенная информация, что значение 0 отключает посылку фиктивных пакетов.


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