|
v7: Прямой запрос + ИндексированнаяТаблица Error! Cannot allocate memory block | ☑ | ||
---|---|---|---|---|
0
Dolly_EV
10.10.12
✎
16:00
|
после "ПрямогоЗапроса" есть две ИТЗ
1. 12312 строк, 7 колонок 2. 216938 строк, 26 колонок при их "Объединить" вылазит "Error! Cannot allocate memory block" Вопросы: 1. можно как-то обойти не уменьшая объем данных? 2. какие физ. ограничения для ИТЗ? (в Мб или строках/колонках или мемориблоках?) 3. это Индексированная таблица: ошибка читал. П.С. база SQL 26Гб |
|||
1
Mikeware
10.10.12
✎
16:07
|
Выбирай нужные данные. сомневаюсь, что тебе нужно столько данных
|
|||
2
МихаилМ
10.10.12
✎
16:07
|
1)/3GB
2) выгрузить в скл и обеъдинить 3) разделить тз на блоки обеъдинить , соединить |
|||
3
Dolly_EV
10.10.12
✎
16:13
|
(2) "2) выгрузить в скл и обеъдинить" - типа так:
ТекстЗапроса = " |INSERT INTO Топ"+ПериодСтрокой+" VALUES (@Пр7,@ВидПроизводителяИмпортера,@ПроизводительИмпортер,@ПроизводительИмпортерИНН,@НачОст,@КонОст |,@ПрихПр,@ПрихОп,@ПрихИм,@ПрихВо,@ПрихРо,@РасхОп,@РасхЭк,@РасхРо,@РасхВо,@РасхПр,@Док,@Прих,@Расх,@Импорт |)"; ? я до инсерта еще не дошел в освоении ПЗ :-( |
|||
4
Dolly_EV
10.10.12
✎
16:26
|
(2) 1)/3GB - по таскманагеру процесс 1С отжирает <1,5Гб в момент тяжелой операции
|
|||
5
МихаилМ
10.10.12
✎
16:29
|
(4)
ошибка невозможности получить блок памяти требуемого размера. /3GB вероятность увеличит. |
|||
6
Dolly_EV
10.10.12
✎
17:26
|
(2) "3) разделить тз на блоки обеъдинить , соединить"
Как? "разделить тз на блоки" |
|||
7
МихаилМ
10.10.12
✎
18:11
|
(6 )
разделить 1 тз на блоки на блоки по N строк N определите эмпирически, методом вилки. |
|||
8
Dolly_EV
10.10.12
✎
18:30
|
(7) технически как сделать???
|
|||
9
Dolly_EV
10.10.12
✎
18:31
|
(7) эмпирически определил ))) - достаточно пополам попилить будет
|
|||
10
H A D G E H O G s
10.10.12
✎
19:12
|
Зачем тебе индексированная? Алкоголики некуда не спешат.
|
|||
11
Dolly_EV
10.10.12
✎
19:20
|
(10) Ну как не спешат? передышка на день)))
|
|||
12
H A D G E H O G s
10.10.12
✎
19:26
|
Расшифруй
|
|||
13
H A D G E H O G s
10.10.12
✎
19:27
|
Что за передышка?
|
|||
14
Dolly_EV
10.10.12
✎
19:32
|
(13) с форум.фсрар: "В настоящее время есть определенные проблемы с функционированием сервиса приема деклараций, ведутся работы по решению проблемы. Срок подачи копий деклараций 11 октября просьба сохранять терпение. 11 октября декларации будут обрабатываться с датой обработки 10 октября."
|
|||
15
ЧеловекДуши
10.10.12
✎
19:33
|
пф... П.С. база SQL 26Гб, это маленькая :)
Только 6 Гб, это первоначальный размер сиквельной БД ... У нас 40 гб и нет такой проблемы... Строй отчет по старинке... |
|||
16
Dolly_EV
10.10.12
✎
19:36
|
15 "Строй отчет по старинке..." нииии, ждать по 2 часа на каждый квартал - хватит. Да в принципе урезал выборку (на две разделил) - дальше дело пошло. Хотя первоначальный вариант удобнее был
|
|||
17
ЧеловекДуши
10.10.12
✎
19:40
|
(16)Квартал и уже 2 гб только для ТЗ?
Вы батенько походу тяните мертвые дынные, т.е. избыточные :) |
|||
18
ЧеловекДуши
10.10.12
✎
19:40
|
+ А что будет когда вы еще и на печать выведите?
|
|||
19
Dolly_EV
10.10.12
✎
19:43
|
(17) без Перемещений СтрГрупп="индОбщий:*ВидАП,*Склад,*Номенклатура,Емк,*ПроизвИмп,*ТекДок"; за квартал 200 000 строк
(18) на печать я это не буду выводить))) |
|||
20
КонецЦикла
11.10.12
✎
01:18
|
Все можно сформировать и объединить на сервере, запросами то есть
Таскать для обработки ИТЗ такого объема - ... |
|||
21
Mikeware
11.10.12
✎
07:31
|
(3)
select ... into |
|||
22
varelchik
11.10.12
✎
08:58
|
А что мешает выгрузить во временные таблицы в SQL?
ВыполнитьSQLИзТЗ() |
|||
23
Mikeware
11.10.12
✎
08:59
|
(22) а зачем тянуть их вообще на клиента?
|
|||
24
Dolly_EV
11.10.12
✎
09:17
|
(22)(23) Да тяжко мне пока оперировать данными только на сервере, знаний не хватает :-(
|
|||
25
Dolly_EV
11.10.12
✎
09:17
|
+(24) но деваться некуда, так что разбираюсь с инсертом ))
|
|||
26
Mikeware
11.10.12
✎
09:53
|
(25) Инсерт тебе не нужен.
тебе достаточно ключевого слова INTO |
|||
27
МихаилМ
11.10.12
✎
10:02
|
(26)
а как же индекс создастся ? |
|||
28
Mikeware
11.10.12
✎
10:05
|
(27) А он ему нужен?
Впрочем, индекс можно и добавить... |
|||
29
Dolly_EV
11.10.12
✎
10:09
|
(26) угу, я это еще через Класс "ПрямойЗапрос" делаю, баз sql/dbf поровну... только щас нашел в описании, что есть "• Третий метод, который заполняет таблицу сразу большим количеством записей, - это вставка результирующего набора инструкции ВЫБРАТЬ."
|
|||
30
Dolly_EV
26.10.12
✎
10:29
|
Научился пользовать временные таблицы. Сбор данных теперь - моментальный. Остался один вопрос: можно ли еще ускорить вывод в файл xml.
Вот такой код: ПН0=0; Сообщить("XML "+п_Ном+": ПОДРАЗДЕЛЕНИЕ: "+тзПриложение.Подр,"iii"); тзВидАП=тзПриложение.тзПотомки; тзВидАП.Сортировать("КодАП"); тзВидАП.ВыбратьСтроки(); Пока тзВидАП.ПолучитьСтроку()=1 Цикл Сообщить(" = XML "+п_Ном+": ==ВидАП: "+тзВидАП.ВидАП,"i"); ПН0=ПН0+1; хмлОборот = хмлОбъемОборота.appendChild(ХМЛФайлДанных.createElement("Оборот")); хмлОборот.setAttribute("ПN",ПН0); хмлОборот.setAttribute("П000000000003",СокрЛП(тзВидАП.КодАП)); ПЗапрос.ПодставлятьПараметры("Подр",тзПриложение.Подр); ПЗапрос.ПодставлятьПараметры("ВидАП",тзВидАП.ВидАП); тзТекПроизвИмп=ПЗапрос.ВыполнитьПараметризованныйЗапрос("ИндексированнаяТаблица"); тзТекПроизвИмп.Группировать("индПроизвИмп:*ПроизвИмп;Контрагент:*Контрагент;ЛицКонтр:*ЛицКонтр;ТекДок:*ТекДок",СтрСумм,1); тзТекПроизвИмп.Сортировать("ПроизвИмп"); тзТекПроизвИмп.ВыбратьСтроки(); ПН1=0; Пока тзТекПроизвИмп.ПолучитьСтроку()=1 Цикл //Сообщить(" ==ПроизвИмп: "+тзТекПроизвИмп.ПроизвИмп); ПН1=ПН1+1; хмлСведПроизвИмпорт = хмлОборот.appendChild(ХМЛФайлДанных.createElement("СведПроизвИмпорт")); хмлСведПроизвИмпорт.setAttribute("ПN",ПН1); хмлСведПроизвИмпорт.setAttribute("ИдПроизвИмп",лВернутьИД("1",тзТекПроизвИмп.ПроизвИмп)); тзТекКонтр=тзТекПроизвИмп.тзПотомки; тзТекКонтр.Сортировать("Контрагент"); тзТекКонтр.ВыбратьСтроки(); ПН2=0; Пока тзТекКонтр.ПолучитьСтроку()=1 Цикл //Сообщить(" ==Контрагент: "+тзТекКонтр.Контрагент); ПН2=ПН2+1; хмлКонтрагент = хмлСведПроизвИмпорт.appendChild(ХМЛФайлДанных.createElement(лПолучательПоставщик)); хмлКонтрагент.setAttribute("ПN",ПН2); хмлКонтрагент.setAttribute(лИДПолучателяПоставщика,лВернутьИД("2",тзТекКонтр.Контрагент)); тзТекЛицКонтр=тзТекКонтр.тзПотомки; тзТекЛицКонтр.ВыбратьСтроки(); Пока тзТекЛицКонтр.ПолучитьСтроку()=1 Цикл //Сообщить(" ==Лицензия: "+тзТекЛицКонтр.ЛицКонтр); Если ПустоеЗначение(тзТекЛицКонтр.ЛицКонтр)=0 Тогда хмлКонтрагент.setAttribute("ИдЛицензии",лВернутьИД("3",тзТекЛицКонтр.ЛицКонтр)); КонецЕсли; тзДок=тзТекЛицКонтр.тзПотомки; тзДок.Сортировать("ТекДок"); тзДок.ВыбратьСтроки(); Пока тзДок.ПолучитьСтроку()=1 Цикл //Сообщить(" ==Док: "+тзДок.ТекДок+", П15: "+тзДок.П15+", П16: "+тзДок.П16+", П20: "+тзДок.П20); Док = тзДок.ТекДок; Если п_Ном=6 Тогда Если тзДок.П20>0 Тогда хмлПоставкаЗакупка = хмлКонтрагент.appendChild(ХМЛФайлДанных.createElement("Возврат")); лПоказатель=тзДок.П20; Иначе хмлПоставкаЗакупка = хмлКонтрагент.appendChild(ХМЛФайлДанных.createElement(лПоставкаЗакупка)); лПоказатель=тзДок.П15+тзДок.П16; КонецЕсли; хмлПоставкаЗакупка.setAttribute("П000000000018",Формат(Док.ДатаДок,"ДДДММГГГГ")); хмлПоставкаЗакупка.setAttribute("П000000000019",Док.НомерДок); Иначе //лВидДок=Док.Вид(); НомВх=""; ДатВх=""; Если тзДок.П11>0 Тогда //лВидДок="ВозвратОтПокупателя" хмлПоставкаЗакупка = хмлКонтрагент.appendChild(ХМЛФайлДанных.createElement("Возврат")); лПоказатель=тзДок.П11; ДатВх=Док.ДатаДок; НомВх=СокрЛП(Док.НомерДок); Иначе хмлПоставкаЗакупка = хмлКонтрагент.appendChild(ХМЛФайлДанных.createElement(лПоставкаЗакупка)); лПоказатель=тзДок.П7+тзДок.П8; ДатВх=Док.ДатаДокВходящий; ДатВх=?(Число(ДатВх)=0,Док.ДатаДок,ДатВх); НомВх=СокрП(Док.НомерДокВходящий); НомВх=?(ПустаяСтрока(НомВх)=1,СокрЛП(Док.НомерДок),НомВх); КонецЕсли; хмлПоставкаЗакупка.setAttribute("П000000000018",Формат(ДатВх,"ДДДММГГГГ")); хмлПоставкаЗакупка.setAttribute("П000000000019",НомВх); КонецЕсли; хмлПоставкаЗакупка.setAttribute("П000000000020",""); хмлПоставкаЗакупка.setAttribute("П000000000021",СокрЛП(Формат(лПоказатель,"Ч15.5"))); КонецЦикла; тзДок=""; КонецЦикла; тзТекЛицКонтр=""; КонецЦикла; тзТекКонтр=""; КонецЦикла; тзТекПроизвИмп=""; КонецЦикла; тзВидАП=""; КонецЦикла; тзПриложение=""; КонецЕсли; Если Параметризованный запрос тянуть выше (оставить на верху только группировку по подразделениям) - есть шанс напороться на ограничение памяти по ИТЗ. Если ниже - медленнее. В таком виде файл D6... xml размером 12 Мб выводится 10 минут. "Алкоголики" - у кого как? И как ускорить? на фоне сбора данных за секунды - вывод 10 минут, как бы медленно)) |
|||
31
Ёпрст
26.10.12
✎
10:37
|
xml >80 метров.. и ничего
|
|||
32
Ёпрст
26.10.12
✎
10:37
|
ну и формирование никак не 10 минут - быстрее
|
|||
33
Dolly_EV
26.10.12
✎
10:40
|
(32) Ёпрст4, твой код в основе.. что не так тогда??? при формировании Запрос моментально отрабатывает..все время уходит на перебор таблиц и на appendChild / setAttribute
|
|||
34
Ёпрст
26.10.12
✎
10:42
|
я переписал всё.
|
|||
35
Ёпрст
26.10.12
✎
10:42
|
:)
|
|||
36
Ёпрст
26.10.12
✎
10:42
|
+ ssd рулит
|
|||
37
Ёпрст
26.10.12
✎
10:44
|
можно еще ускорить - отказом от domdocument и рисованием xml ручонками через fso, мне лень ужо было.
|
|||
38
Ёпрст
26.10.12
✎
10:47
|
а так, раньше валилась на ИТЗ, пришлось кастрировать некоторые индексы и переделать мальца группировки
|
|||
39
Dolly_EV
26.10.12
✎
10:50
|
(34) дай посмотреть)))
(36) неужели настолько рулит? сервак без SSD но тоже вобщем не плохой (37) это да, это у меня формат 4.01 так написан был, но дюже не удобно выводить, особенно при изменениях формата в дальнейшем И это.. 80 Мб 6-ка - это за квартал?!?!? |
|||
40
Ёпрст
26.10.12
✎
10:55
|
(39) да, за квартал, 6-ка
|
|||
41
Ёпрст
26.10.12
✎
10:55
|
это не много, есть и по 500 метров у некоторых..
|
|||
42
Dolly_EV
26.10.12
✎
11:07
|
(41) "это не много, есть и по 500 метров у некоторых.."
чего-то не складывается... 500/12 = в 41 раз больше, т.е. при прочих равных оборот должен быть в 41 раз больше, чем у нас. Это если на деньги перевести, получается оборот за квартал у такой конторы = ЗВР РФ. Так что или у меня чего-то криво, или - в 500 метров пихается чего-то лишнее.. Хотя лишним в 6-ке могет быть только короткое или длинное имя контрагента. |
|||
43
Dolly_EV
26.10.12
✎
11:09
|
(42) не, погорячился :-))) три нолика не хватает до ЗВР ))
|
|||
44
Ёпрст
26.10.12
✎
11:11
|
(42) ты просто мало знаком с сетями, например, с магнитом.
|
|||
45
Dolly_EV
26.10.12
✎
11:12
|
(44) угу, я поправился в (43)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |