Как определить, сколько временных табличных пространств будет использовать мой запрос? - PullRequest
1 голос
/ 10 апреля 2020

У меня проблема с одним запросом, который заканчивается результатом: «невозможно увеличить временный сегмент на 128 в табличном пространстве TEMP». Я немного его оптимизировал, но все же мне нужно проверить, достаточно ли этой оптимизации. Есть ли способ проверить, сколько табличного пространства использовалось до и после оптимизации? План объяснения говорит мне, что теперь лучше, но, к сожалению, не сообщит мне информацию о табличном пространстве.

Моя база данных oracle 11g.

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Иногда план объяснения показывает, сколько пространства TEMP оценивается для использования, но, по моему опыту, эти оценки иногда во много раз превышают используемые. И есть много факторов, которые будут влиять на то, сколько места потребуется от одного выполнения к другому. Но вы можете сделать EXPLAIN PLAN для ваших различных изменений и искать результат с небольшим пространством TEMP или без него. Просто имейте в виду, что даже если в выходных данных плана не указано, что он будет использовать пространство TEMP, это может произойти при фактическом вызове.

Вы можете использовать пакет dbms_xplan для запроса используемой памяти, если у вас есть параметр базы данных pga_aggregate_target установите ненулевое значение:

select * from table(
    dbms_xplan.display_cursor(sql_id=>'dwgxfu778vgn8', 
        format=>'allstats, memstats'));

Лучше всего искать возможные способы исключить использование TEMP, например, не указывать ORDER BY, если это возможно. Кроме того, ha sh -соединения могут использовать много памяти.

0 голосов
/ 14 апреля 2020

Я не уверен, что это поможет или нет, но я использую Toad для Oracle, чтобы управлять использованием моих табличных пространств. Оттуда вы можете увидеть время использования и просто увеличить размер, если требуется.

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