Производительность Firebird Classic Server vs SuperServer

Не понимаю насчет Firebird, есть классическое описание отличия Classic от Superserver: https://firebirdsql.org/manual/ru/qsg15-classic-or-super-ru.html Первый вроде как на процессах построен, второй на потоках.

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

Запускаем этот запрос параллельно три раза. На Classic общая нагрузка уходит в 30%, что логично. На SuperServer загрузка по прежнему 10% и загружено 1 логическое ядро полностью, остальные простаивают.

Почему так происходит? Ощущение, что SuperServer "однопоточный", но так ведь не должно быть по логике...

P.S. Эксперименты проводил на Firebird 2.5.9 под windows 10.


Ответы (1 шт):

Автор решения: user13964273

Да, суперсервер версии 2.5 использует только один поток на базу данных. Параметр CpuAffinityMask в файле конфигурации имеет умолчание 1 потому, что попытка использования нескольких ядер приводит к уменьшению производительности вследствие так называемого "thread bouncing" когда один поток перебрасывается операционной системой между ядрами с большими накладными расходами на этот процесс.

Настоящая многопоточность появилась в суперсервере только начиная с версии 3.

Текущая версия Firebird - 5.

→ Ссылка