|
v7: 1спп утечка памяти | ☑ | ||
---|---|---|---|---|
0
Туц
13.08.13
✎
10:40
|
//*******************************************
Процедура Сформировать() БД = СоздатьОбъект("ODBCDatabase"); БДЗапрос = СоздатьОбъект("ODBCRecordSet"); БДЗапрос.УстБД(БД); БДЗапрос.Выполнить("IF OBJECT_ID(N'tempdb..#тест', N'U') IS NOT NULL DROP TABLE #тест"); БДЗапрос.УстановитьТекстовыйПараметр("ТА",НачМесяца(ПолучитьДатуТА())); БДЗапрос.Выполнить(" |SELECT * |INTO #тест |FROM $РегистрИтоги.ОстаткиТМЦ Рег (nolock) |WHERE Рег.Period = :ТА |"); Рез = БДЗапрос.ВыполнитьИнструкцию("Select count(*) from #тест").ПолучитьЗначение(1,1); Предупреждение("В таблице " + Рез + " строк. Далее открываем диспетчер задач и наблюдаем утечку памяти."); СчетчикЦикла = 0; Для СчетчикЦикла = 1 По 1000000 Цикл Рез = БДЗапрос.Выполнить("DELETE FROM #тест"); Если Рез = 0 Тогда Сообщить("Я упала, хотя вы этого может быть пока ещё не увидели ;( " + БДЗапрос.ПолучитьОписаниеОшибки()); БДЗапрос.Закрыть(); БД.Закрыть(); Возврат; КонецЕсли; Форма.Заголовок(""+СчетчикЦикла); КонецЦикла; БДЗапрос.Закрыть(); БД.Закрыть(); КонецПроцедуры |
|||
1
Туц
13.08.13
✎
10:41
|
Аналогично если вместо DELETE использовать UPDATE.
|
|||
2
Cube
13.08.13
✎
10:41
|
(0) "v7: 1спп" - шо за зверь?
|
|||
3
Туц
13.08.13
✎
10:42
|
(2) здасьте! 1c++
|
|||
4
Cube
13.08.13
✎
10:42
|
(3) А, а я думал конфа так называется)))
|
|||
5
1Сергей
13.08.13
✎
10:45
|
информацию принял, продолжайте наблюдения
|
|||
6
Злопчинский
13.08.13
✎
11:01
|
я так и знал...
|
|||
7
Туц
13.08.13
✎
11:12
|
(5,6) О сколько чудных....
Без шуток, а что же делать? ;( |
|||
8
Злопчинский
13.08.13
✎
11:14
|
(7) хз.. стучаться к авторам. хотя сомнительно. что исправят...
|
|||
9
МихаилМ
13.08.13
✎
11:15
|
(7)
указывать конкретную ТЗ |
|||
10
1Сергей
13.08.13
✎
11:16
|
(9) ТЗ?
|
|||
11
Туц
13.08.13
✎
11:16
|
(9) это вброс?
|
|||
12
КонецЦикла
13.08.13
✎
11:22
|
Странно... не обращал внимания, было у меня такое, что тысячами (до миллиона не доходило) выполнялись маленькие запросики один за другим роботом (около 100 пользователей у целом), вроде все ОК было.
|
|||
13
Туц
13.08.13
✎
11:26
|
(12) На малых выборках похоже не проявляется.
|
|||
14
Dolly_EV
13.08.13
✎
14:56
|
(0) Повторил. Подтверждаю утечку. Причем в конкретном примере - не зависимо от размера выборки (13)
что в исходном виде, что вот в таком: |SELECT TOP 10 $Рег.Товар,$Рег.Количество |INTO #тест |FROM $РегистрИтоги.ПартииТоваров Рег (nolock) |WHERE Рег.Period = :ТА Память на клиенте отжирается процессом 1С с одинаковым приращением порядка 4 Мб/сек в первом и втором случае. На сервере с памятью - никаких изменений. |
|||
15
Dolly_EV
13.08.13
✎
15:00
|
+(14) при этом если не обрывать по Esc обработку где-то на пороге до 500 Мб сожранной памяти - 1С после обрыва обработки при закрытии валится. Если меньше 500 Мб - то закрывается корректно
Естественного обвала не дождался - памяти на клиенте дюже много - досидел до 2 Гб (счетчик цикла = где-то на 300 000) |
|||
16
Злопчинский
13.08.13
✎
23:38
|
..программисты такие программисты...
|
|||
17
Попытка1С
14.08.13
✎
01:28
|
На самом деле это печально..
|
|||
18
ADirks
14.08.13
✎
08:04
|
Нет утечек. 1С++ 3.2.4.0. 1С r25, с примочкой от spock'а
для интересу, попробуйте в начало запросов вставить Set NoCount ON обработка сообщений от ODBC - волшебная штука, и может приводить к печальным последствиям |
|||
19
Туц
14.08.13
✎
08:30
|
(18) откуда 3.2.4.0? последняя же 3.2.2.0
|
|||
20
Туц
14.08.13
✎
08:34
|
(18) BINGO
Set NoCount ON Спасибо, дорогой товарищ! |
|||
21
Dolly_EV
14.08.13
✎
08:39
|
(19) 3.2.4.1 даже есть
(18) "обработка сообщений от ODBC - волшебная штука" - а можно по-подробнее? Утечка пропала, причем, если в той же сессии 1С-а, оборвав выполнение и убрав "Set NoCount ON" снова запустить - утечка не появляется |
|||
22
Туц
14.08.13
✎
08:41
|
(21) потому что этот параметр уже установлен.
|
|||
23
Туц
14.08.13
✎
08:41
|
(21) А где ж взять то 3.2.4.х?
|
|||
24
Туц
14.08.13
✎
08:42
|
Каюсь. На форуме.
|
|||
25
Dolly_EV
14.08.13
✎
08:44
|
(18) все, разобрался
|
|||
26
ADirks
14.08.13
✎
09:09
|
Когда вместе с результатом выполнения запроса сервер возвращает ещё и некие сообщения (типа (498 row(s)affected)), появляющиеся если не указать обратное, то в интерфейсе ODBC это как-то так передаётся, что фиг это обработаешь без бутылки. Поэтому в 1С++ сообщения не обрабатываются вообще. Но ODBC на это обижается - в данном случае пожирая память. А может и просто упасть.
Поэтому, Set NoCount ON ставится на автопилоте. И когда 1С внезапно падает от запросов, первое что делается - это текст засовывается в студию, чтобы посмотреть на мессаги. |
|||
27
ЧеловекДуши
14.08.13
✎
09:11
|
(0) И где именно утечка? :)
|
|||
28
ЧеловекДуши
14.08.13
✎
09:13
|
(19) Вы отстали от жизни :)
|
|||
29
ЧеловекДуши
14.08.13
✎
09:16
|
(26) Как мило... тут получается уже проблема на уровне ODBC :)
|
|||
30
ADirks
14.08.13
✎
09:19
|
ну, типа того
думаешь, зря все 1С-ные sp-шки начинаются с этого заклинания? |
|||
31
ЧеловекДуши
14.08.13
✎
09:27
|
(30) Не знаю... чета не обращал на это внимание :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |