Долгий обмен в базе РИБ

05.08.25

Интеграция - Перенос данных 1C

В своей практике я несколько раз сталкивался с базами РИБ на SQL, которые начинали тормозить при обмене — даже при передаче пустых пакетов. Все предложенные коллегами способы решения проблемы были испробованы, но не дали результата. Пару раз удавалось решить вопрос, создавая базу заново через копирование из центрального узла. Однако затем я столкнулся с ситуацией, когда начал тормозить уже сам центр. В итоге пришлось искать корень проблемы.

Для чистоты эксперимента я дождался нерабочего времени, когда сервер был полностью разгружен — никакие регламентные операции не выполнялись, — и запустил замер с помощью MS Profiler, отслеживая обмен пустыми пакетами.

К своему удивлению, обнаружил, что в проблемной базе обращения к таблице Config выполняются крайне медленно. Я начал сравнивать эту таблицу в нормальной и проблемной базе — оказалось, они различаются по размеру. Проблемная таблица была в 2 раза больше и содержала дубли. Дубли удалил, однако ситуация улучшилась лишь незначительно: значение Reads в Profiler сократилось вдвое, но оставалось аномально высоким, а обмен по-прежнему тормозил.

На втором этапе решил проверить индексы таблицы Config. Оказалось, что в проблемной базе вообще отсутствовал нужный индекс — вероятно, он «слетел» при появлении дублей, и механизмы 1С не смогли его автоматически восстановить. После создания индекса средствами SQL случилось долгожданное чудо: обмен стал занимать 3 секунды вместо 1 минуты!

А теперь — список запросов MS SQL, которые мне помогли:

1.  Поиск дублей в таблице Config

-- Универсальный запрос для двух вариантов таблицы Config
-- 1. Для простых конфигураций, без поля PartNo
-- 2. Для больших конфигураций, где поле PartNo присутствует

DECLARE @sql NVARCHAR(MAX);
DECLARE @hasPartNo BIT;

-- Проверяем наличие столбца PartNo
SELECT @hasPartNo = CASE 
    WHEN EXISTS (
        SELECT 1 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME = 'Config' AND COLUMN_NAME = 'PartNo'
    ) THEN 1 ELSE 0 END;

-- Собираем SQL с учётом наличия PartNo
SET @sql = '
SELECT 
    Creation, 
    FileName,
    Modified,
    Attributes,
    DataSize' + 
    CASE WHEN @hasPartNo = 1 THEN ', PartNo' ELSE '' END + ',
    COUNT(*) AS Duplicates
FROM dbo.Config
GROUP BY 
    Creation, 
    FileName,
    Modified,
    Attributes,
    DataSize' + 
    CASE WHEN @hasPartNo = 1 THEN ', PartNo' ELSE '' END + '
HAVING COUNT(*) > 1
ORDER BY Duplicates DESC;
';

-- Выполняем собранный SQL
EXEC sp_executesql @sql;

 

2. Проверка наличия индексов

SELECT 
    i.name AS IndexName,
    i.type_desc AS IndexType,
    c.name AS ColumnName,
    ic.key_ordinal

FROM sys.indexes AS i
JOIN sys.index_columns AS ic 
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id
JOIN sys.columns AS c 
    ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE i.object_id = OBJECT_ID('Config')
ORDER BY i.name, ic.key_ordinal;


3. Удаление дублей

DECLARE @sql NVARCHAR(MAX);
DECLARE @hasPartNo BIT;

-- Проверяем, есть ли поле PartNo в таблице Config
SELECT @hasPartNo = CASE 
    WHEN EXISTS (
        SELECT 1 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME = 'Config' AND COLUMN_NAME = 'PartNo'
    ) THEN 1 ELSE 0
END;

-- Собираем список полей для PARTITION BY
DECLARE @partitionBy NVARCHAR(MAX) = '
    Creation,
    FileName,
    Modified,
    Attributes,
    DataSize' + 
    CASE WHEN @hasPartNo = 1 THEN ', PartNo' ELSE '' END;

-- Собираем финальный запрос
SET @sql = '
WITH DuplicatesCTE AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY ' + @partitionBy + '
            ORDER BY (SELECT NULL)
        ) AS RowNum
    FROM dbo.Config
)
DELETE FROM DuplicatesCTE
WHERE RowNum > 1;
';

-- Выполняем
EXEC sp_executesql @sql;

 

4. Создаем индекс вручную

CREATE NONCLUSTERED INDEX IX_Config_FileName
ON Config(FileName);


p.s. Если кто знает, как можно проверить таблицу Config на дубли, удалить их и создать индекс средствами 1С, то буду очень признателен за информацию. 

Вступайте в нашу телеграмм-группу Инфостарт

РИБ таблица Config

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    190738    460    307    

460

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    189917    369    292    

426

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    162274    980    324    

483

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    85475    229    180    

166

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    35029    261    64    

199

Перенос данных 1C Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Перенос данных из УПП 1.3 в УНФ | из КА 1.1 в УНФ | из УТ 10.3 в УНФ | Перенос разработан в формате КД 2 (правила конвертации объектов) | Выгружаются все возможные виды документов, начальных остатков и вся нормативно-справочная информация | Есть фильтр по организациям при выгрузке данных | Есть несколько алгоритмов выгрузки начальных остатков товаров на выбор | Можно проверить перед покупкой на своем сервере!

58000 руб.

17.10.2019    45163    60    117    

62

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Перенос данных из БП 2 в БП 3 готовые правила конвертации данных (КД 2), сэкономьте свое время! | Выполнить переход с БП 2 на БП 3 в ситуациях, когда простым обновлением перейти не получается | Переносится вся справочная информация, документы за выбранный период, а также начальные остатки на выбранную дату (то есть можно еще и свертку базы сделать при переносе) | Есть фильтр по организациям при выгрузке данных | Перенос можно проверить перед покупкой прямо на вашем сервере! Обращайтесь за проверкой!

50600 руб.

21.05.2019    59028    81    134    

73

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

85400 руб.

05.10.2022    13964    16    8    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. paulwist 18.07.25 15:46 Сейчас в теме
1. Поиск дублей в таблице Config


Хм, ищите дубли одним запросом, а удаляете дубли полученные совсем другим запросом. Это так задумано?

3. Удаление дублей

ORDER BY (SELECT NULL)


А это зачем, какую цель преследовали :) ??
khakasia; +1 Ответить
2. khakasia 150 18.07.25 15:55 Сейчас в теме
Спасибо за замечания, исправил.
3. user2024331 22.07.25 11:59 Сейчас в теме
Один файл может быть разбит на несколько строк с разными PartNo, вы их удаляете получается?
Это не приведёт к нарушению целостности конфигурации?
khakasia; +1 Ответить
6. khakasia 150 04.08.25 16:08 Сейчас в теме
(3) Нет, файл не может быть разбит на несколько строк :) Таблица уникальная по данному полю.
Но на всякий случай перед удалением я сравнил проблемную таблицу с нормальной.
Третья неделя.. полёт нормальный. Всё работает замечательно. Все обновления конфигурации на узлах проходят нормально. И динамические в том числе.
Прикрепленные файлы:
11. khakasia 150 05.08.25 03:49 Сейчас в теме
(3) спасибо за комментарий, вы правы. Ошибку исправил.
4. roman72 404 25.07.25 10:27 Сейчас в теме
Что за ник "Какася"?
8. khakasia 150 04.08.25 16:15 Сейчас в теме
(4) :)))) неплохой вариант прочтения. Хакасия.ру -- наша компания, франч по Республике Хакасия.
5. zotovkv 01.08.25 15:07 Сейчас в теме
В 3м посте верно заметили, на больших конфигурациях есть достаточно много объектов, которые хранятся разбитыми на части - конфигурация поставщика, драйверы для различного оборудования, в запросе поиска дублей НАДО УЧИТЫВАТЬ PartNo.

Если взять запрос проверки/удаления дублей - вы сломаете базу(большие конфигурации).
7. khakasia 150 04.08.25 16:13 Сейчас в теме
(5) не совсем понимаю о каком PartNo идёт речь? Буду рад, если поясните :) В таблице Config нет такой колонки и таблица уникальна по полю FileName. Все дубли были полностью идентичны, включая время создания.
9. zotovkv 04.08.25 17:01 Сейчас в теме
(7) Вероятно у вас слишком маленькая конфигурация, не типовая или даже не знаю что ещё предположить.
На скрине первые 13 строк это вероятно конфигурация поставщика, разбитая на 13 частей, в поле ДатаСайз хранится размер ВСЕГО файла в байтах(Есть предположение, что имеется проверка на целостность, если после сборки в файл из частей размер файла не будет равен ДатаСайз - то что-нибудь сработает).
Недавно занимались анализом - у нас какой-то драйвер оборудования размером около 40Мбайт хранился в конфиге 4мя частями - по 10МБайт.
Вчера натыкался на статью, как из таблицы [Params] доставали описание метаданных, подменяли данные и возвращали обратно - имеется какая-то обработка для 1с сборки файлов из таблиц конфигурации и параметров.
Прикрепленные файлы:
khakasia; +1 Ответить
10. khakasia 150 05.08.25 03:37 Сейчас в теме
(9) Теперь всё ясно, благодарю за комментарий, очень познавательно. Сейчас всё исправим.
Для отправки сообщения требуется регистрация/авторизация