Имя: Пароль:
1C
 
v7: Максимальная производительность 1c7.7_SQL
0 _traktor_
 
28.04.24
17:28
Продолжение темы Оптимизировать процедуру 1c7.7_SQL

Обьем базы 9 гб
Сервер: SQL2008+Server2016(ram64Gb+RAID10)+LAN_1GB
Клиенты: i5+ram8Gb

Достаточно долгое формирование обработки, более 10 минут.

Итак, на текущий день оптимизация кода дала лишь 2-х кратное увеличение. Любые изменения алгоритма лишь дают малую часть % производительности. Собранная статистка выявила, что присутствует программное ограничение в 1С 7.7 SQL по одновременному доступу к серверу sql - 1024 запросов/с.
Если поднять две базы - то количество запросов на SQL server возрастает на 1024 запросов/с.

Согласно информации :
В случае работы 1С с форматом базы MS SQL все данные можно условно разделить на 2 логичные части: 1 - хранящиеся в базе данных MS SQL Server; 2 - хранящиеся в виде файлов, необходимых для работы конфигурации 1С.
С первым типом файлов 1С работает c MS SQL Server посредством ODBC, большая часть запросов, посылаемых 1С к серверу храниться в файле BkEnd.dll. Некоторые хранимые процедуры для работы с таблицами базы данных хранятся в файле 1Cv7.DDS (в каталоге программы).
Со вторым типом данных 1С работает непосредственно как с файлами. Эти файлы, хранятся в каталоге базы данных. Основные с них это: 1Cv7.MD - файл с метаданными, в нем храниться все то что можно посмотреть в Конфигураторе, 1Cv7.DDS - файл описание метаданных, в этом файле хранится описание таблиц базы данных MS SQL Server, а также хранимые процедуры, 1Cv7.DBA - файл с описанием настроек доступа к MS SQL Server-у, имя сервера, логин и пароль, usrdef\users.usr - файл описания пользователей 1С.

Предполагаю, что виной будет ограничения в программном коде библиотек: BkEnd.dll, sqlsrv32.dll, sqlsrv32.rll, odbcbcp.dll.

Какие будут идеи ?
1 Garykom
 
28.04.24
19:03
(0) 1. 1С++ и прямые запросы
2. Перенос логики (кода обработки) на СУБД в T-SQL (хранимки, триггеры, вьюхи)
2 Garykom
 
28.04.24
19:06
3 mishaPH
 
29.04.24
09:28
(0) что присутствует программное ограничение в 1С 7.7 SQL по одновременному доступу к серверу sql - 1024 запросов/с.

это одного клиента?
4 Djelf
 
29.04.24
14:48
(0) В первоначальном коде обработки, при выводе данных, есть обращения к реквизитам через точку. При оптимизации это было исправлено?
В запросе нужно вытягивать все возможные поля, чтобы избежать подобного.
Также нужно исключать поля запроса по которым нет Группировки. Это было сделано?
Сколько из 10 минут занимает запрос, а сколько вывод данных?

Зачем нужно делать 1024 запросов в секунду, если получение данных это всего один запрос?
Перепишите на прямой запрос, об этом по ссылке в (0) уже писали.
5 Злопчинский
 
29.04.24
15:42
9 Гб? Вы серьёзно? Что за конфига?
6 mishaPH
 
29.04.24
17:33
(5) это даже смешно. НО не важно какой объем базы, если данные выбираются криво то и на 1 гб можно устроить сюр.

у меня последние 10 лет объем баз от 30 до 670 гб только дата файлы
7 DrZombi
 
29.04.24
18:38
(0) 9Гб, это минимум. База весит 6Гб, это начало жизненного пути :)
8 Бертыш
 
29.04.24
21:41
(7) Это же про 7.7
9 mishaPH
 
29.04.24
22:13
(8) и что я тоже в (6) про нее
10 Злопчинский
 
29.04.24
22:13
(7) говорят что если оттуда удалить все драйверы всего ненужного, то и в 500 МБ уложиться можно.
11 Злопчинский
 
29.04.24
22:42
(0) Прикрепите "оптимизированный" код, чтобы было на что посмотреть.
12 Андрей_Андреич
 
naïve
30.04.24
12:01
(1) Если там еще нет прямых запросов - чем 20 с лишним лет программисты занимались?
13 Злопчинский
 
30.04.24
15:58
Если все ещё не летают на вертолётах, чем там...?
14 _traktor_
 
01.05.24
15:57
(3) Да. Так как логика в 1с 7.7 подразумевает, что все подключаются к одной SQL базе через одного пользователя SQL.
15 _traktor_
 
01.05.24
15:59
(4) До того, как был переписан и оптимизирован код - 1024 запроса к базе и 30 минут, сейчас так же 1024 запроса и 8 минут.
16 Djelf
 
01.05.24
16:01
(15) Поделись оптимизированным кодом, (11) об этом уже писал.
17 mishaPH
 
01.05.24
18:11
(14) так скуль ограничивает или 1с? и как 1с то может ограничить колво запросов пользователь то один но связи между клиентами нет?
18 _traktor_
 
14.05.24
21:35
(17) Тестирование производительности баз данных при помощи tSQLt и SQLQueryStress - проблем в SQL не выявили. Тестирование проводилось включая динамические тесты SQL сервера. В любых случаях, показатели были намного больше чем 1024 запросов/с в случаи запросов 1с.
19 Ёпрст
 
15.05.24
00:14
(18) код то будет показан ?
Или это обсуждение сферического коня в вакууме ?
20 MarySue
 
16.05.24
07:10
Нету у него доработанного кода, он не писатель.  Сейчас вот сочиняет телегу для руководства, почему это не может работать быстрее (виноват SQL Server, не тянет бедолага).
Автор, если не умеешь сам сделать на прямых запросах - оплати работу профессионала (благо они тут пока остались). Всё будет летать за считанные секунды, руководство даст премию.
21 Djelf
 
16.05.24
08:36
(20) Согласен, в (4) были заданы конкретные вопросы, ответ "1024 запросов в секунду".
Ни на один вопрос он не ответил, а так называемый ответ в (15) это повторение его вопроса из (0).
Т.е. причину он уже нашел и в ней уверен настолько, что ничего слушать не хочет.
Бесполезно переубеждать...
22 uno-group
 
16.05.24
08:50
Нахрена клиенты "i5+ram8Gb." Ставится 2 сервака 1 sql 1 терминальнальный и все летает на селеронах с 4 гигами. Что за запрос может его нафик не надо, часто выполнять и 5-10 минут для него нормальная скорость. Очень часто кривая постановка задачи и тупая ее реализация главный косяк.
23 uno-group
 
16.05.24
08:54
Возможно для решения задачи нужно просто создать дополнительный регистр, реквизит и т.п. пере провести базу или другим способом заполнить его и без изучения прямых запросов получить нужную скорость. + параллельно учить не спеша  прямые запросы.
24 АгентБезопасной Нацио
 
16.05.24
10:11
(23) резюмирую: им нужен программист.
25 Андрей_Андреич
 
naïve
16.05.24
10:15
(24) Правильное резюме: нет денег на программиста
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.