Переключение на Главную Страницу Страницы: 1 2 [3]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Медленное получение значения периодического реквизита (число прочтений - 10499 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Медленное получение значения периодического реквизита
Ответ #30 - 11. Декабря 2009 :: 10:28
Печать  
berezdetsky писал(а) 11. Декабря 2009 :: 10:20:
А теперь расскажи, как у тебя из select * получилось select cast(c92_vv.value... ?
Смех

ну это  в qa ,было много запросов план был сделан по всем. Вот еще раз сделал
  

test2.JPG ( 115 KB | Загрузки )
test2.JPG
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Медленное получение значения периодического реквизита
Ответ #31 - 11. Декабря 2009 :: 12:32
Печать  
Как всё плохо..  Ужас

Если в таблице больше 1600 записей - обнови статистику with fullscan.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Медленное получение значения периодического реквизита
Ответ #32 - 12. Декабря 2009 :: 08:49
Печать  
berezdetsky писал(а) 11. Декабря 2009 :: 12:32:
Как всё плохо..  Ужас

Если в таблице больше 1600 записей - обнови статистику with fullscan.

Выполнил   статистику
UPDATE STATISTICS    _1sconst WITH FULLSCAN

после этого
таблице констант строк = 15242
Select count(*) from _1SCONST(NOLOCK)


значений по курсу доллара =  207
Select count(*) from _1SCONST(NOLOCK)
where ID=92
and OBJID='     2   '


Картинка таже самая .Что не так. В чем ужас ?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Медленное получение значения периодического реквизита
Ответ #33 - 12. Декабря 2009 :: 17:39
Печать  
Z1 писал(а) 10. Декабря 2009 :: 06:58:
Еще больше ускорить можно если эти новые запросы оформить как хранимые процедуры.

На самом деле, клиент 1С кеширует результат select *, и, при последующих обращениях к реквизиту, больше не посылает запросов на сервер. В отличие от предлагаемых тобой select top 1 *.

Z1 писал(а) 11. Декабря 2009 :: 08:57:
Если по каким либо причинам этот запрос часто перекомпилируется

sp_executesql там - именно для того, чтобы "to reuse the execution plan it generates for the first execution".

Z1 писал(а) 12. Декабря 2009 :: 08:49:
Картинка таже самая .Что не так. В чем ужас ?

В том, что при избирательности в 1.36% сканируется вся таблица, вместо поиска по индексу. Для таблицы размером в два с лишним мегабайта это уже играет роль. Не возьмусь ставить диагноз по фотографии, но что-то с твоим сервером не в порядке.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Медленное получение значения периодического реквизита
Ответ #34 - 14. Декабря 2009 :: 06:04
Печать  
berezdetsky писал(а) 12. Декабря 2009 :: 17:39:
Z1 писал(а) 10. Декабря 2009 :: 06:58:
Еще больше ускорить можно если эти новые запросы оформить как хранимые процедуры.

На самом деле, клиент 1С кеширует результат select *, и, при последующих обращениях к реквизиту, больше не посылает запросов на сервер. В отличие от предлагаемых тобой select top 1 *

Об этом можно более подробней. Непонятно.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Медленное получение значения периодического реквизита
Ответ #35 - 14. Декабря 2009 :: 06:14
Печать  
berezdetsky писал(а) 12. Декабря 2009 :: 17:39:
Z1 писал(а) 12. Декабря 2009 :: 08:49:
Картинка таже самая .Что не так. В чем ужас ?

В том, что при избирательности в 1.36% сканируется вся таблица, вместо поиска по индексу. Для таблицы размером в два с лишним мегабайта это уже играет роль. Не возьмусь ставить диагноз по фотографии, но что-то с твоим сервером не в порядке.

Еще раз переиндексировал и обновил статистику.
Может влияет на ситуацию еще и распределение дат
Всего разных дат Select DISTINCT DATE from _1SCONST = 1363


Если ограничить значение снизу
Select * from _1SCONST(NOLOCK)
where ID=92
and OBJID='     2   '
and DATE <= 'Oct  1 2009 12:00:00:000AM'
and DATE >= 'Jan  2007  12:00:00:000AM'
order by DATE DESC, TIME DESC, DOCID DESC
то запрос идет по IDD
При более ранних датах(снизу)  sql сервер выбирает кластерный индекс.

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 
ОтправитьПечать