Имя: Пароль:
1C
1C 7.7
v7: долго формируется запрос
0 tesei
 
21.03.25
09:39
Добрый день, коллеги. Файловая база, размер около 10 Гб, переехала на новый, более мощный сервер. Ряд операций, связанных с запросами, стали тормозить. Например, такой простой запрос выполняется 50 секунд:

	ТекстЗапроса = 
	|Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
	|Группировка Номенклатура без групп;
	|Условие(Номенклатура в ВыбНоменклатура);
	|";


Кол-во номенклатуры - около 20 тыс. позиций. Выбрана группа из 5 элементов. Попробую замерить на другом сервере. В чем может быть причина?
1 Bigbro
 
21.03.25
07:14
причина может быть в том что при копировании у вас дбф файлы раздробились на 10 тысяч фрагментов и теперь их чтение занимает минуту.
или еще в чем то
10гб для файловой многовато уже.
не хотите на SQL?
2 tesei
 
21.03.25
07:41
(2) на SQL пробовали до меня, получалось медленнее. Придется попробовать самому.
3 tesei
 
21.03.25
07:42
Попробовал на другом сервере, так же долго.
4 Chai Nic
 
21.03.25
08:02
Переходите на прямые запросы. Или на простые выборки. И то и другое лучше чем "черные запросы" 1с.
5 Chai Nic
 
21.03.25
08:13
Семерочные запросы работают с ооочень плотным использованием каталога временных файлов, причем, по непонятной причине, с отключенным кэшированием и записи и чтения. То есть, буквально за каждой записью платформа лезет на диск, даже если эти записи находятся в одном секторе диска.
В качестве рабочих костылей можно использовать рамдиск для каталога временных файлов 1с, это реально ускоряет.
6 arsik
 
гуру
21.03.25
08:14
(0) Это локально или по сети? Может для начала исключить влияние сети?
7 Chai Nic
 
21.03.25
08:18
(6) Судя по "база переехала на более мощный сервер", она работает в терминале. Потому что по сети на мощность сервера пофиг.
8 Bigbro
 
21.03.25
08:22
в общем нужны подробности.
начиная от размера файла с таблицей номенклатуры
количества фрагментов в ФС для этого файла
очереди диска на сервере и т.д. и т.п.
выбНоменклатура - точно не пусто?
а то он весь справочник выбирает.
9 Chai Nic
 
21.03.25
08:27
(8) Это же семерка. Там всё элементарно. Размеры детские для современных серверов. Вся таблица в файловом кэше должна быть, и влияние фрагментации файлов базы можно исключить в принципе.

Единственное узкое место в дисковой подсистеме для локальной файловой семерки - это временные файлы, где кэширование отключается платформой. А у них может быть любая фрагментация, вот только повлиять на неё мы не сможем, потому что они создаются в процессе выполнения запроса.

Поэтому начать надо с создания рамдиска для временных файлов, и проверить, как оно.
10 mishaPH
 
21.03.25
08:34
(9) временные файлы на рамдиск где переназначить?
11 Chai Nic
 
21.03.25
08:35
(10) Опция командной строки /t
12 mishaPH
 
21.03.25
09:35
(11) аа точно. склероз. 20 лет назад рамдиски делали
13 Djelf
 
21.03.25
09:35
(0) Вопрос в стиле:
- Доктор, у меня болит!
- Что именно болит?
- Вы же доктор, Вы мне и скажите!

Более мощный это ничего не значит.
Более мощная видеокарта это более мощный сервер, но к 1С 7.7 отношения не имеет.
14 Chai Nic
 
21.03.25
09:03
(13) Анекдот напомнило про врача и ветеринара) "Блин, как у вас всё просто!"
15 Builder
 
21.03.25
09:31
(0) Переходите на SQL (оптимально 2008), там такие запросы, даже штатные черные, выполняются за секунды.
16 Chai Nic
 
21.03.25
09:33
(15) Не обобщайте, штатные запросы даже на sql-версии могут выполняться через dbf в каталоге временных файлов, неоднократно сталкивался..
17 mishaPH
 
21.03.25
09:34
(16) ++
18 mishaPH
 
21.03.25
09:35
(15) в 2008 нет только распухания темповой базы. все остальное по сути не вижу разницы с 2000. А так только прямые запросы делают погоду
19 Builder
 
21.03.25
09:52
(16) Могут, естественно.
Специально сделал такой-же запрос на большой скулевой базе и замерил через _GetPerformanceCounter()
Запрос занял 0.242 секунды первый раз и 0.056 второй раз.
20 tesei
 
21.03.25
09:54
(8) выбирал даже одну номенклатуру - всё равно долго считает, 26 секунд. Спасибо за советы, буду "читать и много думать".
21 arsik
 
гуру
21.03.25
10:01
(20) Так может у тебя журнал 1С раздулся просто. Или размер хранимых данных пользователя в папке пользователя. В свое время так интерфейс притормаживал. 1С каждый раз это все перечитывала.
Посмотри размер SYSLOG
А так же попробуй папку юзера очистить
22 Наивный
 
21.03.25
10:02
Забавно, но именно в такой ситуации (когда номенклатура выросла до 20 тыщ), тоже стали все запросы подтормаживать и пришлось на прямые запросы переходить. Ничего в них страшного нет.
23 Наивный
 
21.03.25
10:03
Тормозит под всеми юзерами?
24 Bigbro
 
21.03.25
10:05
ну и да. надо грохнуть индексы и переиндексацию сделать.
вдруг вся проблема только в этом))
25 Наивный
 
21.03.25
10:09
(24) А лучше выгрузку-загрузку + проверить, прописаны ли каталоги пользователей
26 tesei
 
21.03.25
10:25
Рам диск есть на два гига. Буду думать за прямые запросы и скуль.
27 arsik
 
гуру
21.03.25
10:31
(25) Без патча такую базу не выгрузить - загрузить и в скуль не перекинуть
28 tesei
 
21.03.25
10:28
Сислог 150 мб, папки юзеров 40 мб на всех.
29 tesei
 
21.03.25
10:29
(23) Да, тормозит под всеми.
30 Bigbro
 
21.03.25
10:36
а в монопольном режиме?
путь к базе как прописан через сетевой ресурс или как локальный диск?
если через \\myserver\mybase - перепишите на локальный диск попробуйте
помню была проблема с доменным сервером из за чего тормоза начинались в совершенно неожиданных местах из за того что днс имена корректно не разрешались.
31 tesei
 
21.03.25
10:38
Таблица 320 Мб, индекс 40 Мб.
32 Guk
 
21.03.25
10:42
на скуле проверил. Номенклатуры 35 тыщ.
без фильтра, по всей номенклатуре, время выполнения запроса 12 сек, с фильтром по самой большой группе 1 сек.
размер файла мдф базы 350 Гб. прямые запросы не используются...
33 tesei
 
21.03.25
10:41
(30) Путь локальный, пробовал в копии монопольно. Склоняюсь к альтернативным запросам.
Ранее я переписал банк-клиент, поиск организации/контрагента  по ИНН, был запрос по части поля ИНН, с использованием ИЛИ. После изменения кода ускорение на два порядка.
34 tesei
 
21.03.25
10:44
Коллеги, спасибо за внимание к проблеме и ваши ответы, мне реально полегчало! :)
35 Guk
 
21.03.25
10:53
(34) тебе реально полегчает, когда базу на СКЛ переведешь. если бы у меня 10 Гб база лежала в дбф, у меня бы всегда очко сжатое было, иголку не воткнешь...
36 Builder
 
21.03.25
11:11
(35) Поддержу. Держать любые рабочие базы на dbf - так себе идея. Одна переиндексация чего стоит...
37 vsy
 
21.03.25
11:29
Ради интереса тоже попробовал на дбф базе где примерно 20 тыс элементов. Время запроса 0.353. Попробовал с помощью 1sqlite? время 0.002.
38 Ёпрст
 
21.03.25
14:14
(35) та ну, 10гб ни о чем, мы в среднем, держали 20 в дбф, переписанная комплексная, 2 плана счетов, задвоенные регистры/движения для упр/бух учета. Индексация, не помню, сколько занимала. Мин 10-15. Зато за ночь, можно было перепровести любой год. Чего снеговику и не снилось.
39 Ёпрст
 
21.03.25
14:15
И это, еще во времена отсутствия ссд дисков как класс
40 Ёпрст
 
21.03.25
14:17
А автору, достаточно переиндексировать одну табличку с номенклатурой и прибить cfg пльзователей
41 Djelf
 
21.03.25
14:28
Конфигурацию серверов автор не озучил, тесты скорости дисков не сделал.
Кто его знает, нам отсюда не видно, может у него база на софт-рейд 10 куда воткнуты wd green на 5400 (кажется).
42 Ёпрст
 
21.03.25
14:37
(41) 10-ка еще туда сюда, даже на таких "скоростных" дисках. Плохо, когда там пятачок (5рэйд)
43 Djelf
 
21.03.25
15:03
(42) Давно не использовал, подзабыл, да 5й, точно!
44 mishaPH
 
21.03.25
16:13
(35) перевод на скл базы.. ч когда то активно на этом подрабатывал. Тормоза появлялись там, где их на дбф не было. Уж обращение в цикле к реквизитам через . . . это вообще жесть причем в типовых. Типовые вообще при переводе на скл та еще хрень была.

Я к тому, что перевести автору на скль базу может дать тупо гораздо больше проблем.. Без перетряхивания кода.
45 Bigbro
 
21.03.25
17:16
мы же не знаем что там за конфиг. может самописка вообще.
так то у меня была 7ка на 70 гигов самописанная даже с черными запросами достаточно быстро работала.
46 Djelf
 
21.03.25
17:51
И при любых непонятных случаях, лучше использовать вот это: https://forum.dorex.pro/index.php?topic=130.0
Скорость дисков эта штука (разумеется) не измеряет, но техинфо выдает достаточно подробное.
47 Злопчинский
 
21.03.25
19:09
(33) а у меня на скуле условие типа как в ноль загоняло в аут.
Условие приходилось выбрасывать и фильтровать при обходе результата , получалось гораздо быстрее.
Смотрел запрос который в скуль еонвертировался - там для каждого элемента  из списка в условии генерился подзапрос. Трэш какой-то. Но я по скулю не спец. Поэтому и нафиг.
48 Злопчинский
 
21.03.25
19:11
Кстати может быть стоит попробовать вариант когда в ВыбГруппа - заменить на в СписокЭлементовГруппы
49 Злопчинский
 
21.03.25
19:14
Что хочу сказать: если в клюшках не костылить, а писать продуманно - все не так уж и страшно...
.
Тут вот коллега жалился что запрос по остаткам 30 секунд работает. Посмотрел. Ну ясен пень - на временные итоги по всей номенклатуре которой дохера тыщ, при том что фильтр на временные итоги стоит после получения итогов. Почему? Потому что надо писать аккуратно!!!
50 Злопчинский
 
21.03.25
19:15
... Поставил фильтр где надо - скорость увеличилась в 20 раз...
51 Злопчинский
 
21.03.25
19:16
И для дбфнвхх чорных запросов важна последовательность условий если их несколько.
52 Злопчинский
 
21.03.25
19:17
В (0) применение без упорядочивания даст прирост.
Без итогов даст прирост
53 Злопчинский
 
21.03.25
19:26
А вообще правильно - писать эти запросы в 1Sqlite
54 Guk
 
21.03.25
21:51
(47) >> а у меня на скуле условие типа как в ноль загоняло в аут.

да ладно гнать-то. десятки лет у всех работает, а у тебя аут...
55 Bigbro
 
21.03.25
21:22
кстати можно родителя через = проверить.
если одна группа может быстрее отработать.
В использовал когда список есть или иерархия.
56 arsik
 
гуру
21.03.25
21:26
(53) Прямые запросы не к скульным 1с базам бывают?
57 Guk
 
21.03.25
22:12
(56) ну как минимум с 1Спп, бывают...
58 Злоп
 
21.03.25
22:44
(56) вовсю
Можно через фокспрошный драйвер, можна на скулайт
Ошибка? Это не ошибка, это системная функция.