Вести с полей

Всех с последним днем января 🙂

Третий или четвертый день тупо смотрю на арифметику первого диалекта FB3.

Чудная она.

select 1+12345678 from dual

Сервер говорит, что колонка имеет тип INTEGER.

select cast(1+12345678 as varchar(64)) from dual

Сервер возвращает строку «12345679.00000000»

select BIN_AND(1+12345678,1) from dual

Сервер возвращает ошибку:

expression evaluation not supported
Arguments for BIN_AND must be integral types or NUMERIC/DECIMAL without scale


UPD. Ну и, наверное, чтобы не расслаблялся:

select cast(cast(1 as NUMERIC(1,0)) +cast(1 as NUMERIC(1,0)) as VARCHAR(64))  from dual

Сервер возвращает строку «2»

select cast(cast(1 as DECIMAL(1,0)) +cast(1 as DECIMAL(1,0)) as VARCHAR(64))  from dual

Сервер возвращает строку «2.000000000000000»

🙂

Вести с полей

Привет всем.

1. Вчера закончилось большое тестирование IBProvider v5.21.1. Ожидаемого чуда, в виде радикального ускорения работы, не случилось.

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

Ну хоть не упало, уже хорошо 🙂

Process ID: 31684

[TEST HEAP] Initialize ... OK

[18.11.2020 13:21:59] [ExecuteTests] CommandLine:

target\ibp_oledb_test_vc16_x64_Release.exe  /thread_count 10 /log_file_prefix fb30-fb.direct-ram_w64_d3 /log_dir ..\_log\all\ /new_db_location "inet4://localhost/d:\database\ram\" /cn_str "provider=LCPI.IBProvider.5.Private.vc16.release;location=inet4://localhost/d:\database\ram\ibp_test_fb30_d3_all.gdb;user id=GAMER;password=vermut;ctype=win1251;temp_file_dir=d:\database\ram\temp;dbclient_type=fb.direct;icu_library=icuuc52.dll;wchars_in_utf8_symbol=2;sql_cache__scope=db" /oledb_svc_cmp "LCPI.OleDbServices.DataInitManager.Local.1.Private.vc16.release" /test *

[18.11.2020 13:21:59] [ExecuteTests] Test Mask  : [*]

[18.11.2020 13:21:59] [info] Provider DLL    :lcpi.ibprovider-v5_vc16_w64_prof_i.dll
[18.11.2020 13:21:59] [info] Provider Version:5.21.1.36328
[18.11.2020 13:21:59] [info] Server Name     :Firebird
[18.11.2020 13:21:59] [info] Server Version  :3.0.7.33388
[18.11.2020 13:21:59] [info] Client Name     :LCPI.IBProvider.RemoteFB
[18.11.2020 13:21:59] [info] Client Version  :5.21.1.36328
[18.11.2020 13:21:59] [info] Database ODS    :12.0
[18.11.2020 13:21:59] [info] Database Dialect:3
[18.11.2020 13:21:59] [info] ConnectionString:

provider=LCPI.IBProvider.5.Private.vc16.release;location=inet4://localhost/d:\database\ram\ibp_test_fb30_d3_all.gdb;user id=GAMER;password=vermut;ctype=win1251;temp_file_dir=d:\database\ram\temp;dbclient_type=fb.direct;icu_library=icuuc52.dll;wchars_in_utf8_symbol=2;sql_cache__scope=db

[18.11.2020 13:21:59] [ExecuteTests] 
[18.11.2020 13:21:59] [ExecuteTests] Enter [cancel] for interrupt execution
[18.11.2020 13:21:59] [ExecuteTests] 
[18.11.2020 13:21:59] Creation 10 thread(s)...
.......
[23.12.2020 17:55:44] [summary] ------------------------------------------- [SUMMARY INFORMATION]
[23.12.2020 17:55:44] [summary] [TESTS]
[23.12.2020 17:55:44] [summary] EXECUTED      : 7055997
[23.12.2020 17:55:44] [summary] SUCCEEDED     : 7055933
[23.12.2020 17:55:44] [summary] FAILED        : 0
[23.12.2020 17:55:44] [summary] WITH WARNINGS : 64 [ 92 warning(s) ]
[23.12.2020 17:55:44] [summary] 
[23.12.2020 17:55:44] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.12.2020 17:55:44] [summary] [TEST TIMES]
[23.12.2020 17:55:44] [summary] REAL          : 303948587548855 [351 day(s)19:00:58.7548855]
[23.12.2020 17:55:44] [summary] USER          : 42100834062500 [48 day(s)17:28:03.4062500]
[23.12.2020 17:55:44] [summary] KERNEL        : 36739262187500 [42 day(s)12:32:06.2187500]
[23.12.2020 17:55:44] [summary] TOTAL         : 78840096250000 [91 day(s)06:00:09.6250000]
[23.12.2020 17:55:45] 
[23.12.2020 17:55:45] [TEST HEAP] Test heap is empty
[23.12.2020 17:55:45] [TEST HEAP] Validate ... OK
[23.12.2020 17:55:45] [TEST HEAP] Destroy ... OK
[23.12.2020 17:55:45] 
[23.12.2020 17:55:45] [summary] ------------------------------------------- [PROCESS INFORMATION]
[23.12.2020 17:55:45] [summary] [VIRTUAL MEMORY]
[23.12.2020 17:55:45] [summary] 
[23.12.2020 17:55:45] [summary] PRIVATE BYTES      : 22500 KB       [21MB 996KB]
[23.12.2020 17:55:45] [summary] PEAK PRIVATE BYTES : 13081912 KB    [12GB 487MB 312KB]
[23.12.2020 17:55:45] [summary] VIRTUAL SIZE       : 4620360 KB     [4GB 416MB 72KB]
[23.12.2020 17:55:45] [summary] PAGE FAULT COUNT   : 1612880775
[23.12.2020 17:55:45] [summary] 
[23.12.2020 17:55:45] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.12.2020 17:55:45] [summary] [HANDLES]
[23.12.2020 17:55:45] [summary] 
[23.12.2020 17:55:45] [summary] HANDLES            : 176
[23.12.2020 17:55:45] [summary] 
[23.12.2020 17:55:45] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.12.2020 17:55:45] [summary] TOTAL ERRORS  : 0
[23.12.2020 17:55:45] [summary] TOTAL WARNINGS: 92
[23.12.2020 17:55:45] [summary] FULL PASSES   : 1
[23.12.2020 17:55:45] [summary] GEN TESTS     : 8292754

2. Проект для поддержки EntityFrameworkCore пока все еще находится в неопределенном состоянии. Хотя сейчас больше положительных результатов, чем отрицательных 🙂

Вести с полей

Всех с последним днем осени.

Пошла восьмая неделя как откопал стюардесу DataProvider для EntityFrameworkCore.

Восстановил ранее написанный функционал и понял, что нужно все переделать.

Слабое утешение — ну хоть понял.

Вести с полей

Сегодня закончилось расширенное тестирование ранее выпущенного IBProvider v5.21 — за неделю проехало 10 проходов стандартного набора тестов.

Если не считать того, что 5 раз отвалилось подключение к FB3, вроде все нормально.

[28.10.2020 11:17:18] [summary] ------------------------------------------- [SUMMARY INFORMATION]
[28.10.2020 11:17:18] [summary] [TESTS]
[28.10.2020 11:17:18] [summary] EXECUTED      : 7028738
[28.10.2020 11:17:18] [summary] SUCCEEDED     : 7028243
[28.10.2020 11:17:18] [summary] FAILED        : 5 [ 5 error(s) ]
[28.10.2020 11:17:18] [summary] WITH WARNINGS : 490 [ 691 warning(s) ]
[28.10.2020 11:17:18] [summary] 
[28.10.2020 11:17:18] [summary] - - - - - - - - - - - - - - - - - - - - - -
[28.10.2020 11:17:18] [summary] [TEST TIMES]
[28.10.2020 11:17:18] [summary] REAL          : 48583296148547 [56 day(s)05:32:09.6148547]
[28.10.2020 11:17:18] [summary] USER          : 9518832187500 [11 day(s)00:24:43.2187500]
[28.10.2020 11:17:18] [summary] KERNEL        : 3961859062500 [4 day(s)14:03:05.9062500]
[28.10.2020 11:17:18] [summary] TOTAL         : 13480691250000 [15 day(s)14:27:49.1250000]
[28.10.2020 11:17:19] 
[28.10.2020 11:17:19] [TEST HEAP] Test heap is empty
[28.10.2020 11:17:19] [TEST HEAP] Validate ... OK
[28.10.2020 11:17:19] [TEST HEAP] Destroy ... OK
[28.10.2020 11:17:19] 
[28.10.2020 11:17:19] [summary] ------------------------------------------- [PROCESS INFORMATION]
[28.10.2020 11:17:19] [summary] [VIRTUAL MEMORY]
[28.10.2020 11:17:19] [summary] 
[28.10.2020 11:17:19] [summary] PRIVATE BYTES      : 41088 KB       [40MB 128KB]
[28.10.2020 11:17:19] [summary] PEAK PRIVATE BYTES : 13167704 KB    [12GB 571MB 88KB]
[28.10.2020 11:17:19] [summary] VIRTUAL SIZE       : 4749840 KB     [4GB 542MB 528KB]
[28.10.2020 11:17:19] [summary] PAGE FAULT COUNT   : 1244261117
[28.10.2020 11:17:19] [summary] 
[28.10.2020 11:17:19] [summary] - - - - - - - - - - - - - - - - - - - - - -
[28.10.2020 11:17:19] [summary] [HANDLES]
[28.10.2020 11:17:19] [summary] 
[28.10.2020 11:17:19] [summary] HANDLES            : 176
[28.10.2020 11:17:19] [summary] 
[28.10.2020 11:17:19] [summary] - - - - - - - - - - - - - - - - - - - - - -
[28.10.2020 11:17:19] [summary] TOTAL ERRORS  : 5
[28.10.2020 11:17:19] [summary] TOTAL WARNINGS: 691
[28.10.2020 11:17:19] [summary] FULL PASSES   : 10
[28.10.2020 11:17:19] [summary] GEN TESTS     : 82927510

В тестах использовался «глобальный» кэш SQL-запросов (sql_cache__scope=db).

Вести с полей

Привет всем.

Давным-давно, в октябре 98-го, я утром проснулся и подумал — «реляционная база данных должна быть организована по-другому». Время и несколько практических экспериментов показали, что да, идея рабочая. Более чем.

Вчера в процессе завершения новой подсистемы IBProvider, которая будет жить своей жизнью, пришлось доработать «подвал» модуля. А сегодня утром подумал — «чего я все хожу вокруг да около. По-хорошему, сервер объектов должен быть организован по-другому …».

Советы дня. Работа с Firebird 2.5 через связанный сервер.

Привет всем.

Вчера консультировал клиента, по поводу ряда проблем при работе с базой под FB2.5 через связанный сервер MSSQL. Используется встроенный клиент для Firebird (dbclient_type=fb.direct).

Проблема #1
Первый запрос к базе выполняется около 30 секунд.

Причина заключается в том, что MSSQL читает метаданные конструкций, используемых в запросе. По умолчанию IBProvider грузит и кэширует все данные для каждой схемы. То есть, MSSQL хочет получить данные по колонкам для одной таблицы. А провайдер, чтобы два раза не вставать, загружает данные о колонках всех таблиц и представлений (VIEW).

Это поведение можно изменить, указав в строке подключения «schema_cache=0».
(далее…)

Большое тестирование IBProvider [release]

Всем привет.

Вчера закончилось большое тестирование IBProvider v5.19 (vc16, x64, релизная сборка).

Потребовалось 32 дня.

Все тип-топ.
(далее…)

Большое тестирование IBProvider [debug]

Привет всем.

Сегодня доехало до конца большое тестирование IBProvider v5.19. Главное отличие от предыдущих забегов — прогонялись отладочные сборки провайдера и пула подключений.

7 миллионов тестов за 42.5 дня на 10-ядерном процессоре.

Все тип-топ.

Конфигурация

  • Intel 6950x [10C/20T], RAM 128GB
  • База и TEMP на RAM диске (SoftPerfect)
  • IBProvider v5.19.0.35449
  • LCPI OLE DB Services v1.16.0.924
  • LCPI Thread Pool v2.1.1.310
  • Firebird v3.0.6.33294 (SS, x64, Win)
  • Win10 x64 Pro 1909

Подключение к базе через собственного клиента для FB (dbclient_type=fb.direct) и TCP/IP (INET4). Без сжатия данных — не стал рисковать.

Каждый час запускалась принудительная сборка мусора.

(далее…)

SSIS в картинках. Динамическая строка подключения

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

Пришлось вникать в эту тему.

Оказалось все достаточно просто — нужно целиком формировать строку подключения. Причем её можно собирать из нескольких частей.

Думаю, следующая картинка все доходчиво объясняет:

У нас тут три переменных.

В переменных Variable_LOC и Variable_CN_STR1 заданы явные значения.

В переменной Variable_CN_STR значение формируется динамически через выражение:

location="+ @[User::Variable_LOC] +";"+@[User::Variable_CN_STR1]

В объекте подключения RAM.GAMER (в моем случае это OLE DB подключение) добавляем Expression определяющее свойство ConnectionString и указываем его значение как @[User::Variable_CN_STR].

Вести с полей

Всех с бодрым началом лета.

В IBProvider проведена очередная серия обновлений исходного кода. Устранил вещи, об которые начал спотыкаться мозг.

Основная суть — зачистка и переработка интерфейсов принимающих строковые значения. Если совсем просто, то вместо «const char*» и «const std::string&» теперь используется structure::t_const_str_box (аналог std::string_view).

В процессе переработки чуть было не наступил на грабли. Так что, в некоторых случаях, методы, принимающие указатели вида «const char*», пришлось сохранить.

После всех этих изменений, бинарник провайдера (x64) потяжелел приблизительно на 40KB. Это было ожидаемо, но все равно неприятно. Назад откатывать не стал — оптимизировал другие конструкции (-10KB).

Судя по результатам тестирования, функциональность не поломалась. Общая производительность тоже не просела. Даже стало немного быстрее:

Было

[16.05.2020 15:51:13] [summary] [TESTS]
[16.05.2020 15:51:13] [summary] EXECUTED      : 703686
[16.05.2020 15:51:13] [summary] SUCCEEDED     : 703630
[16.05.2020 15:51:13] [summary] FAILED        : 0
[16.05.2020 15:51:13] [summary] WITH WARNINGS : 56 [ 82 warning(s) ]
[16.05.2020 15:51:13] [summary] 
[16.05.2020 15:51:13] [summary] - - - - - - - - - - - - - - - - - - - - - -
[16.05.2020 15:51:13] [summary] [TEST TIMES]
[16.05.2020 15:51:13] [summary] REAL          : 4191257823522 [4 day(s)20:25:25.7823522]
[16.05.2020 15:51:13] [summary] USER          : 822947500000  [22:51:34.7500000]
[16.05.2020 15:51:13] [summary] KERNEL        : 337996562500  [09:23:19.6562500]
[16.05.2020 15:51:13] [summary] TOTAL         : 1160944062500 [1 day(s)08:14:54.4062500]

Стало

[02.06.2020 06:05:50] [summary] [TESTS]
[02.06.2020 06:05:50] [summary] EXECUTED      : 703686
[02.06.2020 06:05:50] [summary] SUCCEEDED     : 703628
[02.06.2020 06:05:50] [summary] FAILED        : 1 [ 2 error(s) ] <--- привет от FB.
[02.06.2020 06:05:50] [summary] WITH WARNINGS : 57 [ 75 warning(s) ]
[02.06.2020 06:05:50] [summary] 
[02.06.2020 06:05:50] [summary] - - - - - - - - - - - - - - - - - - - - - -
[02.06.2020 06:05:50] [summary] [TEST TIMES]
[02.06.2020 06:05:50] [summary] REAL          : 3935194767393 [4 day(s)13:18:39.4767393]
[02.06.2020 06:05:50] [summary] USER          : 800231406250  [22:13:43.1406250]
[02.06.2020 06:05:50] [summary] KERNEL        : 325012343750  [09:01:41.2343750]
[02.06.2020 06:05:50] [summary] TOTAL         : 1125243750000 [1 day(s)07:15:24.3750000]

Все это ускорение, конечно, условно. Но все равно приятно.

Если все сложится благоприятно (основное тестирование закончится только завтра), то новое обновление провайдера (v5.18) будет выложено на этой неделе.