Текущее время: Пн, июл 14 2025, 13:40

Часовой пояс: 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
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Хранить текущий статус задачи в отдельной таблице с ключом 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
Сообщения: 3080
Откуда: Москва
Обычно историю изменений полей хранят отдельно, см. таблицы 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
Сообщения: 180
Димкин написал(а):
На самом деле вот почти вся таблица (жирным выделены ключевые поля):
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
Сообщения: 3080
Откуда: Москва
Вообще первичный индекс странный - поля 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
Сообщения: 3080
Откуда: Москва
Rizor написал(а):
Возможно, доп поля в ключе служат как раз чтобы ограничить область поиска максимального status_tms . Тогда есть резон эти поля тоже использовать в выборке.

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

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


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

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


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

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


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

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