Текущее время: Сб, июл 26 2025, 04:19

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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