|
Медленно отрабатывает обработка на клиент серверной базе | ☑ | ||
---|---|---|---|---|
0
ultrannge89
16.10.14
✎
07:29
|
В общем обработка довольно простая, для изменения реквизитов в справочниках, нахожу документы использующие эти справочники и распровожу их, меняю реквизит у справочника и снова провожу... На файловой базе отрабатывает 200 документов за 5 секунд, на серверной за 3-5 минут, при том что на серверной кроме меня в базе никого нет, конечно сервак не зверь, но и думаю проблема не в железе... В чем может быть косяк?
|
|||
1
Sasha_Rapira
16.10.14
✎
07:32
|
1) Файловый режим при 1 пользователе, работает быстрее клиент-северного режима при 1 пользователе
2) см. регл. и фоновые задачи |
|||
2
Мимохожий Однако
16.10.14
✎
07:34
|
Делай замеры - узнаешь, где тормоза. Обычно и косяк там же, где большие интервалы.
|
|||
3
ultrannge89
16.10.14
✎
07:34
|
Да там база 1Гб, регламентированных задач нет, обмены в ручную... Я понимаю что серверная медленнее, но не в 30 раз же?
|
|||
4
Sasha_Rapira
16.10.14
✎
07:36
|
(3) между файловое и клиент-сервер всё одинаково? Пользователь тот-же самый? Как вариант замер производительности покажет долгое место
|
|||
5
ultrannge89
16.10.14
✎
07:37
|
Вот код:
ИсходноеЗначениеСпр = Справочники.бит_стр_ТипДоговораРеализацииНедвижимости.НайтиПоНаименованию("Договор инвестирования (ДДУ)"); КонечноеЗначениеСпр = Справочники.бит_стр_ТипДоговораРеализацииНедвижимости.НайтиПоНаименованию("Договор инвестирования"); Контрагенты = ЭлементыФормы.СписокКонтрагентов.Значение; Если Контрагенты.Количество() > 0 Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | бит_стр_ДоговорИнвестированияДолевогоУчастия.Ссылка КАК ДоговорИнвестирования, | бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации |ИЗ | Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия |ГДЕ | бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен = ИСТИНА | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент В(&Контрагенты) | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости = &ИсходноеЗначениеСпр | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации = ЗНАЧЕНИЕ(Перечисление.бит_стр_ВидыОперацииДоговораИнвестирования.Заключение) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | бит_стр_ДоговорИнвестированияДолевогоУчастия.Ссылка, | бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации |ИЗ | Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия |ГДЕ | бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен = ИСТИНА | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент В(&Контрагенты) | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости = &ИсходноеЗначениеСпр | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации = ЗНАЧЕНИЕ(Перечисление.бит_стр_ВидыОперацииДоговораИнвестирования.ИзменениеУсловий) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента |ИЗ | Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия |ГДЕ | бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен = ИСТИНА | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент В(&Контрагенты) | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости = &ИсходноеЗначениеСпр | |СГРУППИРОВАТЬ ПО | бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента"; Запрос.УстановитьПараметр("Контрагенты", Контрагенты); Запрос.УстановитьПараметр("ИсходноеЗначениеСпр", ИсходноеЗначениеСпр); МассивРезультатов = Запрос.ВыполнитьПакет(); Попытка НачатьТранзакцию(); ВыборкаСписокДокументов = МассивРезультатов[0].Выбрать(); Проверка1 = МассивРезультатов[0].Выгрузить(); ЭлементыФормы.НадписьИндикации.Значение = "Снятие с проведения документов"; Пока ВыборкаСписокДокументов.Следующий() Цикл ДоговорИнвестирования = ВыборкаСписокДокументов.ДоговорИнвестирования.ПолучитьОбъект(); ДоговорИнвестирования.Проведен = Ложь; ДоговорИнвестирования.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецЦикла; ЭлементыФормы.НадписьИндикации.Значение = "Изменение вида договора в договорах контрагентов"; ВыбораДоговораКонтрагентов = МассивРезультатов[1].Выбрать(); Проверка2 = МассивРезультатов[1].Выгрузить(); Пока ВыбораДоговораКонтрагентов.Следующий() Цикл ДоговорКонтагента = ВыбораДоговораКонтрагентов.ДоговорКонтрагента.ПолучитьОбъект(); ДоговорКонтагента.бит_стр_ТипДоговораРеализацииНедвижимости = КонечноеЗначениеСпр; ДоговорКонтагента.Записать(); КонецЦикла; ВыборкаСписокДокументов.Сбросить(); ЭлементыФормы.НадписьИндикации.Значение = "Проведение документов"; Пока ВыборкаСписокДокументов.Следующий() Цикл ДоговорИнвестирования = ВыборкаСписокДокументов.ДоговорИнвестирования.ПолучитьОбъект(); ПолучитьСтруктуруСчетовЦелевогоФинансированияПоДоговоруИОбновитьСчета(ДоговорИнвестирования, ДоговорИнвестирования.ДоговорКонтрагента); ДоговорИнвестирования.Проведен = Истина; ДоговорИнвестирования.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; //ОтменитьТранзакцию(); ЗафиксироватьТранзакцию(); ЭлементыФормы.НадписьИндикации.Значение = ""; Сообщить("Выполнено!"); Исключение ОтменитьТранзакцию(); Сообщить("Транзакция отменена"); КонецПопытки; КонецЕсли; |
|||
6
ultrannge89
16.10.14
✎
07:41
|
Делал я ее на клиент серверной и проверял тоже, выполнялась по 3-4 минуты, затем закинул на рабочую в файловой, стала за 3-5 сек выполняться...
|
|||
7
ultrannge89
16.10.14
✎
07:47
|
Просто сейчас сервак на sql используется только мной для теста, но в будущем будет переход с файловой на серверную и не хотелось бы чтобы они потом говорили что я им всю работу испортил, что у них теперь документы по часу перепроводятся...
Windows server 2008 r2, Intel Xeon E5607 2.27 Ghz (2 процессора), 12 Gb RAM, SAS Raid 10 level 1.8 Tb Выделил скулю 4 Гб озу. Может быть в нем надо что-то настроить? У 1с сервера тоже никаких настроек не делал, т.к. пока мало ОЗУ. |
|||
8
ultrannge89
16.10.14
✎
08:06
|
Вот топ:
ОбщийМодуль.ОбщегоНазначения.Модуль 3 682 Набор.Записать(); 1 464 62,892402 27,92 ОбщийМодуль.ОбщегоНазначения.Модуль 4 406 Выборка = Запрос.Выполнить().Выбрать(); 1 098 29,560968 13,12 Форма.Форма.Форма 72 ДоговорИнвестирования.Записать(РежимЗаписиДокумента.Проведение); 183 17,955352 7,97 ОбщийМодуль.ОбщегоНазначения.Модуль 4 472 Запрос.Выполнить(); 549 13,323934 5,92 |
|||
9
ultrannge89
16.10.14
✎
08:06
|
Предпоследняя запись это время...
|
|||
10
Злобный монстр
16.10.14
✎
09:15
|
(9) Сколько одна транзакция объектов пишет? Если "многа тысяч" Поруби по частям фиксирование.
|
|||
11
Злобный монстр
16.10.14
✎
09:17
|
(10) + Ну в смысле не в одной гигантской транзакции все пиши. А в нескольких, например по 1000 записей.
|
|||
12
Зеленый пень
16.10.14
✎
09:35
|
Странно. Разница между файловой и серверной базой может быть в 5-10 раз, но не в 50.
База какого размера? |
|||
13
YFedor
16.10.14
✎
09:39
|
УстановитьМонопольныйРежим(Истина) ?
|
|||
14
ultrannge89
16.10.14
✎
11:02
|
В транзакции 200 объектов распровожу, затем 200 изменяю и 200 провожу...
Монопольного режима не устанавливаю... |
|||
15
ultrannge89
16.10.14
✎
11:04
|
База размером 1Гб. У меня даже конфигуратор открывается по несколько минут после выгрузки загрузки, есть ощущения что дело в неправильной настройки сервера... Сам по себе он слишком медленно выполняет многие действия.
|
|||
16
hhhh
16.10.14
✎
12:07
|
а здесь что?
ПолучитьСтруктуруСчетовЦелевогоФинансированияПоДоговоруИОбновитьСчета(ДоговорИнвестирования, ДоговорИнвестирования.ДоговорКонтрагента); это в цикле. может оно тормозит? |
|||
17
H A D G E H O G s
16.10.14
✎
12:13
|
Зачем отменяем проведение?
|
|||
18
Fragster
гуру
16.10.14
✎
12:22
|
в замере производительности стрелочка в последней колонке (переход на сервер) сколько раз видна, и сколько в колонке "количество" напротив нее?
|
|||
19
Fragster
гуру
16.10.14
✎
12:23
|
(14) пусть транзакция по одной итерации будет. ну и (17) еще тоже.
|
|||
20
ultrannge89
16.10.14
✎
12:33
|
(16) Эта функция как бы обновляет форму документа, подхватывая проводки из договора в зависимости от вида договора, это типовая функция...
(17), а как мне изменить проводки у документа не отменяя проведение? логика такая: я нахожу нужные мне документы, отменяю проведение, меняю вид договора, обновляю проводки (счета) в документе и провожу... Можно было конечно в одном цикле это делать, но не охота было париться над 5 минутной задачкой... Наткнулся на статью http://курсы-по-1с.рф/articles/ускорить-1с-протокол-shared-memory/ Щас проверю как у меня настроена 1С, может проблемы в самом сервере, замер показывает что на серверном варианте та же самая операция выполняется в 30 - 40 раз дольше файловой. |
|||
21
ultrannge89
16.10.14
✎
12:42
|
1CV82 Server Shared memory
1CV82 Server Shared memory 1CV82 Server Shared memory 1CV82 Server Shared memory |
|||
22
H A D G E H O G s
16.10.14
✎
12:44
|
(21) Регламенты на SQL настроены, выполняютс?
Конфа - типовая? |
|||
23
H A D G E H O G s
16.10.14
✎
12:44
|
А, стоп, вижу присутствие Бита.
|
|||
24
H A D G E H O G s
16.10.14
✎
12:45
|
Смотреть, какой регистр медленнее всего записывается, смотреть план запроса его записи, искать index scan
|
|||
25
Зеленый пень
16.10.14
✎
13:00
|
(24) Он выложил замер в (8), там 28% занимает самый тяжелый регистр, тут дело не в одном регистре.
|
|||
26
H A D G E H O G s
16.10.14
✎
13:13
|
(25) Даже не буду ничего комментировать.
|
|||
27
Fragster
гуру
16.10.14
✎
13:44
|
а отладка на сервере включена вообще?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |