Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Инд таблица : если база на сервере (число прочтений - 10235 )
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Инд таблица : если база на сервере
05. Декабря 2007 :: 14:52
Печать  
Метод Группировать . По Заказу и Товар,  объем 200 * 7 группировок, без групп, чРасшифровкаПоследнегоУровня =1, несколько группировочных сумм.
Локально выполняется доли сек, а если база располагается на сервере то около минуты.
То же самое с ДобавитьИндекс.

При увеличении выборки время возрастает экспоненциально (если база располагается на сервере) - приходится отрубать аварийно 1С.
Сборка 1С++ 2.5.0.5
Похожий баг был у Орефкова, когда он делал для sqllite, но он довольно быстро его исправил - может проблема похожая.

В Багзиллу уже неделю попасть не могу, а проблема важная.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инд таблица : если база на сервере
Ответ #1 - 05. Декабря 2007 :: 15:03
Печать  
kiruha писал(а) 05. Декабря 2007 :: 14:52:
В Багзиллу уже неделю попасть не могу, а проблема важная.

Кто там тебя не пускает? Дядя Федор? Подмигивание
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инд таблица : если база на сервере
Ответ #2 - 05. Декабря 2007 :: 15:15
Печать  
kiruha писал(а) 05. Декабря 2007 :: 14:52:
В Багзиллу уже неделю попасть не могу, а проблема важная.

На какой емыл регистрировался?
В спамбоксе ответ искал?
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Инд таблица : если база на сервере
Ответ #3 - 05. Декабря 2007 :: 15:40
Печать  
kiruha писал(а) 05. Декабря 2007 :: 14:52:
То же самое с ДобавитьИндекс.
При увеличении выборки время возрастает экспоненциально (если база располагается на сервере) - приходится отрубать аварийно 1С.

Индексное выражение какое?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инд таблица : если база на сервере
Ответ #4 - 06. Декабря 2007 :: 07:32
Печать  
kms писал(а) 05. Декабря 2007 :: 15:40:
kiruha писал(а) 05. Декабря 2007 :: 14:52:
То же самое с ДобавитьИндекс.
При увеличении выборки время возрастает экспоненциально (если база располагается на сервере) - приходится отрубать аварийно 1С.

Индексное выражение какое?

Тип документ

Код
Выбрать все
Процедура ТракСПП()
	Перем  ТекстЗапроса;

	Состояние("Запрос траков");
	ТекстЗапроса="
	| 	SELECT
	|		ТабличнааяЧастьТрак.IDDoc as [Трак $Документ.Трак]
	|	   ,right($ТабличнааяЧастьТрак.Докум,9) as [Докум $Документ]
	|	,ЖурДокументов.IDDOCDEF	   as  Докум_Вид
	|	,0000000000000.00 as  Сумма
    |
	|	FROM
	|	    $ДокументСтроки.Трак as ТабличнааяЧастьТрак
	|
	|   LEFT JOIN
	|		  1SJourn as ЖурТраков ON ЖурТраков.IDDoc = ТабличнааяЧастьТрак.IDDoc
	|   LEFT JOIN
	|		  1SJourn as ЖурДокументов ON ЖурДокументов.IDDoc = right($ТабличнааяЧастьТрак.Докум,9)
	|
	|   WHERE  ЖурТраков.Date  BETWEEN  :ВыбНачПериода~~ AND  :ВыбКонПериода~~
	|
	|";

	ОлеДБКоманда = глОлеДБ.СоздатьКоманду();
	ОлеДБКоманда.УстановитьТекстовыйПараметр("ВыбНачПериода",ВыбНачПериода);
	ОлеДБКоманда.УстановитьТекстовыйПараметр("ВыбКонПериода",ВыбКонПериода);

	//	ОлеДБКоманда.Отладка(1);

	//	Сообщить(ТекстЗапроса);
	ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
	ОлеДБКоманда.Закрыть();
	//	ТЗ.ВыбратьСтроку();
	ИТЗ=СоздатьОбъект("ИндексированнаяТаблица");
	ИТЗ.Загрузить(ТЗ);
	Состояние("группирование Запрос траков");

	ВремяНачалоЗапроса=_GetPerformanceCounter();
//1	тест группировки
//Запрос.Группировать("Докум : Докум; Трак : Трак","Сумма");

//2  тест индексирования

	ИТЗ.ДобавитьИндекс("Докум","Докум" ,0) ;
	ВремяКонецЗапроса=_GetPerformanceCounter();
	ВремяЗапроса=ВремяКонецЗапроса-ВремяНачалоЗапроса;
	Сообщить("Тест длился "+(ВремяЗапроса/1000)+"с");
	ИТЗ.ВыбратьСтроку();

	Сообщить("кол строк "+ИТЗ.КоличествоСтрок());
КонецПроцедурыы 



Вместо документа Трак можно использовать любой документ, в табличной части которого
есть реквизит типа "Документ"

Тест локально 0.455 сек
тест сервер   20.000 сек
при количестве строк всего 615.

Если убрать типизацию
тест локально 0.001 сек  (!!!)
тест сервер     0.001 сек  (!!!)

т.е. ИТЗ довольно шустрая вещь без типизации !!!

  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инд таблица : если база на сервере
Ответ #5 - 06. Декабря 2007 :: 07:49
Печать  
В свете вышесказанного решил проверить свои отчеты продаж с группированием по справочникам

Группировка
1. локально   1.114с
2. на сервере 6.568с
3. Без типизации  0.739с (!!!!!) (видимо у меня спр заполнены меньше чем документов в журнале, а иначе
разница была бы еще больше)

В принципе есть выход без исправления бага - оставлять второе нетипизированное поле и по нему
индексировать и группировать....

???

  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инд таблица : если база на сервере
Ответ #6 - 06. Декабря 2007 :: 08:28
Печать  
fez писал(а) 05. Декабря 2007 :: 15:15:
kiruha писал(а) 05. Декабря 2007 :: 14:52:
В Багзиллу уже неделю попасть не могу, а проблема важная.

На какой емыл регистрировался?
В спамбоксе ответ искал?


В принципе по сравнению с проблемой работы ИТ это не так важно  ,  лучше в другой теме или по почте.
...
при попытке зайти получаю
Цитата:
ОШИБКА
Запрошенный URL не может быть доставлен

Во время доставки URL:
http://www.cvs.alterplast.ru/bugs/

Произошла следующая ошибка:

    Невозможно определить IP адрес узла www.cvs.alterplast.ru

Сервер адресов ответил:

    Name Error: The domain name does not exist.

Это обозначает:

Кэш не в состоянии определить сервер, указанный в URL.
Проверьте правильность написания адреса.


почта в домене @list.ru
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Инд таблица : если база на сервере
Ответ #7 - 06. Декабря 2007 :: 09:03
Печать  
kiruha писал(а) 06. Декабря 2007 :: 07:32:
т.е. ИТЗ довольно шустрая вещь без типизации !!!

А если индексы строить по внутренним представлениям (с модификатором '*')?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инд таблица : если база на сервере
Ответ #8 - 06. Декабря 2007 :: 09:17
Печать  
kiruha писал(а) 06. Декабря 2007 :: 08:28:
при попытке зайти получаю
Цитата:
ОШИБКА
Запрошенный URL не может быть доставлен

Во время доставки URL:
http://www.cvs.alterplast.ru/bugs/
[...skipped...]
Проверьте правильность написания адреса.

У багзиллы адрес - без "www". http://cvs.alterplast.ru/bugs/
  
Наверх
www  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инд таблица : если база на сервере
Ответ #9 - 06. Декабря 2007 :: 09:24
Печать  
kms писал(а) 06. Декабря 2007 :: 09:03:
kiruha писал(а) 06. Декабря 2007 :: 07:32:
т.е. ИТЗ довольно шустрая вещь без типизации !!!

А если индексы строить по внутренним представлениям (с модификатором '*')?


Да, добавление * полностью исправляет ситуацию.

Может есть смысл сделать по умолчанию?
Вероятно не каждый понимает к каким результатам это приводит Улыбка
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инд таблица : если база на сервере
Ответ #10 - 06. Декабря 2007 :: 09:28
Печать  
fez писал(а) 06. Декабря 2007 :: 09:17:
У багзиллы адрес - без "www". http://cvs.alterplast.ru/bugs/


Я брал адрес с основной страницы
http://www.1cpp.ru/index.php/HowToHelp
Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Инд таблица : если база на сервере
Ответ #11 - 06. Декабря 2007 :: 09:41
Печать  
kiruha писал(а) 06. Декабря 2007 :: 09:24:
Да, добавление * полностью исправляет ситуацию.

Может есть смысл сделать по умолчанию?
Вероятно не каждый понимает к каким результатам это приводит Улыбка

Это точно, но менять поздно уже.
А вообще, эффективно в ИТ сделано именно это - индексы по внутренним, и любые индексы по простым типам (в том числе - для строк с обрезкой пробелов и без учета регистра).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Инд таблица : если база на сервере
Ответ #12 - 06. Декабря 2007 :: 09:46
Печать  
kms писал(а) 06. Декабря 2007 :: 09:41:
kiruha писал(а) 06. Декабря 2007 :: 09:24:
Да, добавление * полностью исправляет ситуацию.

Может есть смысл сделать по умолчанию?
Вероятно не каждый понимает к каким результатам это приводит Улыбка

Это точно, но менять поздно уже.
А вообще, эффективно в ИТ сделано именно это - индексы по внутренним, и любые индексы по простым типам (в том числе - для строк с обрезкой пробелов и без учета регистра).



Ну как это поздно?
Я почти год использую ИТЗ и только сейчас понял причины тормозов.(спасибо за решение Улыбка )
А как же остальные пользователи ИТЗ ?
И что такое "сортировка НЕ по внутреннему представлению объекта"
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Инд таблица : если база на сервере
Ответ #13 - 06. Декабря 2007 :: 09:50
Печать  
kiruha писал(а) 06. Декабря 2007 :: 09:28:
fez писал(а) 06. Декабря 2007 :: 09:17:
У багзиллы адрес - без "www". http://cvs.alterplast.ru/bugs/


Я брал адрес с основной страницы
http://www.1cpp.ru/index.php/HowToHelp
Улыбка

Это ценно. Спасибо, поправил.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Инд таблица : если база на сервере
Ответ #14 - 06. Декабря 2007 :: 10:19
Печать  
kiruha писал(а) 06. Декабря 2007 :: 09:46:
Ну как это поздно?

Индексы с '*' и без '*' дают разную сортировку, т.е. существующие алгоритмы изменят поведение при глобальном изменении умолчания.
Не поймут люди.

Цитата:
Я почти год использую ИТЗ и только сейчас понял причины тормозов.(спасибо за решение Улыбка )
А как же остальные пользователи ИТЗ ?

И что такое "сортировка НЕ по внутреннему представлению объекта"

У простых индексов есть одно преимущество - привычная сортировка результата (алфавитная, как правило, или по датам для документов).
Для небольших объемов это, наверное, удобно (не знаю, у меня простые индексы не используются Улыбка )
Как правило, проще в реализации.

Но получение представления требует обращения к базе, что как правило неэффективно.
Часто лучше получить доп. поле сортировки в запросе и построить по нему составной индекс (типа "Объект_Наименование,*Объект").

В ряде задач (например, в алгоритмах типа join) порядок сортировки вообще не играет роли, там нужен максимально эффективный индекс.

И т.д. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать