Что может привести к тому, что SQL equerry будет работать значительно дольше на разных машинах Oracle с одинаковым ПО и ПО - PullRequest
0 голосов
/ 20 июня 2019

Я использую процедуру PL SQL для агрегирования данных с 4 серверов в одно место, и ее производительность на одном из серверов значительно ниже. У меня есть этот относительно простой запрос для сбора данных из журнала аудита:

Индексы в порядке, объем строк на четвертом сервере немного больше, но не для того, чтобы вызывать эту разницу, такое же оборудование, тот же Linux, та же версия Oracle (Oracle 11.2.0.4.0), та же структура таблицы и индексов. Индексы могут использоваться, одинаковое разбиение.

INSERT INTO app_stats_agg_hourly (SHIPMENTS, event_datetime, COUNTRY, data_type, event_type, collection_time, INSTANCE)

    SELECT COUNT(*) as SHIPMENTS, TRUNC(event_datetime,'HH24') as event_datetime,COUNTRY,data_type,event_type,load_run_start,v_region
    FROM APP_AUDIT
    WHERE   
            event_type in ('FromApp','ToError','ToApp','Generate','FromCorr')
        and  event_datetime > last_collection
        and  event_datetime <=  last_event

    GROUP BY TRUNC(event_datetime,'HH24'),COUNTRY,data_type,event_type;

Работает хорошо и точно, как и ожидалось. Переменные last_collection и last_event инициализируются ранее в процедуре. Этот код выполняется в течение минуты или двух на 3 из 4 серверов и полчаса на четвертом.

После долгого исследования я обнаружил, что я использую переменные TIMESTAMPS, а в столбце event_datetime указывается дата. Если я использую дату, это работает как шарм. Мой вопрос - что заставляет это работать по-другому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...