Имя: Пароль:
1C
1C 7.7
v7: SQL Server тормозные отчеты
,
0 sivsoft
 
29.05.14
16:24
Доброго времени суток!
Поставил новую машину под отдельный SQL сервер для 1С77. Сервер не промышленный, а обычная машина Phenom X4 3.4Ghz/8Gb/500 WD Raptor + 1Tb/Windows 2008 R2/SQL Server 2008 R2. Сетка между клиентом и сервером 1Гбит, реально заливал файл - около 70Мб/с. Собственно говоря, для наших задач - 5 человек работает - больше и не надо.
Тестовую базу на 300Мб залил. И проверяю.
Отчеты регламентированные тормозят при обработке заполнения. Тот же отчет ЕСВ. В смысле намного медленнее, чем терминальный DBF вариант. Хотя те же расчеты итогов по датам в ЕСВ просто пролетают в отличие от файлового варианта. Но висит выполняется обработка очень долго, а на файловом очень быстро.
Загрузка в момент выполнения обработок - минимальна - 5-8% проца, памяти отъедает 200Мб sqlserver, винт и не жужжит - молчит вообще.
В чем может быть дело и как решить вопрос?
1 mikecool
 
29.05.14
16:25
никто в скуле кормить не обещал, в смысле быстрее
2 Fragster
 
гуру
29.05.14
16:26
клюшки не умеют работать с SQL, только если через 1с++
3 sivsoft
 
29.05.14
16:26
(1) Хоть также чтоб было. Чего так тормозят обработки?
4 ptiz
 
29.05.14
16:28
1С так работает. Смириться.
5 sivsoft
 
29.05.14
16:28
(2) через 1с++, который и подключен - обработки переписывать в прямые запросы? :(
6 sivsoft
 
29.05.14
16:30
Ну есть же хоть какие-то способы? Ведь многие ставили в свое время или даже сейчас стоит SQL Server для 1С77. И явно бухи после тормозных отчетов были недовольны. Должны же быть решения.
7 mikecool
 
29.05.14
16:31
(6) на бухов с.ать, поскольку база весом в 40 гиг в файле просто не существует(в основном)
8 sivsoft
 
29.05.14
16:32
Я просто не пойму во что оно упирается - на серваке все спокойно еле-еле загрузка. В сетку??? Дык что 70Мб/с не хватает? У меня на старом еле-еле вытягивает сейчас в файловом варианте 20-40Мб/сек. Сервак очень старый.
9 mikecool
 
29.05.14
16:32
(8) см (4)
10 sivsoft
 
29.05.14
16:32
(7) не понял. у меня база 300Мб - очень маленькая.
11 Fragster
 
гуру
29.05.14
16:32
(8) в 7.7 есть отладчик, а в нем - замер производительности
12 Попытка1С
 
29.05.14
16:33
Бухня конечно в этом плане сильно уступает Тису на регистрах, но ускорять тоже можно.
13 пипец
 
29.05.14
16:33
максимум для запросов поставить Запрос.ВключитьSQL(0) но в остальном скуль работает не быстрее, а работает !!! сравнительно дбф - только при больших объемах данных и большом количестве пользователей (впрочем когда дбф вообще перестает работать)
14 sivsoft
 
29.05.14
16:33
Может тогда терминал поставить на сервер с SQL? Очень не хотелось правда.
15 sivsoft
 
29.05.14
16:34
(12) У меня ПУБ... забыл сказать ;)
16 Ёпрст
 
29.05.14
16:34
(0) Зачем вам скуль при базе в 300 метров ?
17 Попытка1С
 
29.05.14
16:35
(15) Так один фиг, там где бух итоги, план счетов, тормоза сильнее чем в регистрах.
18 sivsoft
 
29.05.14
16:36
Выполнял просмотр карточки счета в оборотно-сальдовой ведомости. Даты пролетели быстро. Ну думаю, класс - ДБФ фуфло. А потом выполняется обработка - и висела минуты 3-5. :( :( :(
А в ДБФ - пока эти даты пройдут - тормоза. А обработка - сек 10 и все.
Что за маразм?
19 Попытка1С
 
29.05.14
16:36
Мне вот тоже надо бухню на скуль переводить, дфб уже утомил, то индекс слетает, то кто-то все блокирует не пойми кто. Но с другой стороны скорость работы выше..
20 sivsoft
 
29.05.14
16:37
(16) задолбали бухи своими индексированиями по 15 мин. и звонками.
21 Попытка1С
 
29.05.14
16:38
(20) Ты с сеткой разберись или терминал поставь. Скуль тебе тут при 5 человеках и 300 метров базы нафиг не надо.
22 Chai Nic
 
29.05.14
16:39
(17) Нормально шустро работают бухитоги в sql. Работали в 30-гиговой базе - проблем не было.
23 sivsoft
 
29.05.14
16:39
(21) сетка летает.
24 Chai Nic
 
29.05.14
16:40
На sql-сервере категорически не советую использовать стандартные "черные" запросы 1с. Даже выборка лучше, чем черный запрос. А еще лучше конечно прямой запрос 1c++.
25 sivsoft
 
29.05.14
16:41
(22) бухитоги. Я не знаю - просчет по итогам у меня летает, а в отчетах "выполняется обработка" висит существенно дольше, чем в дбф. Заметил в регламентированных при заполнении и Оборотно-Сальдовой ведомости, когда нужно открыть карточку счета.
26 sivsoft
 
29.05.14
16:42
(24) ну тогда переписывать каждый раз идиотские регламентированные отчеты, которые могут меняться бывает по несколько раз за неделю. Особенно, когда нужно сдавать отчетность.
27 Chai Nic
 
29.05.14
16:42
(25) Если 1с запускать локально на сервере - те же тормоза?
28 sivsoft
 
29.05.14
16:43
(27) не стоит там 1С-ы. Можно попробовать.
29 Chai Nic
 
29.05.14
16:45
(28) Нужно.. И кстати "черные запросы" как раз могут быть причиной провала в быстродействии, ибо они огромный объем данных могут тупо копировать на клиента через сеть в каталог временных файлов в виде dbf, а уж после их обрабатывать.
30 sivsoft
 
29.05.14
16:45
(29) а что такое "черные запросы" не врубаюсь?
31 trad
 
29.05.14
16:46
(26) прислушайся к (13). каждый раз эту доработку не очень сложно сделать
32 trad
 
29.05.14
16:46
(30) СоздатьОбъект("Запрос")
33 sivsoft
 
29.05.14
16:49
(31) Запрос.ВключитьSQL(0)
А точно так?
Я же выключаю запрос SQL. Вроде в теме одной здесь наоборот писали: Запрос.ВключитьSQL(1).
34 Ёпрст
 
29.05.14
16:55
(33) по умолчанию, он и так включен
35 catena
 
29.05.14
16:55
(33)Именно (0)
36 Ёпрст
 
29.05.14
16:56
+34 для неоптимально написанных чОрных запросов, это единственное решение проблемы, хоть и запрос в разы будет медленнее, но он хотя бы выполнится, в некоторых случаях..
37 sivsoft
 
29.05.14
17:02
(36) дык выполняются запросы. Просто очень долго висит обработка.
38 Ёпрст
 
29.05.14
17:03
(37) дык переписывай..
39 Попытка1С
 
29.05.14
17:08
(22) Что-то вериться с трудом.
40 trad
 
29.05.14
17:09
ну я не понимаю... что сложно проверить что ли?..
3 минуты надо потратить, давно бы уже сделал и отчитался
41 trad
 
29.05.14
17:10
(40) к (37)
42 floody
 
29.05.14
17:12
сам замерял, даже в SQL версии, если 1cv7s.exe запускать на том же сервере, где SQL (ну т.е. например терминал), ускорение 2-3 раза

про файловую всем известно, что в 10+++ раз
43 sivsoft
 
29.05.14
17:31
Поставил
Запрос.ВключитьSQL(0)
Запрос ясно, что имя переменной, которая используется в СоздатьОбъект("Запрос").

Все также осталось. Может дело не в этих запросах? Дело в том, что в той же оборотно-сальдовой ведомости нет никаких СоздатьОбъект("Запрос"). Там только БИ и запросы по ним. И висит в самом конце на последней дате, а потом сразу за ней обработка висит очень долго.

Может дело в БИ? Просто быстро пробегает
Расчет итогов(обороты) дата1-дата2
Вот я и подумал, что БИ летает.
44 Попытка1С
 
29.05.14
17:36
(43) "Может дело в БИ? Просто быстро пробегает"

Чего гадать, посмотри отладчиком замер производительности.
45 sivsoft
 
29.05.14
17:41
(44) никогда не пользовался. нашел его.
а что дальше делать? включить и все или еще точки останова надо ставить?
46 Chai Nic
 
29.05.14
17:43
(45) Просто включи.. запусти что тебе надо, а после выключи. Увидишь статистику.
47 Ёпрст
 
29.05.14
17:44
(45) поставить точку останова в при открытии, запустить отчет, при остановке,нажать на часы (включить замер производительности) нажать на продолжить.. потом отжать часы - смотреть на замер .. много думать
48 Chai Nic
 
29.05.14
17:45
(47) Точка останова не обязательна. Замер и без неё работает.
49 lift
 
29.05.14
17:45
Перепиши запросы на 1С++
50 sivsoft
 
29.05.14
17:46
ага понял вроде
ну выдал список - только что с ним делать?
например,
ЭтоСовмещение = ?(Сотр.ТипСотрудника.Получить(ДатаНач) = 0, 1, 0);
выполняется 10664 раза (ОГО!!!) занимает 30.7% времени. Ээээ... и как это поменять?
Или
спРасшифровка.Установить(стрКоманда,ССЧ(стрКоманда, ДатаЗначения, Фирма, ЗаМесяц, спРасшифровка));
выполняется 1 раз, но занимает 61.46% времени. И что дальше?

Это все НЕ ЗАПРОСЫ. И как я ЭТО перепишу?
51 Chai Nic
 
29.05.14
17:48
(50) Оёёёй... Это в типовой такой код? Чего в ОСВ делает такое условие.. какое дело бухгалтеру до совместителей?

Обращение к периодическим реквизитам - ТЯЖЕЛАЯ операция. Поменять легко - кэшировать в какой-то таблице уже полученные значения..
52 Chai Nic
 
29.05.14
17:49
А по поводу расшифровки.. смотри, что за функция ССЧ.
53 sivsoft
 
29.05.14
18:06
(51) кэшировать в таблице полученные значения
с этого места поподробней, пожалуйста :)
54 sivsoft
 
29.05.14
18:09
ССЧ

Функция ССЧ()      
    //Определяем кол-во постоянных сотрудников
    спКоманда.УдалитьВсе();
    спКоманда.Установить("Фирма",ВыбраннаяФирма);
    спКоманда.Установить("Дата",ДатаВМесяце);
    спКоманда.Установить("ССЧШтатРаботников",1);        
        спКоманда.Установить("КвоИнвалидов",0);
    спКоманда.Установить("Штатных",0);
        ОткрытьФормуМодально("Отчет",спКоманда,КаталогОтчета+"rpGlob.ert");
    ID_1012 = спКоманда.Получить("ССЧШтатРаботников");    
    ID_1121 = спКоманда.Получить("КвоИнвалидов");  
    ID_1130 = спКоманда.Получить("Штатных");    
    Возврат 0;
КонецФункции
55 sivsoft
 
29.05.14
18:11
спКоманда - это просто список значений
56 Ёпрст
 
29.05.14
18:14
(54) тихий ужас..
Заремь вообще установку расшифровки - один хрен, не пользуются :)))

А константы в скуле (да и не только) - вообще зло.
Можешь, закешировать их в ТЗ..
57 Ёпрст
 
29.05.14
18:14
и потом искать в этой тз..
58 Chai Nic
 
29.05.14
18:21
(57) Да вот только обычные ТЗ - неиндексированные, и поиск в них осуществляется последовательным перебором. Как и в списках значений. Лучше всего подключить 1с++ и использовать объект ИндексированнаяТаблица.
59 sivsoft
 
29.05.14
18:22
(56) ТЗ - это че? :)
60 Chai Nic
 
29.05.14
18:22
(59) ТаблицаЗначений
61 sivsoft
 
29.05.14
18:23
И все же странно, что на одном компе - работает быстрее файловой :)
Где узкое место?
62 sivsoft
 
29.05.14
18:23
вообщем примерно понял
но смущает (61)
63 Chai Nic
 
29.05.14
18:24
(61) Релизы платформы везде одинаковые?
64 Холст
 
29.05.14
18:27
(0) тему всю не читал
ты хочешь сказать, что SQL у тебя работает медленней чем немонопольно больше 1 юзера по сети в DBF ??
65 sivsoft
 
29.05.14
18:34
(61) Ээээ... где везде? Я пока один тестирую. Бухи отдыхают на старье. :)
(64) опять же за одного юзера и за отчеты говорил и за оборотно-сальдовую
66 floody
 
29.05.14
18:50
локально на сервере запусти 1с
67 Холст
 
29.05.14
20:16
(65) зачем ты одного юзера сравниваешь если в рабочем режиме у тебя 5юзеров ? на 1м юзере конечно будет летать в дбф
68 Мохнатое рыло
 
29.05.14
21:16
У Автора отчет не ОСВ, а ЕСВ (отчет по единому социальносу взносу).
69 КонецЦикла
 
29.05.14
21:37
Возможно написано так, что порождается множество мелких запросов (характерно для ЗиКов и прочей ереси). Могу оптимизировать, почта в личке :)
Пример из жизни - служебный справочник остатков стал заполняться вместо 62.4 сек. за 2.7 сек.
70 ptiz
 
29.05.14
22:17
Давно не касался 7.7, но когда сталкивался с отчетом по (тогда еще) ЕСН: именно он в SQL работал в десятки раз медленнее DBF.

Т.е. эффект вылез на базах, где учет зарплаты шел в самой бухии.
71 Chai Nic
 
29.05.14
22:51
(69) Именно. Там в цикле запрашиваются значение периодического реквизита на дату. Соптимизировать достаточно легко - сделать кэширование.
72 vcv
 
30.05.14
07:43
С SQL нужно аккуратно кодить. И смотреть по SQL-профайлеру, сколько запросов порождает твой код. Одна из проблем в том, что 1С по любому чиху дёргает хранимую процедуру в SQL и количество обращений к базе может быть просто огромным. Был у меня когда-то, например, один журнал, с дополнительными колонками, показывающими всякие пиктограммы в зависимости от реквизитов документов. Так он, при открытии, делал порядка восьми тысяч вызовов хранимых процедур на сервере. Притом совершенно зря делал, 1Ска обновляла содержимое реквизита документа при передаче его в качестве параметра в функцию.
Оказалось, что вызов МояФункция(Фирма) в колонке журнала вызывает обращение к справочнику фирм, а вызов МояФункция(Контекст) и в функции уже Фирма = Конт.Фирма; проходит без лишнего обращения к базе.
73 ADirks
 
30.05.14
08:29
(72) ещё есть прикольное слово ТекущийДокумент()
Как-то давно кто-то комплексную ускорял путём выкашивания из ГМ этой фигни. Проведение док-ов в полтора раза ускорил.

я тут недавно одним вместо
  БИ.ВыполнитьЗапрос(НачМесяца(ДатаДок), ТекущийДокумент(), ...)
написал
  БИ.ВыполнитьЗапрос(, ТекущийДокумент(), ...)
тоже раза в полтора.

Много такой фигни в типовых.
74 vcv
 
30.05.14
08:46
(73) Гм. На первый взгляд ничего криминального. Остановил отладчиком на строчке ТекДокумент = Конт.ТекущийДокумент(). Запустил SQL профайлер. Пошел в отладчике по шагам дальше. Ни Конт.ТекущийДокумент(), ни Конт.Вид() не вызвали обращения к SQL. По всей видимости 1Ска уже закешировала.
Эффективней будет, наверное, ликвидировать все обращения через две и более точки. Типа Конт.Контрагент.ОсновнойДоговор.
75 ADirks
 
30.05.14
11:10
(74) прикольно...  и правда нет обращений. Но ведь было :)  На каждый ТекущийДокумент() запрашивался _1sjourn,  а в комплексной там колонок дофигищща.

кстати, для выцеляния нужных фрагментов в профайлере можно делать так:
ЗапросСКЛ.ВыполнитьСкалярный("SELECT 'start'");
...
ЗапросСКЛ.ВыполнитьСкалярный("SELECT 'stop'");

и потом тупо поиск по 'start'
76 Попытка1С
 
30.05.14
11:43
(73) Если не указано значение НачДата, то обороты не считаются, только остатки.