Создание чрезвычайно большого индекса в Oracle - PullRequest
0 голосов
/ 20 января 2010

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

Руководство администратора базы данных Oracle: создание большого индекса

Вот что я придумала ...

CREATE TEMPORARY TABLESPACE ts_tmp 
TEMPFILE 'E:\temp01.dbf' SIZE 10000M 
REUSE AUTOEXTEND ON EXTENT MANAGEMENT LOCAL;

ALTER USER me TEMPORARY TABLESPACE ts_tmp;

CREATE UNIQUE INDEX big_table_idx ON big_table ( record_id );

DROP TABLESPACE ts_tmp;

Редактировать 1

После создания этого индекса я запустил план объяснения для простого запроса и получил следующую ошибку:

ORA-00959: tablespace 'TS_TMP' does not exist

Кажется, это совсем не временно ...: (

Ответы [ 3 ]

5 голосов
/ 20 января 2010
CREATE TEMPORARY TABLESPACE ts_tmp 
TEMPFILE 'E:\temp01.dbf' SIZE 10000M 
REUSE AUTOEXTEND ON EXTENT MANAGEMENT LOCAL;

Это создает временное табличное пространство (область на диске, где будут храниться промежуточные результаты сортировки). Индекс - это отсортированный набор данных, а для сортировки требуется много места.

«Временный» здесь означает, что данные, которые хранятся, носят временный характер, а не то, что само табличное пространство является временным. Представьте, что каталог /tmp в Unix или %TEMP% свернут в Windows: сам каталог / папка является постоянным, но данные, хранящиеся в нем, являются временными.

REUSE означает, что не происходит сбой, если файл уже существует (обычно используется, когда имя файла указывает на необработанное устройство, такое как неформатированный раздел диска, чтобы избежать издержек OS на управление файлами). Вместо этого он просто откроет файл для записи и заполнит его новыми данными. Если бы не это предложение, команда не выполнялась бы, если бы существовал файл с указанным именем.

AUTOEXTEND ON означает «увеличить файл, если требуется». Если вы выключите его, а 10Gb будет недостаточно для операции сортировки, табличное пространство не увеличится автоматически и операция не будет выполнена.

EXTENT MANAGEMENT LOCAL означает, что макет табличного пространства хранится в самом табличном пространстве (не в системных таблицах). Не уверен насчет 11g, но в предыдущих версиях Oracle этот параметр не был доступен для временных табличных пространств.

ALTER USER me TEMPORARY TABLESPACE ts_tmp;

Это заставляет пользователя me использовать вновь созданное временное табличное пространство в качестве временного носителя хранения

CREATE UNIQUE INDEX big_table_idx ON big_table ( record_id );

Это просто создает индекс.

DROP TABLESPACE ts_tmp;

Это отбрасывает временное табличное пространство.

Перед запуском сценария выясните текущее табличное пространство по умолчанию:

SELECT  temporary_tablespace
FROM    dba_users
WHERE   username = 'ME'

Скорее всего, вернется TEMP.

Перед удалением ts_tmp верните временное табличное пространство по умолчанию для пользователя:

ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned.
0 голосов
/ 20 января 2010

HWM (верхний предел) увеличивается, что в зависимости от того, как вы рассчитываете использование, выглядит полным - для просмотра правильного использования табличных пространств TEMPORARY используйте представления V $ SORT_USAGE и V $ SORT_SEGMENT.

0 голосов
/ 20 января 2010

Существует небольшой секрет о оракуле, табличном пространстве, он только увеличивается в оракуле и никогда не уменьшится в размере. Здесь они пытаются избежать этой ситуации, поэтому он создает временное табличное пространство и использует его. это табличное пространство, чтобы создать индекс и затем отбросить его.

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