Произойдет ли выделение глобального временного табличного пространства при запуске сеанса? - PullRequest
0 голосов
/ 06 ноября 2019

Я нашел эту информацию из Дональд Бурлесон =>
Обратите внимание, что все строки глобальных временных таблиц передаются непосредственно в рабочую область PGA, прежде чем они попадут в табличное пространство TEMP, а Oracle не создаетвременный сегмент, если операция может быть выполнена в памяти. Однако, если выделено ОЗУ PGA, база данных автоматически выделяет временный сегмент на диске.
Означает ли это, что в начале сеанса, в котором использовался первый PGA, не было выделено места?
Требуется мнение экспертов.

1 Ответ

0 голосов
/ 06 ноября 2019

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

Session 1

SQL> create global temporary table GTT
  2   ( x int, y int )
  3  on commit preserve rows;

Table created.

SQL> insert into gtt values (1,2);

1 row created.

Session 2

SQL> select * from gtt;

no rows selected

Каждый сеанс имеет свои собственные "экземпляры" таблицы и свои данные. входит в область памяти для этого сеанса в одиночку. Итак, выше, сеанс 1 будет использовать несколько байтов PGA для своих 2 строк, а сеанс 2 не будет использовать байты для своей пустой таблицы.

В любом случае данные сохраняются в памяти до такой точки, какбаза данных решает, что слишком много PGA для этого сеанса используется. Затем данные сеансов начнут использовать временный сегмент на диске. Допустим, предел был «1 строка» (очевидно, его больше), тогда в приведенном выше примере сеанс 1 начал бы записывать на диск, а сеанс 2 - нет.

Надеюсь, что это поможет прояснить ситуацию.

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