Текущее время: Чт, апр 18 2024, 07:10

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Тормозит выборка из таблицы
СообщениеДобавлено: Пт, ноя 25 2016, 14:53 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, апр 12 2006, 14:36
Сообщения: 60
Есть таблица хранения статуса задачи:
MANDT
CODE_TASK - задача
STATUS_TMS - время установки статуса
TASK_STATUS - статус задачи

Первые три поля - ключевые.
Нужно получить текущий (максимальный по времени установки) статус задачи.
Code:
      SELECT SINGLE * FROM ztask_stat AS t1 INTO wa WHERE
          code_task = in_code_task AND
          status_tms = ( SELECT MAX( status_tms ) FROM
                    ztask_stat WHERE code_task = t1~code_task).


Данных стало очень много и выборка стала тормозить.
Как-то можно ускорить? Индекс на STATUS_TMS поможет?
По одной задаче бывает 3-100 изменений статуса.
Или периодически перемещать старые статусы в ztask_stat_history?


Последний раз редактировалось Димкин Пт, ноя 25 2016, 16:51, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Пт, ноя 25 2016, 15:31 
Ассистент
Ассистент

Зарегистрирован:
Пн, дек 02 2013, 09:42
Сообщения: 33
Думаю быстрее будет выбрать таблицу по задаче в сортированную по времени внутренностную таблицу(по убыванию), и считать первую строку.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Пт, ноя 25 2016, 16:32 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Хранить текущий статус задачи в отдельной таблице с ключом MANDT/CODE_TASK
Пример в стандарте:
EDIDC-STATUS - текущий статус IDOC
EDIDS - таблица с историей статусов IDOC

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Пт, ноя 25 2016, 16:43 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Димкин написал(а):
Первые три поля - ключевые.
Нужно получить текущий (максимальный по времени установки) статус задачи.
Code:
      SELECT SINGLE * FROM ztask_stat AS t1 INTO wa WHERE
          code_task = in_code_task AND
          status_tms = ( SELECT MAX( status_tms ) FROM
                    ztask_stat WHERE code_task_wf = t1~code_task_wf).




А что за поле code_task_wf? и чем оно отличается от поля code_task?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Пт, ноя 25 2016, 16:55 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, апр 12 2006, 14:36
Сообщения: 60
Цитата:
А что за поле code_task_wf? и чем оно отличается от поля code_task?

Это я сделал опечатку поле одно и то же (код задачи). На самом деле в таблице больше данных, но не хотел делать сообщение сложным для восприятия.
На самом деле вот почти вся таблица (жирным выделены ключевые поля):
MANDT
CODE_TASK_WF - код задачи
GJAHR - год
POPER - период
BUKRS - БЕ
STATUS_TMS
- время установки статуса задачи
TASK_STATUS - статус задачи


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Пт, ноя 25 2016, 17:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Обычно историю изменений полей хранят отдельно, см. таблицы JEST и JCDS.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Ср, ноя 30 2016, 10:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
База какая? Какая таблица по размеру? План запроса смотрели?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Ср, ноя 30 2016, 12:15 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, апр 12 2006, 14:36
Сообщения: 60
ORACLE
Записей 32 млн
Вот план запроса.Изображение
Только я его не понимаю :(
Вроде сейчас смотрю не тормозит эта таблица. Может была нагрузка на базу большая


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Ср, ноя 30 2016, 12:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Ну план запроса оптимальный, на мой взгляд. Таблица маленькая и скорей всего все равно будет в кеше сидеть. Можно попросить админов индекс пересобрать в оракле, если будет тормозить сильно.

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Чт, дек 01 2016, 04:18 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 179
Димкин написал(а):
На самом деле вот почти вся таблица (жирным выделены ключевые поля):
MANDT
CODE_TASK_WF - код задачи
GJAHR - год
POPER - период
BUKRS - БЕ
STATUS_TMS
- время установки статуса задачи
TASK_STATUS - статус задачи


Я бы ещё попробовал перенести поле STATUS_TMS сразу после CODE_TASK_WF, а уже после них поставил бы GJAHR POPER BUKRS.
Но это если других запросов по текущему ключу нет.
Если другие запросы есть и менять их нельзя, то добавил бы индекс по CODE_TASK_WF и STATUS_TMS.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Чт, дек 01 2016, 08:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Вообще первичный индекс странный - поля GJAHR и POPER лишние, т.к. есть STATUS_TMS и получается, что за одну дату статус может храниться только один раз для одной БЕ...
И непонятно, код задачи может быть одинаковым для разных БЕ, или он уникальный?
По-хорошему нужно сделать короткий первичный ключ и несколько вторичных - например в одном указать БЕ, год, период, а во втором - дату.
Кроме этого, в подзапросе используется поле code_task_wf, а в основном запросе - code_task...

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Чт, дек 01 2016, 10:44 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 01 2013, 10:27
Сообщения: 35
Возможно, доп поля в ключе служат как раз чтобы ограничить область поиска максимального status_tms . Тогда есть резон эти поля тоже использовать в выборке. Что - то наподобие :
Code:
  SELECT * FROM ztask_stat INTO wa UP TO 1 ROWS
    WHERE code_task_wf = in_code_task
      AND bukrs = in_bukrs
    ORDER BY gjahr poper status_tms DESCENDING.
  ENDSELECT.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Тормозит выборка из таблицы
СообщениеДобавлено: Чт, дек 01 2016, 12:54 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Rizor написал(а):
Возможно, доп поля в ключе служат как раз чтобы ограничить область поиска максимального status_tms . Тогда есть резон эти поля тоже использовать в выборке.

Но не в первичном же индексе они должны быть :wink:

_________________
С уважением,
Удав.


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

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


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

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


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

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