Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) небольшое улучшение - оптимизация 1с77 sql (число прочтений - 3732 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
небольшое улучшение - оптимизация 1с77 sql
04. Марта 2010 :: 08:58
Печать  
небольшое улучшение - оптимизация 1с77 sql
( не знаю может ветку надо в репозитарий )
  

1____________xp_ID_MAX.zip ( 8 KB | Загрузки )
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #1 - 04. Марта 2010 :: 08:59
Печать  
Речь пойдет о небольшой оптимизации хранимых процедур 1с
с шаблоном _1sp_%_MAX%ID

Рассмотрим процедуру
Код
Выбрать все
Create procedure _1sp__1SJOURN_MaxID(@id CHAR(9) OUTPUT) AS
set nocount on select @id=MAX(IDDOC) from _1SJOURN(NOLOCK) if @id is null select @id='	   '
 



В этой процедуре в таблице _1SJOURN находим максимальный  IDDOC.
Если таблица пустая возвращаем строку из  9 пробелов.

Первый вариант оптимизации заключался в применении функции ISNULL
Код
Выбрать все
Create procedure _1sp__1SJOURN_MaxID(@id CHAR(9) OUTPUT) AS
set nocount on select @id=ISNULL(MAX(IDDOC), '	   ')  from _1SJOURN(NOLOCK)
 



Проанализировал код и понял (случайно додумался) что в базе всегда есть документы т.е
условие if @id is null select @id='         ' НИКОГДА не выполняется


и решил сделать так если в таблице есть строки то убираем if @id is null select @id='         '
Причем этот анализ делается не как сейчас всегда во время выполнения 1с программ а иногда из-вне xp
после смены конфигурации ( после восстановления стандартных  xp )

Пишем процедуру которая смотрит все xp  по шаблону _1sp_%_MAX%ID
и если в соответстующей талице есть строки то текст
if @id is null select @id='         '
заменяем на
--IF @ID IS NULL select @id='         '

т.е. наша процедура превращается в
Код
Выбрать все
Create procedure _1sp__1SJOURN_MaxID(@id CHAR(9) OUTPUT) AS
set nocount on select @id=MAX(IDDOC) from _1SJOURN(NOLOCK) --IF @ID IS NULL select @id='	   '
 



В качестве упражнения Вы легко можете написать процедуру делающее обратное преобразование
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #2 - 04. Марта 2010 :: 09:01
Печать  
Прилагается обработка которая меняет все такие процедуры (MaxID и MaxRowID обрабатываются по разному)
Обработка не является супероптимальной ни с точки зрения языка 1с ни с точки зрения t-sql но
этого и не требуется. Также из обработки исключены 1SUIDCTL
Если у Вас есть справочники которые часто полностью очищаются, то лучше их исключить из обработки.

В моей sql базе было изменено 164 процедуры из 164 т.е. у меня нет ни одной пустой таблицы.
Это изменение успешно работает на боевой базе недели 2-3.
База только оперативный учет. Посмотрел xp для бухгалтерии тоже должно все работать.
Может конечно кто-то это посчитает и ловлей блох ,а может кому то это и пригодится.

Также в качестве упражения Вы можете поискать в текстах xp еще места которые тоже можно оптимизировать
и сообщить нам об этом.


Коментарии вопросы пожелания критика приветсвуются.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #3 - 12. Марта 2010 :: 12:06
Печать  
Z1 писал(а) 04. Марта 2010 :: 08:59:
Проанализировал код и понял (случайно додумался) что в базе всегда есть документы

Оптимист...

А замеры-то что говорят? Какой прирост производительности и при каких операциях?
  
Наверх
www  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #4 - 16. Марта 2010 :: 12:48
Печать  
fez писал(а) 12. Марта 2010 :: 12:06:
Z1 писал(а) 04. Марта 2010 :: 08:59:
Проанализировал код и понял (случайно додумался) что в базе всегда есть документы

Оптимист...

А замеры-то что говорят? Какой прирост производительности и при каких операциях?


на замерах этого не увидите.
По любому выполняться будет быстрее причем эти проверки идут в монопольных табличных блокировках поэтому любое
улучшение окупается ( особенно TABX _1sjourn )


А что Вы сделаете если обнаружите в своей и/или чужой программе
мертвый код ?

Цитата:
Также в качестве упражнения Вы можете поискать в текстах xp еще места которые тоже можно оптимизировать
и сообщить нам об этом.
В одном из мест аналогичное улучшение дает на 3 логических чтения меньше и это относиться к модулю проведения
к очень часто повторяющейся операции.
И это далеко не предел.
оптимизация xp дает эффект даже больше чем оптимизация 1с кода ( естественно одно другого не заменяет а дополняет ).
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #5 - 17. Марта 2010 :: 09:13
Печать  
Z1 писал(а) 16. Марта 2010 :: 12:48:
По любому выполняться будет быстрее причем эти проверки идут в монопольных табличных блокировках поэтому любое
улучшение окупается ( особенно TABX _1sjourn )

Если улучшение на 0.001%, а для его достижения нужно потратить месяц работы - то я бы очень подумал на предмет его окупаемости.

Z1 писал(а) 16. Марта 2010 :: 12:48:
А что Вы сделаете если обнаружите в своей и/или чужой программе мертвый код ?

Если он совсем мертвый - удалю. Но не потому, что что-то будет работать быстрее, а потому что читать код станет проще.
Во-вторых, я не уверен, что удаленный тобой код - мертв. Иногда бывают ситуации, в которых таблички с документами пусты. И 1С, со своим ТИРАЖНЫМ продуктом не может игнорировать этот факт.

В-третьих. Почему я спрашиваю о замерах? Не потому, что я считаю твою модификацию бессмыссленной. А потому, что я хочу понять, насколько она оправдана в той или иной ситуации. В случае дефицита ресурсов нужно знать, куда тратить доступные ресурсы, чтобы добиться максимальной эффективности. Понимаешь мысль?
  
Наверх
www  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #6 - 17. Марта 2010 :: 09:32
Печать  
fez писал(а) 17. Марта 2010 :: 09:13:
Z1 писал(а) 16. Марта 2010 :: 12:48:
По любому выполняться будет быстрее причем эти проверки идут в монопольных табличных блокировках поэтому любое
улучшение окупается ( особенно TABX _1sjourn )

Если улучшение на 0.001%, а для его достижения нужно потратить месяц работы - то я бы очень подумал на предмет его окупаемости.

Работа уже сделана.
Стоимость внедрения практически нулевая.

Я не знаю сколько долей это составляет но когда таких мелочей много то это уже эффект.
Вот конкретный пример стандартная бухгалтерия 77
сколько раз в модуле проведения идет обращение к одним и тем же константам и даже периодическим константам ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #7 - 17. Марта 2010 :: 09:34
Печать  
Цитата:
Иногда бывают ситуации, в которых таблички с документами пусты.

Ты не понял сути subj
Если в конкретной таблице  SQL (а не документа 1с )есть хотя бы одна строка то проверки на NULL не нужны.
таблицы dt вообще не рассматриваются.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #8 - 17. Марта 2010 :: 09:41
Печать  
Цитата:
В-третьих. Почему я спрашиваю о замерах? Не потому, что я считаю твою модификацию бессмыссленной. А потому, что я хочу понять, насколько она оправдана в той или иной ситуации. В случае дефицита ресурсов нужно знать, куда тратить доступные ресурсы, чтобы добиться максимальной эффективности. Понимаешь мысль?

Мысль не понимаю.
Ты рассматриваешь задачу сколько с этого можно поднять денег.
с subj денег не очень подымишь потому что прийти и сказать кому либо заплатите мне много-много и у Вас будет на 1% быстрее это никто не поймет.

Я же рассматриваю задачу с точки зрения fiks сделать текущую базу как можно производительней.
И с этой точки зрения xp - это клад. Наверное эту мысль я и хотел сказать с помощью subj. Может Многие участники форума об этом даже и не подозревают.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #9 - 17. Марта 2010 :: 15:44
Печать  
Z1 писал(а) 17. Марта 2010 :: 09:32:
Я не знаю сколько долей это составляет

Вот это - единственное, чего не хватает в твоем исследовании. Со всем остальным я согласен и всячески одобряю.

Поверь мне, это недостающее знание - оно действительно очень важное. Возможно даже САМОЕ важное.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: небольшое улучшение - оптимизация 1с77 sql
Ответ #10 - 17. Марта 2010 :: 15:50
Печать  
Z1 писал(а) 17. Марта 2010 :: 09:41:
Ты рассматриваешь задачу сколько с этого можно поднять денег.

Нет. Ресурсы - это необязательно деньги.

Z1 писал(а) 17. Марта 2010 :: 09:41:
Я же рассматриваю задачу с точки зрения fiks сделать текущую базу как можно производительней.

Если у тебя есть в наличии неограниченное время (время - это тоже ресурс, причем в отличие от денег - невозобновляемый) - то вперед, без проблем.

Если же время ограничено, то стоит начать оптимизацию с проведения замера производительности и с поиска узких мест. Для того, чтобы сосредоточить свои усилия именно на этих узких местах. Чтобы за одно и то же потраченное время добиться большего эффекта.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать