Назад | Перейти на главную страницу

Firebird замедляет работу, пока доступны ресурсы

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

Наблюдая за замедлениями:

Тем не менее, похоже, что замедление связано с общей нагрузкой на сервер. Ночью, когда к базе данных не подключены пользователи / не запущены фоновые задания, тестовый запрос, используемый для справки, выполняется в течение 4-5 секунд, в то время как днем, когда все пользователи подключены к базе данных, для выполнения одного и того же справочного запроса требуется 60+ секунд до конца. Однако следует добавить, что замедление носит общий характер, нет конкретных запросов, которые выполняются медленнее, пока сервер находится под нагрузкой, все становится медленнее в конкретной базе данных Firebird. На сервере есть другие базы данных с очень низким количеством транзакций, выполняемых ежедневно, и эти другие базы данных не показывают никаких признаков замедления. Я даже создал копию живой базы данных, в которой наблюдается замедление, и выполнил один и тот же запрос как для исходной, так и для дублированной базы данных - оригинал действительно выполнял запрос медленно, а дубликат быстро. Единственная разница между оригиналом и дубликатом, которую я знаю, - это количество подключенных пользователей / одновременных транзакций.

Поскольку я не нашел явных причин всего этого в доступных ресурсах ОС, я попытался получить статистику из Firebird.

Наблюдения:

LOCK_HEADER BLOCK

    Version: 145, Active owner:      0, Length: 2097152, Used: 1335440
    Flags: 0x0001
    Enqs: 9993237, Converts:  93191, Rejects: 1417230, Blocks:      2
    Deadlock scans:      0, Deadlocks:      0, Scan interval:  10
    Acquires: 19972846, Acquire blocks:      0, Spin count:   0
    Mutex wait: 0.0%
    Hash slots: 1009, Hash lengths (min/avg/max):    0/   2/   7
    Remove node:      0, Insert queue:      0, Insert prior:      0
    Owners (38):    forward:  20824, backward: 872088
    Free owners (126):      forward: 973360, backward: 728016
    Free locks (370):       forward: 852200, backward: 195936
    Free requests (12425):  forward: 614608, backward: 1230536
    Lock Ordering: Enabled

Здесь я заметил, что поле «отклоняет» составляет ~ 14% от поля «enqs», но, к сожалению, я не знаю точного значения этих значений. Я думаю, что около 14% запросов на блокировку по какой-то причине отклоняются, но я могу ошибаться.

Итак, вопросы:

Я использую 32-битную версию Firebird (версия 2.5.2), и через месяц доступ к базе данных замедляется, когда инструмент nbackup начинает блокировать базу данных. После разблокировки базы данных с помощью nbackup запросы снова выполняются в обычном режиме. Мы используем nbackup -L / nbackup -N для копирования файла базы данных с помощью fastcopy.