Вести с полей

Привет всем.

Сегодня завершились тесты нового, дополнительного RO-хранилища результирующих множеств.

[04.11.2010 09:00:18] [info] Provider DLL :_IBProvider_v3_vc9_w64_d.dll
[04.11.2010 09:00:18] [info] Provider Version:3.2.0.10979
[04.11.2010 09:00:18] [info] Server Name :Firebird
[04.11.2010 09:00:18] [info] Server Version :2.5.0.26089

[04.11.2010 09:00:22] Creation 8 thread(s)…

[05.11.2010 09:56:20] [summary] [TESTS]
[05.11.2010 09:56:20] [summary] TOTAL : 1068960
[05.11.2010 09:56:20] [summary] SUCCEEDED : 1068960
[05.11.2010 09:56:20] [summary] FAILED : 0
[05.11.2010 09:56:20] [summary] WITH WARNINGS : 0
[05.11.2010 09:56:20] [summary]
[05.11.2010 09:56:20] [summary] — — — — — — — — — — — — — — — — — — — — — —
[05.11.2010 09:56:20] [summary] [TEST TIMES]
[05.11.2010 09:56:20] [summary] REAL :6344920310000 [7 day(s)08:14:52.0310000]
[05.11.2010 09:56:20] [summary] USER :1381612092431 [1 day(s)14:22:41.2092431]
[05.11.2010 09:56:20] [summary] KERNEL :108180453460 [03:00:18.0453460]
[05.11.2010 09:56:20] [summary] TOTAL :1489792545891 [1 day(s)17:22:59.2545891]

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

  • Forward-Only.
  • Random-Access.
  • Random-Access с форсированной загрузкой блобов и массивов.

Напомню, что у FB/IB данные колонок с блобами и массивами загружаются отдельно от основного фетча рядов.

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

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

В первом файле хранится массив рядов множества. По аналогии с другими RO-хранилищами.

Во втором файле хранятся данные блобов и массивов. Для него применяются управляющие конструкции из RW-хранилищ.

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

Схема нового Read-Only Random-Access хранилища рядов

Да, насчет тестов. Все прошло гладко. Если не считать того, что через 9 часов после запуска от RAID10 отключился один из дисков (WD 1TB RE3) и система 6 часов перестраивала рейд на запасной диск. Вместо того, чтобы перестать дышать, я поступил с точностью до наоборот.


Существующие RO-хранилища тоже претерпели некоторые внутренние изменения.

Forward-Only стал отказоустойчивым. В том смысле что в ситуациях, приводящих к рассинхронизации провайдера с клиентом, хранилище переходит в состояние «отказа в обслуживании». Работоспособность восстанавливается после рестарта набора рядов (IRowset::RestartPosition). Я не думаю, что предыдущая реализация была сильно опасной. Как правило, клиенты не пытаются работать с Forward-Only курсорами после получения ошибки выборки рядов. Тем не менее…

Все хранилища рядов теперь используют страничный кэш из RW-множеств с 6-ти байтовыми идентификаторами страниц. В результате этой унификации, бинарник похудел на 30K. Эти килобайты, впрочем, быстро вернулись с кодом под новые фичи 🙂


Сегодня с удивлением узнал, что VC8 поддерживает ключик /MP. Ну ёлки …

Leave a Comment