Текущее время: Пт, июл 25 2025, 04:14

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: оптимизация vbak
СообщениеДобавлено: Пн, дек 07 2009, 16:49 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, мар 13 2007, 22:57
Сообщения: 71
есть запрос к vbak, который дольше всего выполняется в задаче.

Code:
SELECT  ( набор 15 полей)          FROM vbak
           APPENDING CORRESPONDING FIELDS OF TABLE t_vbak_vbap
                           WHERE  vkorg = sb_org AND
                                  vtweg = canal AND
                                  vkbur IN zvkbur AND 
                                  spart = sector AND
                                  vkgrp IN zvkgrp AND
                                  vbtyp =  def_vbtyp_g AND 
                  guebg BETWEEN period_min AND period_max.


в часто встречаемых выборках все поля заполнены.

создан индекс:
VKORG Сбытовая организация
VTWEG Канал сбыта
VKBUR Отдел сбыта
SPART Сектор
VKGRP Группа сбыта
VBTYP Тип ДокумСбыта
GUEBG ДатаВступлСилу (ДолгосрочнДоговор/ассортимент)
VDATU Требуемая дата поставки

который, судя по плану запроса используется.
как еще его можно оптимизировать эту выборку?

Пономарев Артем: пользуйтесь тегами для оформления кода, пожалуйста


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Пн, дек 07 2009, 17:22 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Должно работать достаточно быстро.
Я бы выкинул из индекса VDATU и GUEBG.

План запроса можете кинуть и кол-во записей в vbak?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Пн, дек 07 2009, 17:31 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, мар 13 2007, 22:57
Сообщения: 71
Пономарев Артем написал:
Должно работать достаточно быстро.
Я бы выкинул из индекса VDATU и GUEBG.

План запроса можете кинуть и кол-во записей в vbak?

SELECT
"VBELN" , "VBTYP" , "VKORG" , "VTWEG" , "VKBUR" , "VKGRP" , "GUEBG" , "ZZTEXT_KORKI" ,
"VBELN_GRP" , "BSTNK" , "KTEXT" , "ERNAM" , "ERDAT" , "ERZET" , "AUART" , "VDATU" , "GUEEN" ,
"ZZDATA_OPL" , "ZZREGIO" , "ZZLAND1" , "WAERK"
FROM
"VBAK"
WHERE
"MANDT" = :A0 AND "VKORG" = :A1 AND "VTWEG" = :A2 AND "VKBUR" = :A3 AND "SPART" = :A4 AND "VKGRP"
BETWEEN :A5 AND :A6 AND "VBTYP" = :A7 AND "GUEBG" BETWEEN :A8 AND :A9


Execution Plan


Code:
SELECT STATEMENT ( Estimated Costs = 2 , Estimated #Rows = 1 )                                                 
                                                                                                               
     5  3 FILTER                                                                                               
          Filter Predicates                                                                                     
                                                                                                               
         5  2 TABLE ACCESS BY INDEX ROWID VBAK                                                                 
              ( Estim. Costs = 2 , Estim. #Rows = 1 )                                                           
              Estim. CPU-Costs = 2.849 Estim. IO-Costs = 1                                                     
                                                                                                               
                1 INDEX RANGE SCAN VBAK~005                                                                     
                  ( Estim. Costs = 4 , Estim. #Rows = 1 )                                                       
                  Search Columns: 8                                                                             
                  Estim. CPU-Costs = 21.365 Estim. IO-Costs = 3                                                 
                  Access Predicates Filter Predicates


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Пн, дек 07 2009, 17:37 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
MANDT добавьте в индекс.

По таймингам вроде вполне удобоваримо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Пн, дек 07 2009, 17:39 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, мар 13 2007, 22:57
Сообщения: 71
Пономарев Артем написал:
MANDT добавьте в индекс.

По таймингам вроде вполне удобоваримо.

он там есть, разумеется


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Пн, дек 07 2009, 18:21 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Я думаю, что вопрос в количестве записей, возвращаемых данным запросом.
В индекс включены абсолютно все поля из запроса, так что тормозить может только сама выборка из индекса.
Если запрос возвращает большое количество записей, то и работать он может достаточно долго.
Еще всегда смущают конструкции IN, так как RANGE может быть пуст и выборка по индексу может получиться "дырявой". Да и план запроса может меняться для разных типов RANGE, что при большом количестве может снижать производительность.
В приведенном примере 1-й RANGE типа BT (тоже не самый быстрый вариант), а второй просто EQ.

Еще пришло в голову:
Может быть в таблице vbak 90% записей с одними и теми же значениями VKORG, VTWEG, VKBUR, SPART, VKGRP, VBTYP (или несколько первых из этих полей), тогда может и не стоит добавлять эти поля в индекс.

Еще можно эту статейку почитать, некоторые основные принципы при построении индексов:
http://www.intuit.ru/department/database/rdbdev/11/3.html

Вообще сложность совета заключается в том, что оптимизация часто делается на месте и для конкретного случая.
Было бы проще, если бы были известны следующие данные:

1. Cколько уникальных значений получится, если выполнить запрос SELECT COUNT( DISTINCT <все поля индекса> )
2. Общее количество записей в vbak
3. Код программы
4. Какие бывают RANGES zvkbur и zvkgrp
5. Сколько данных в среднем возвращает такой запрос. Если миллион записей, а в таблице сотни миллионов, то быстро вряд ли получится.

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Пн, дек 07 2009, 21:05 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Посмотрите еще в сторону таблицы VAKGU. Может случиться, что она у вас заполняется.

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Пт, дек 11 2009, 09:59 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, мар 13 2007, 22:57
Сообщения: 71
Jelena написала:
Посмотрите еще в сторону таблицы VAKGU. Может случиться, что она у вас заполняется.


она как-то заполнена, а чем она может помочь, я не совсем понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: оптимизация vbak
СообщениеДобавлено: Сб, дек 12 2009, 00:39 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
birds написал(а):
Jelena написала:
Посмотрите еще в сторону таблицы VAKGU. Может случиться, что она у вас заполняется.

она как-то заполнена, а чем она может помочь, я не совсем понимаю.

У нее primary key уж очень похож на ваш запрос. Если речь идет о контрактах, то TRVOG = 4, а DATAB и DATBI скорее всего соответствуют с VBAK-GUEBG/GUEEN. Уже по этим полям вы сразу радикально уменьшите количество выбираемых записей. Проанализируйте свои данные.

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB