Релиз IBProvider v3.52.1
Привет всем.
Выпущен новый релиз IBProvider v3.52.1.
В процессе борьбы с Windows 10 build 1803 пришлось осваивать «Perfomance Profiler» из состава Visual Studio 2017. Ну и, среди всего прочего, он сказал, что в провайдере «много» вызовов системной функции VariantChangeType.
Самое интересное то, что в провайдере уже было все подготовлено для решения этой «проблемы». Поэтому избавиться от этих избыточных вызовов было достаточно просто.
«Perfomance Profiler» успокоился, но в целом это не помогло решить проблему с 1803 — она как тупила, так и продолжила тупить. Поэтому была откачена назад до сборки 1709.
Тем не менее, думаю, это все равно очень полезное обновление. Чем меньше провайдер завязан на внешний мир, тем он надежнее.
И насчет надежности.
Новая версия, как обычно, проехала через нагрузочное тестирование с FB 3.0.4.33035.
При тестировании (в четыре потока) 64-битной релизной сборки провайдера без использования fbclient.dll мы видим такую картину:
[29.08.2018 23:11:21] [info] Provider DLL :lcpi.ibprovider_v3_vc15_w64_prof_i.dll [29.08.2018 23:11:21] [info] Provider Version:3.52.1.28912 [29.08.2018 23:11:21] [info] Server Name :Firebird [29.08.2018 23:11:21] [info] Server Version :3.0.4.33035 [29.08.2018 23:11:21] [info] Client Name :LCPI.IBProvider.RemoteFB [29.08.2018 23:11:21] [info] Client Version :3.52.1.28912 [29.08.2018 23:11:21] [info] Database ODS :12.0 [29.08.2018 23:11:21] [info] Database Dialect:3 ... [30.08.2018 17:50:47] [summary] [VIRTUAL MEMORY] [30.08.2018 17:50:47] [summary] [30.08.2018 17:50:47] [summary] PRIVATE BYTES : 13752 KB [13MB 440KB] [30.08.2018 17:50:47] [summary] PEAK PRIVATE BYTES : 12667804 KB [12GB 82MB 924KB] [30.08.2018 17:50:47] [summary] VIRTUAL SIZE : 153776 KB [150MB 176KB] [30.08.2018 17:50:47] [summary] PAGE FAULT COUNT : 121740954 [30.08.2018 17:50:47] [summary] [30.08.2018 17:50:47] [summary] - - - - - - - - - - - - - - - - - - - - - - [30.08.2018 17:50:47] [summary] [HANDLES] [30.08.2018 17:50:47] [summary] [30.08.2018 17:50:47] [summary] HANDLES : 155 [30.08.2018 17:50:47] [summary] [30.08.2018 17:50:47] [summary] - - - - - - - - - - - - - - - - - - - - - - [30.08.2018 17:50:47] [summary] TOTAL ERRORS : 0 [30.08.2018 17:50:47] [summary] TOTAL WARNINGS: 72 [30.08.2018 17:50:47] [summary] FULL PASSES : 1 [30.08.2018 17:50:47] [summary] GEN TESTS : 8295133
А через fbclient.dll, мы видим следующее:
[31.08.2018 12:10:21] [info] Provider DLL :lcpi.ibprovider_v3_vc15_w64_prof_i.dll [31.08.2018 12:10:21] [info] Provider Version:3.52.1.28912 [31.08.2018 12:10:21] [info] Server Name :Firebird [31.08.2018 12:10:21] [info] Server Version :3.0.4.33035 [31.08.2018 12:10:21] [info] Client Name :Firebird [31.08.2018 12:10:21] [info] Client Version :3.0.4.33035 [31.08.2018 12:10:21] [info] Database ODS :12.0 [31.08.2018 12:10:21] [info] Database Dialect:3 ... [01.09.2018 08:01:01] [summary] ------------------------------------------- [PROCESS INFORMATION] [01.09.2018 08:01:01] [summary] [VIRTUAL MEMORY] [01.09.2018 08:01:01] [summary] [01.09.2018 08:01:01] [summary] PRIVATE BYTES : 93112 KB [90MB 952KB] [01.09.2018 08:01:01] [summary] PEAK PRIVATE BYTES : 12721560 KB [12GB 135MB 408KB] [01.09.2018 08:01:01] [summary] VIRTUAL SIZE : 268916 KB [262MB 628KB] [01.09.2018 08:01:01] [summary] PAGE FAULT COUNT : 507309980 [01.09.2018 08:01:01] [summary] [01.09.2018 08:01:01] [summary] - - - - - - - - - - - - - - - - - - - - - - [01.09.2018 08:01:01] [summary] [HANDLES] [01.09.2018 08:01:01] [summary] [01.09.2018 08:01:01] [summary] HANDLES : 236 [01.09.2018 08:01:01] [summary] [01.09.2018 08:01:01] [summary] - - - - - - - - - - - - - - - - - - - - - - [01.09.2018 08:01:01] [summary] TOTAL ERRORS : 30 [01.09.2018 08:01:01] [summary] TOTAL WARNINGS: 47 [01.09.2018 08:01:01] [summary] FULL PASSES : 1 [01.09.2018 08:01:01] [summary] GEN TESTS : 8295133
Зависшая память это следствие непутевого дизайна инициализации/деинициализации fbclient.dll.
Ошибки — это баги взаимодействия fbclient с сервером, которые можно обойти.
Варнинги в обоих случаях — это баги сервера (по большому счету — протокола), которые уже не перепрыгнешь. Хотя, по идее, если в первом случае указать в строке подключения «remote:protocol_type=rpc», то проблем не будет. Но этот «rpc» был зарезан в FB3.0, поэтому это лекарство для него недоступно.
Этот маленький анализ посвящается всем, кто предпочитает «native» методы подключения к Firebird.