Эта страница переведена машинным переводом. Читайте английский оригинал. English

← Функции сервера HQbird

HQbird может кэшировать BLOB во временном пространстве, чтобы ускорить операции с BLOB (на 15%–200% быстрее, чем в стандартном Firebird), и предотвратить рост файла базы данных в случае ошибочных операций с BLOB.

HQbird использует дополнительный параметр firebird.conf BlobTempSpace для управления этой функцией. Опция кэширования может быть:

  • 0 — отключена,
  • 1 — включена для PSQL (по умолчанию),
  • 2 — включена для всех операций с BLOB.

Результат вкратце

В приведённом ниже тесте одна и та же нагрузка выполнялась примерно в 12 раз быстрее при включённом BlobTempSpace:

Временное хранилище BlobTempSpace выкл. BlobTempSpace вкл. Ускорение
RAM-диск (48 ГБ) 108,2 с 9,0 с 12,0×
SSD (Samsung 870 QVO, 1 ТБ) 106,0 с 9,1 с 11,7×

Общее время = EXECUTE BLOCK + COMMIT, среднее по двум запускам.

Сравнение общего времени с BlobTempSpace

Куда уходит время

Выигрыш достигается за счёт двух мест:

  • EXECUTE BLOCK быстрее в 2,3–2,4 раза. Конкатенация BLOB выполняется во временном пространстве, а не в страницах базы данных.
  • COMMIT почти мгновенный. Без кэша коммит записывает около 1,1 млн страниц в базу данных (81–88 с). С кэшем он записывает 3 021 страницу (15–16 мс).
Время EXECUTE BLOCK и COMMIT с BlobTempSpace
Временное хранилище BlobTempSpace EXECUTE BLOCK COMMIT Записи страниц (block + commit)
RAM-диск выкл. 20,9 с 87,4 с 1 117 485
RAM-диск вкл. 9,0 с 0,015 с 3 057
SSD выкл. 21,8 с 84,2 с 1 117 485
SSD вкл. 9,1 с 0,016 с 3 057

При включённом BlobTempSpace база данных получает примерно в 365 раз меньше записей страниц. Чтения (fetches) и отметки (marks) остаются почти такими же (5,15 млн чтений, 3,45 млн отметок), то есть база данных выполняет ту же логическую работу; исчезают только физические записи.

Настройка теста

  • Нагрузка: один EXECUTE BLOCK, который строит BLOB путём конкатенации (750 строк), затем COMMIT. Каждый случай выполнялся дважды (run-1, run-2).
  • Временное хранилище (FIREBIRD_TMP):
    • RAM-диск: WinRamTech x64 (бывш. Qsoft), 48 ГБ.
    • SSD: Samsung 870 QVO, 1 ТБ, с TempCacheLimit = 48G (RAM-диск отключён).
  • Измерение: статистика трассировки Firebird (затраченное время, чтения, записи, чтения (fetches), отметки (marks)).
  • При выключенном BlobTempSpace итоговый размер базы данных составил 8 839 МБ.

Сырые результаты

Временное хранилище BlobTempSpace Запуск Действие Затрачено, мс Записи Чтения Отметки
RAM-диск выкл. 1 EXECUTE BLOCK 20 104 1 127 5 154 541 3 450 817
RAM-диск выкл. 1 COMMIT 87 531 1 116 358 1 1
RAM-диск выкл. 2 EXECUTE BLOCK 21 621 1 127 5 154 541 3 450 817
RAM-диск выкл. 2 COMMIT 87 229 1 116 358 1 1
RAM-диск вкл. 1 EXECUTE BLOCK 9 039 36 5 153 997 3 450 273
RAM-диск вкл. 1 COMMIT 15 3 021 1 1
RAM-диск вкл. 2 EXECUTE BLOCK 8 976 36 5 153 997 3 450 273
RAM-диск вкл. 2 COMMIT 15 3 021 1 1
SSD выкл. 1 EXECUTE BLOCK 21 831 1 127 5 154 541 3 450 817
SSD выкл. 1 COMMIT 86 726 1 116 358 1 1
SSD выкл. 2 EXECUTE BLOCK 21 834 1 127 5 154 541 3 450 817
SSD выкл. 2 COMMIT 81 614 1 116 358 1 1
SSD вкл. 1 EXECUTE BLOCK 9 084 36 5 153 997 3 450 273
SSD вкл. 1 COMMIT 16 3 021 1 1
SSD вкл. 2 EXECUTE BLOCK 9 074 36 5 153 997 3 450 273
SSD вкл. 2 COMMIT 16 3 021 1 1

Чтения во всех запусках были равны 0.

Примечания

  • RAM-диск и SSD дают почти одинаковый результат. Тип временного хранилища не является узким местом для этой нагрузки: выигрыш даёт сам кэш.
  • Ускорение зависит от нагрузки. Тяжёлая конкатенация BLOB в PSQL, как в этом тесте, выигрывает больше всего. Типичные операции с BLOB выигрывают на 15%–200%.