Текущее время: Сб, авг 23 2025, 23:03

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Индексы на инфо-объекты
СообщениеДобавлено: Ср, ноя 21 2007, 17:49 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
Коллеги.
Идёт обновление цели данных и выбор на правилах данных из основных данных другого инфообъекта по неключевому значению.
Работает не быстро, особенно если помножить на много записей.
Чтобы ускорить, вижу вариант создать индекс на таблицу инфо-объекта по выбираемому полю.

Кроме того. что понадобится ключ на объект - какие проблемы могут возникнуть?
Какие есть альтернативные варианты ускорения выборки?

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: есть несколько вариантов.
СообщениеДобавлено: Чт, ноя 22 2007, 16:23 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 13 2005, 10:41
Сообщения: 558
Откуда: Гондурас (округ Москвы)
Пол: Мужской
в порядке убывания важности.

1. подпрограммой на правилах обновления - обрабатываем все записи пакета, предварительно загрузив требуемый ракурс данных второго инфо-объекта во внутреннюю таблицу, подойдет вам или нет трудно сказать.

2. индекс, но надо делать непосредственно в продуктиве, открывать на изменения систему. потом желательно убедиться (если ускорение незаметно), что он используется (смотрим трассировку и план запроса в st05).

3. буферизация таблиц мастер-данных, не факт, что поможет, тут надо смотреть на статистику.

P.S. есть еще варианты.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: еще важно
СообщениеДобавлено: Чт, ноя 22 2007, 17:42 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 13 2005, 10:41
Сообщения: 558
Откуда: Гондурас (округ Москвы)
Пол: Мужской
важно перед тем как индексировать, посмотреть трассировку в st05 для запроса чтения мастер данных, найти нужный SQL-запрос, важно знать, какую конкретно таблицу читаем (P-,X-,Y-...). после этого надо в st05 зайти в SQL и посмотреть план запроса, если есть "full table scan", то индекс нужен практически 100%. далее читайте НОТЫ =)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 03 2007, 16:14 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
Спасибо. Где-то так и думал, что можно всё, только нужно с головой делать.

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: да, но как обычно, есть вилы
СообщениеДобавлено: Вт, дек 04 2007, 10:27 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 13 2005, 10:41
Сообщения: 558
Откуда: Гондурас (округ Москвы)
Пол: Мужской
не знаю точно, может какую галку надо в переносе поставить, но если будешь заново переносить инфо-объект, на таблицах которого в продуктиве построены вторичные индексы, то BW убивает все из словаря и БД. поэтому надо либо как-то настроить перенос (если это вообще возможно), либо писать скрипт, создающий эти индексы как в словаре, так и в БД заново.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: да, но как обычно, есть вилы
СообщениеДобавлено: Вт, дек 04 2007, 10:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, июн 24 2005, 15:18
Сообщения: 1216
Откуда: Diagon Alley
Добавлю свои 5 копеек.

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

REPORT Z_INDEX.

*----------------------------------------------------------------------*
* Selection screen
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_TABN TYPE TABNAME OBLIGATORY,
P_INDEX TYPE INDEXID OBLIGATORY.

PARAMETERS: P_CRT TYPE C RADIOBUTTON GROUP G1,
P_DEL TYPE C RADIOBUTTON GROUP G1.
SELECTION-SCREEN END OF BLOCK B1.

*----------------------------------------------------------------------*
* Main code
*----------------------------------------------------------------------*
START-OF-SELECTION.

* Create index
CASE 'X'.
WHEN P_CRT.
CALL FUNCTION 'DD_CREATE_INDEX'
EXPORTING
INDEXNAME = P_INDEX
TABNAME = P_TABN
EXCEPTIONS
BASETAB_ERROR = 1
DB_ERROR = 2
DD_ERROR = 3
INDEX_EXISTS = 4
OTHERS = 5.

* Delete index
WHEN P_DEL.
CALL FUNCTION 'DD_DROP_INDEX'
EXPORTING
TABNAME = P_TABN
INDEXNAME = P_INDEX
EXCEPTIONS
INDEX_NOT_DROPPED = 1
PROGRAM_NOT_GENERATED = 2
PROGRAM_NOT_WRITTEN = 3
OTHERS = 4.

ENDCASE.

_________________
"Если ты в молодости не испытал трудности, их стоит купить за большие деньги". (с) Даймо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: да, но как обычно, есть вилы
СообщениеДобавлено: Ср, янв 23 2008, 10:35 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
RSA1 написал(а):
Добавлю свои 5 копеек.

Можно в цепочке процессов перед загрузкой данных сначала "убивать" индекс а после загрузки воссоздавать вновь....

Спасибо за код. Это хорошо для своих табличек. А каким ФМ можно определить и создать индекс "с нуля"?
На DEV системе идёт постоянная перегенерация объектов и BW таблички пересоздаются, "забывая" о созданных собственных индексах. А потом ищешь причину резкого падения производительности :cry:

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: да, но как обычно, есть вилы
СообщениеДобавлено: Ср, янв 23 2008, 11:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Zharik написал(а):
Это хорошо для своих табличек.

А чем таблицы признака принципиально отличаются от "своих"?
Zharik написал(а):
А каким ФМ можно определить и создать индекс "с нуля"?

Видимо этим же.

Zharik написал(а):
На DEV системе идёт постоянная перегенерация объектов и BW таблички пересоздаются, "забывая" о созданных собственных индексах. А потом ищешь причину резкого падения производительности :cry:

Тогда этот код тебе и нужен.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: еще важно
СообщениеДобавлено: Ср, янв 23 2008, 11:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
bwbams написал:
если есть "full table scan", то индекс нужен практически 100%

Это при учете, селективность (отношение размера выборки к размеру таблиц) низкая.
Например, если идет "full table scan" по полю bool ("" или "Х" - селективность высокая), то от индекса станет только хуже.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 23 2008, 11:40 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
Как раз имею ввиду индекс не по первичному ключу, а по произвольным полям. Когда идёт перегенерация инфо-объекта, то может пересоздаваться сама таблица и информации об индексах не остаётся.
Эти ФМ удаляют/восстанавливают индексы из DB, оставляя определение в DD.

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 23 2008, 11:54 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Тогда прошу прощения.
1. Можно попробовать банально SQL-оператором индексы создать
2. Отдебажить "инструментальное" создание индексов.

И еще. Поскольку ораклом не занимался, изучил вопрос по селективности можно не переживать оптимизатор работает намано и сам отрубает индексы.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 23 2008, 12:00 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
Да как-то в решении, которое будет ещё, возможно, продаваться использовать native SQL стрёмно.

Тут как-раз идея заставить app server взаимодействовать с oracle, чтобы они как бы одинаково думали. Каждый запрос проверяется на использование индексов в ST05.

Должен же быть ФМ создания.... Хотя тут ответ простой - есть место откуда можно потрейсить :lol: Вопрос времени, как обычно.

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 23 2008, 13:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Zharik написал(а):
Да как-то в решении, которое будет ещё, возможно, продаваться использовать native SQL стрёмно.

С соблюдением стандарта (SQL92) ничего стремного не вижу. Ей богу в дебаге инструментария где-то натыкался именно на такое решение. Вот только не помню, индексы это были или нет. Правда там были завязки на СУБД.

_________________
Глаза боятся, а руки крюки


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

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


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

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


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

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