Время выполнения update в 8.10 MS SQL

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
mgl
заказчик
Сообщения: 178
Зарегистрирован: Чт, 20/09/2007 07:40
Имя Фамилия: Михаил Львович
Откуда: Мелькомбинат
Контактная информация:

Время выполнения update в 8.10 MS SQL

Сообщение mgl »

Время выполнения данного update в версии 5.8502 (MS SQL) не превышало 10 минут, в версии 8.1 выполняется 20 минут. Из за чего непонятно, может быть мы что-то не так написали? Будем благодарны за помощь.

update in soprhoz
where ((soprhoz.cstepdoc==stepdoc.nrec and stepdoc.cbasedoc==basedoc.nrec and
soprhoz.csoprdoc==plpor.nrec)) and
soprhoz.summa>0 and
(soprhoz.tidkgal=2 or soprhoz.tidkgal=7 or (soprhoz.tidkgal=10 and soprhoz.modedoc=1024)) and
basedoc.ddoc>plpor.datob and soprhoz.datob<>basedoc.ddoc
set soprhoz.datob:=basedoc.ddoc;
masygreen
партнер
Сообщения: 112
Зарегистрирован: Чт, 20/03/2008 09:10
Имя Фамилия: Максим Черепанов
Откуда: IT
Контактная информация:

Сообщение masygreen »

Может быть слова на ветер .. но попробуйте подобрать индексы для ограничения .. особенно по датам..
вообщем поменяйте запрос на выборку указав явно нужный индекс
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

Интересно, как такую ситуевину по датам ограничить индексно.
Видимо, Михаил весь soprhoz целиком каждый раз проверяет - так надежнее...
А пока все сцепки не отработают, нужное условие не получить..
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

:-) На самом скуле job настройте с таким селектом - дешево и сердито )
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

я бы попробовал условия по soprhoz вдуть внутрь (( )) с флагом (noindex)
понятно, что условия or так не сделаешь, так что если много записей с другими tidkgal, то лучше 3 запроса прогонять
оптимальность написания можно проверять по сиквел-профайлеру - в запрос должны попадать эти ограничения
masygreen
партнер
Сообщения: 112
Зарегистрирован: Чт, 20/03/2008 09:10
Имя Фамилия: Максим Черепанов
Откуда: IT
Контактная информация:

Сообщение masygreen »

нет noindex использовать не надо ... это только затормозит ...смотрите в сапоорте индексы подходящие для ограничений - чтоб большая часть отфильтровалась это даты .. а остальное в цикле сравнивайте внутри _loop
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

Уж лучше тогда на корневом узле с помощью конструкции Root запихнуть
(soprhoz.tidkgal=2 or soprhoz.tidkgal=7 or (soprhoz.tidkgal=10 and soprhoz.modedoc=1024))
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

noindex надо использовать если нет подходящих индексов
в принципе, механизм подбора индексов анализирует и условия с noindex, просто они не являются обязательными
понятно, что раз условия на корневую таблицу, то накладывать их надо через root
но, опять таки, если наложить логическое выражение через or, то оно на сервер не уйдёт, а будет обрабатываться на клиенте
через == условия по or наложить нельзя
так что остаётся разбить запрос на несколько, по количеству or'ов, в каждом из которых подцепить root по ==
а уж с noindex или без - это надо бд смотреть, есть там подходящий индекс или нет
Seybukan
партнер
Сообщения: 85
Зарегистрирован: Чт, 20/09/2007 12:53
Имя Фамилия: Алексей Семенов
Откуда: ЭП-Аудит
Контактная информация:

Сообщение Seybukan »

set soprhoz.datob:=basedoc.ddoc;

Это случайно не для даты проводок?
mgl
заказчик
Сообщения: 178
Зарегистрирован: Чт, 20/09/2007 07:40
Имя Фамилия: Михаил Львович
Откуда: Мелькомбинат
Контактная информация:

Сообщение mgl »

Да, нам надо если дата платежа меньше даты отгрузки и не в одном месяце, то дата хозоперации должна быть равна дате отгрузки
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

mgl писал(а):Да, нам надо если дата платежа меньше даты отгрузки и не в одном месяце, то дата хозоперации должна быть равна дате отгрузки
А зачем это..Хозоперация относится в конкретному платежу (в Вашем случае авансовому..) логично что дата хозоперации соответствовала дате из платежки такой.
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

cruger писал(а): ....понятно, что раз условия на корневую таблицу, то накладывать их надо через root
но, опять таки, если наложить логическое выражение через or, то оно на сервер не уйдёт, а будет обрабатываться на клиенте
через == условия по or наложить нельзя
так что остаётся разбить запрос на несколько, по количеству or'ов, в каждом из которых подцепить root по ==
а уж с noindex или без - это надо бд смотреть, есть там подходящий индекс или нет

Ну уж о таких нюансах тока из Ваших уст можно узнать, Федор.
Я дак думал что на Root анализируются необходимые условия и только при наступлении оного далее проверяется вся совокупность == во where(( )) между таблицами. Оказывается немножко не так (
Seybukan
партнер
Сообщения: 85
Зарегистрирован: Чт, 20/09/2007 12:53
Имя Фамилия: Алексей Семенов
Откуда: ЭП-Аудит
Контактная информация:

Сообщение Seybukan »

В данном пируете с данными нет необходимости при должной настройке системы.
Проводки по зачету аванса нада делать в накладной.

Но все же, если вам уж очень нада, то лучше использовать функционал ТХО. В 8.10 есть функция которая может проставить дату в проводку:
TxoSetDate - Заполнить значение даты.
О его использовании надо в другую ветку.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

root - это способ указать для корневой таблицы запроса что-то такое, что для подцепляемой указывается при подцепке

а при подцепке обычно указываются фильтры, которые накладываются именно на узел
zzz == table.field and
(filter_condition)

и вот если на корень ограничений никаких нет, то как указать узловой фильтр? только через root

но в случае с noindex (или индексной подцепкой), очевидно, root не нужен

зы. есть условия, которые проверяются до навигации по таблицам
указываются они в фильтре на всю логическую таблицу
из всех наложенных там фильтров выбираются те, которые никак не зависят от узлов, и вот они-то и проверяются перед навигацией (в данном случае речь идёт о навигации по всей лт, а не по отдельным узлам)
Ответить