Всех с последним днем января 🙂
Третий или четвертый день тупо смотрю на арифметику первого диалекта 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»
🙂
Dmitry Kovalenko on 31 января, 2021 | 1 Comment
Привет всем.
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, которая будет жить своей жизнью, пришлось доработать «подвал» модуля. А сегодня утром подумал — «чего я все хожу вокруг да около. По-хорошему, сервер объектов должен быть организован по-другому …».
Привет всем.
Вчера консультировал клиента, по поводу ряда проблем при работе с базой под FB2.5 через связанный сервер MSSQL. Используется встроенный клиент для Firebird (dbclient_type=fb.direct).
Проблема #1
Первый запрос к базе выполняется около 30 секунд.
Причина заключается в том, что MSSQL читает метаданные конструкций, используемых в запросе. По умолчанию IBProvider грузит и кэширует все данные для каждой схемы. То есть, MSSQL хочет получить данные по колонкам для одной таблицы. А провайдер, чтобы два раза не вставать, загружает данные о колонках всех таблиц и представлений (VIEW).
Это поведение можно изменить, указав в строке подключения «schema_cache=0».
(далее…)
Всем привет.
Вчера закончилось большое тестирование IBProvider v5.19 (vc16, x64, релизная сборка).
Потребовалось 32 дня.
Все тип-топ.
(далее…)
Привет всем.
Сегодня доехало до конца большое тестирование 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 пакете.
Пришлось вникать в эту тему.
Оказалось все достаточно просто — нужно целиком формировать строку подключения. Причем её можно собирать из нескольких частей.
Думаю, следующая картинка все доходчиво объясняет:
У нас тут три переменных.
В переменных 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) будет выложено на этой неделе.