Переключение на Главную Страницу Страницы: 1 [2] 3 4 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) Очень большая выборка (число прочтений - 18854 )
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #15 - 03. Декабря 2007 :: 16:13
Печать  
PVR писал(а) 30. Ноября 2007 :: 17:25:
Присоединяюсь, база DBF, OLEDB на больших выборках 1С падает!!!  Плачущий

Я чуть выше написал то, что мне нужно для выяснения причины падения 1с, при выполнении запроса через oledb.
Если нужен результат, то do it .
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #16 - 03. Декабря 2007 :: 17:01
Печать  
spock писал(а) 03. Декабря 2007 :: 16:13:
PVR писал(а) 30. Ноября 2007 :: 17:25:
Присоединяюсь, база DBF, OLEDB на больших выборках 1С падает!!!  Плачущий

Я чуть выше написал то, что мне нужно для выяснения причины падения 1с, при выполнении запроса через oledb.
Если нужен результат, то do it .

Код
Выбрать все
					case DBTYPE_WSTR:
						{
							wstrVal = (wchar_t*)&pRowValues[pDBBindings[nCol].obValue];

							// spock: 2005-11-13
							// Про обработку NULL-значений я и забыл :(
							// Обрабатываем просто: есть NULL, значит просто прописываем
							// пустое значение в ТЗ
							//
							if(DBSTATUS_S_ISNULL == dwStatus)
							{
								v.SetType(pColumnsInfo[nCol].m_nType1C);
								v = "";
								break;
							}

							v.SetType(pColumnsInfo[nCol].m_nType1C);
							v = OLE2T(wstrVal); // <== А не ##па ли здесь?
						}
						break;

 


Ы?
Проверил на базе РСДН. Для полей типа nvarchar используется именно DBTYPE_WSTR.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Очень большая выборка
Ответ #17 - 03. Декабря 2007 :: 17:31
Печать  
Вот ЗАПРОС к Торговле + картинки.

Справочник Номенклатуры ~ 37000
                    Контрагенты   ~ 1100
Документы                           ~  70000

Версия 1с 27
"Торговля и склад" DBF
1C++ v:2.5.0.6 Nightly build newTF 2007-11 -30
  

ZAPROS_001.zip ( 43 KB | Загрузки )
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #18 - 04. Декабря 2007 :: 07:06
Печать  
PVR писал(а) 03. Декабря 2007 :: 17:31:
Вот ЗАПРОС к Торговле + картинки.

Судя по ошибке, скорее всего, вылетает std::bad_alloc из недр ТЗ. Так что, OLE DB, скорее всего, не при чем.

Можно попробовать это проверить. Попробуй загнать свой запрос в статический провайдер для OLE DB:
http://uzhast.fatal.ru/vfp.oledb.provider/

Там исправленная 1С++ 2.5 + провайдер и обработка "Тест провайдера" (не "динамика"!). Провайдер не использует ТЗ и, если результат запроса помещается в память, то, скорее всего, будет работать нормально. Только сначала потренируйся на маленьких выборках.

И, да!, не используй таймаут обновления и не используй ползунок прокрутки. На таких объемах тормоза будут страшенные  Смех
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Очень большая выборка
Ответ #19 - 04. Декабря 2007 :: 07:51
Печать  
Uzhast писал(а) 04. Декабря 2007 :: 07:06:
Судя по ошибке, скорее всего, вылетает std::bad_alloc из недр ТЗ. Так что, OLE DB, скорее всего, не при чем.

Можно попробовать это проверить. Попробуй загнать свой запрос в статический провайдер для OLE DB:
http://uzhast.fatal.ru/vfp.oledb.provider/

Там исправленная 1С++ 2.5 + провайдер и обработка "Тест провайдера" (не "динамика"!). Провайдер не использует ТЗ и, если результат запроса помещается в память, то, скорее всего, будет работать нормально. Только сначала потренируйся на маленьких выборках.

И, да!, не используй таймаут обновления и не используй ползунок прокрутки. На таких объемах тормоза будут страшенные  Смех


Загнать попробую вечером.

Таймаут обновления не использую  Улыбка
Ползунок прокрутки, тоже  Смех
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #20 - 04. Декабря 2007 :: 08:13
Печать  
Uzhast писал(а) 03. Декабря 2007 :: 17:01:
Проверил на базе РСДН. Для полей типа nvarchar используется именно DBTYPE_WSTR.

че имелось в виду?
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #21 - 04. Декабря 2007 :: 08:14
Печать  
spock писал(а) 04. Декабря 2007 :: 08:13:
Uzhast писал(а) 03. Декабря 2007 :: 17:01:
Проверил на базе РСДН. Для полей типа nvarchar используется именно DBTYPE_WSTR.

че имелось в виду?

При запросе к полям типа nvarchar к SQL-серверу результат возвращается в виде DBTYPE_WSTR.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #22 - 04. Декабря 2007 :: 08:36
Печать  
известное дело и что?
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #23 - 04. Декабря 2007 :: 08:38
Печать  
spock писал(а) 04. Декабря 2007 :: 08:36:
известное дело и что?

Stack overflow
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #24 - 04. Декабря 2007 :: 08:54
Печать  
епт, помню - помню, что нужно внести правки на эту тему.
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Очень большая выборка
Ответ #25 - 04. Декабря 2007 :: 17:54
Печать  
Uzhast писал(а) 04. Декабря 2007 :: 07:06:
Можно попробовать это проверить. Попробуй загнать свой запрос в статический провайдер для OLE DB:
http://uzhast.fatal.ru/vfp.oledb.provider/

Там исправленная 1С++ 2.5 + провайдер и обработка "Тест провайдера" (не "динамика"!). Провайдер не использует ТЗ и, если результат запроса помещается в память, то, скорее всего, будет работать нормально


Сначала не понял, что ты советуешь не использовать ТЗ как провайдер для ТП.  Смущённый
Мне нужна полная выборка, а не порции. Так что ТЗ, а мечта сразу в ИТ+провайдер для ИТ -вот это был бы класс!  Очень довольный

Попробовал на твоей версии 1С++, тоже ошибка, но распределение памяти разное ?
  

1_2.jpg ( 20 KB | Загрузки )
1_2.jpg
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #26 - 04. Декабря 2007 :: 18:13
Печать  
PVR писал(а) 04. Декабря 2007 :: 17:54:
Сначала не понял, что ты советуешь не использовать ТЗ как провайдер для ТП.  Смущённый
Мне нужна полная выборка, а не порции. Так что ТЗ, а мечта сразу в ИТ+провайдер для ИТ -вот это был бы класс!  Очень довольный

Попробовал на твоей версии 1С++, тоже ошибка, но распределение памяти разное ?

Я имел в виду попробовать статический провайдер для ТП на твоем запросе. Т.е. взять обработку "Тест провайдера.ert", забить туда запрос и выполнить. Если вылет происходит не из-за OLE DB, а из-за ТЗ, то провайдер будет работать и в ТП ты увидишь результат своего запроса.

Как выполняется запрос через OLE DB? Берется запрос, выполняется, получается результат. Далее OLE DB перекачивает результат в ТЗ. Мне кажется, что ошибка возникает именно на этапе перекачки в ТЗ. Поэтому я и говорю, что можно попробовать статический провайдер для ТП. Он работает так: передает в OLE DB запрос и получает результат и держит его. Далее он просто ходит по этому результату. Без посредников в виде ТЗ. Поэтому если дело в ТЗ, то провайдер должен нормально работать.

Если провайдер будет нормально работать для твоей выборки, то, используя те изменения, которые были внесены в 1С++, можно будет сделать что-то вроде ODBC-рекордсета, но для OLE DB. Это позволит работать с результатом запроса без ТЗ. Что позволит делать выборки бОльшего объема, чем можно сейчас.
  
Наверх
 
IP записан
 
TalB
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #27 - 04. Декабря 2007 :: 19:29
Печать  
Это не баг 1С++. На ToySQL наблюдается такая же фича. Можно добиться такого эффекта и без SQL. Просто у 1С заканчивается доступная память. Максимум, который может "съесть" 1С ~ 1.8 Гб. Для этого файл подкачки можно увеличить, если физически столько оперативки нет.
А чтобы сделать тоже самое без SQL, надо просто в цикле чем-нибудь заполнять ТЗ. Память в конце концов кончится и 1С упадёт.
  
Наверх
ICQ  
IP записан
 
TalB
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Очень большая выборка
Ответ #28 - 04. Декабря 2007 :: 19:32
Печать  
Как вариант: можно результат запроса выгрузить во временную таблицу на SQL сервере, а оттуда частями получать в ТЗ, обрабатывать, очищать ТЗ, обнулять ТЗ для освобождения памяти (не помню точно что уже делал,только очистку или очистку и обнуление), а потом получать в нее следующую порцию данных.
PS еще можно "таблицу" мега-большую сделать и по окончании доступной памяти 1С также отвалится.
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Очень большая выборка
Ответ #29 - 04. Декабря 2007 :: 20:45
Печать  
Вот я и говорю, хотелось бы без ТЗ сразу в Индексированную таблицу получать + провайдер для ИТ. Странно, что разработчики не хотят делать  Плачущий
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 5
ОтправитьПечать