Oracle DBA Forum  

Вернуться   Oracle DBA Forum > Работа > Архитектура

Ответ
 
Опции темы Опции просмотра
  #11  
Старый 22.12.2011, 20:12
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Создание табличного пространства для временных сегментов

Большая часть табличных пространств базы данных будет содержать постоянные объекты, которые будут храниться в базе данных продолжительно время. Однако потребуется и специальное табличное пространство для хранения временных сегментов. Если при создании базы данных не было создано временное табличное пространство по умолчанию, можно создать табличное пространство для хранения временных объектов. Это необходимо по двум причинам. Во первых, следует воспользоваться предоставляемым Oracle преимуществом более эффективного использования сегментов сортировки по сравнению с временными сегментами. Во-вторых, нельзя допустить создание постоянного объекта базы данных, например таблицы или индекса с данными, в табличном пространстве, используемом для временных сегментов. Не забывайте о существовании ряда важных ключевых слов для создания временного табличного пространства.

Код:
SQL> CREATE TEMPORARY TABLESPACE temp
TEMPFILE /u06/oradata/oracle/temp01.dbf SIZE 300M
Extent management local;
Еще один способ создания временного табличного пространства вставить ключевое слово temporary в конце команды create tablespace. Обратите внимание, что при создании временного табличного пространства таким способом мы используем ключевое слово datafile, а не tempfile.


SQL>CREATE TABLESPACE temp
DATAFILE /u06/oradata/oracle/temp01.dbf SIZE 300M
TEMPORARY;

Подобно постоянным табличным пространства, после создания ваше временное табличное пространство будет автоматически переведено в оперативное состояние. Состояние временного табличного пространства можно посмотреть в представлении словаря данных DBA_TEMP_FILES. Столбец CONTENTS этого представления покажет, является табличное пространство временным или нет.

Все табличные пространства в базе данных будет использовать определенный для базы данных стандартный размер блока. Стандартный размер блока размер блока Oracle, определяемый параметром DB_BLOCK_SIZE. Однако можно также создавать табличное пространство с нестандартным размером блока. Это может пригодится при транспортировке табличного пространства между базами данных с различным размером блока. Чтобы использовать нестандартные размеры блока, необходимо сконфигурировать в буферном КЭШе SGA субкэши для предполагаемых нестандартных размеров блока. Существуют определенные ограничения, налагаемые платформой, а некоторые платформы могут вообще не поддерживать это.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #12  
Старый 22.12.2011, 20:13
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Задаваемые по умолчанию опции памяти.

Фраза default storage определяет применяемы к вновь созданным объектам базы данных опции памяти, если они не указаны в команде create. Опции initial и next определяют размер начального сегмента объекта и следующего выделяемого экстента соответственно. Если для табличного пространства, в которое вы помещаете объекты, задан минимальный экстент, а заданное для следующего объекта базы данных значение меньше минимального экстента, Oracle округляет значение до следующего наибольшего кратного для минимального экстента и создает начальных или следующий экстент такого размера. Это свойство позволяет снижать фрагментацию табличного пространства.

Это действительно старый способ. Назначение локально управляемых однородных экстентов обеспечит все преимущества новой технологии.
Опции minextents и maxextents определяют минимальное им максимальное число экстентов, которое объект может назначить в табличном пространстве. Если задать minextents больше единицы, а в табличном пространстве будет более одного файла данных, Oracle станет распределять экстенты по нескольким файлам данных, что может повысить производительность, если эти файлы данных находятся на разных дисковых ресурсах.

Наконец, pctincrease позволяет определить в процента увеличение пространства, назначенного для следующего экстента в объекте. Например, если next задан равным 200 Кбайт, а pctincrease 50,размер второго экстента будет 200 Кбайт, третьего 300 Кбайт, четвертого 450 Кбайт. Минимальное значение 0, а заданное по умолчанию 50. Вычисляемое значение округляется до следующего блока данных, который равен пятикратному значению DB_BLICK_SIZE. Чтобы все экстенты были одного размера, задайте pctincrease равным 0.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #13  
Старый 22.12.2011, 20:13
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Изменение размера табличного пространства

После создания табличного пространства, существует несколько различных способов изменить его размер.
Первый добавить новые файлы данных в табличное пространство. Эта задача решается с помощью команды alter tablespace add datafile. Можно добавить к табличному пространству столько файлов, сколько нужно.

Рассмотрим пример увеличения размера табличного пространства путем добавления файлов данных:
Код:
SQL> Alter TABLESPACE data ADD DATAFILE
G:\oradata\Oracle\data03.dat SIZE 50M;
Продолжительность времени, необходимого Oracle для завершения этой операции, зависит непосредственно от размера добавляемого файла данных.

Другое ограничение касается следующего свойства maxdatafiles. Если добавлено максимальное число файлов данных, разрешенных для базы данных в соответствии с этим параметром, а вам все равно не хватает места, можно увеличить размер существующих файлов данных в табличном пространстве с помощью ключевого слова resize. При наличии достаточного пространства в файловой системе изменение размеров файла данных в большую сторону редко вызывает трудности. Как правило, можно также уменьшать размеры файла данных, удаляя файлы данных с помощью команды alterdatabase datafile filename offlline drop или изменяя размеры файла данных в меньшую сторону. Это не всегда безопасно, особенно если файл данных содержит принадлежащие объектам базы данных сегменты или экстенты. Пытаясь выполнять такие операции, будьте особенно осторожны. Изменение размеров файла данных в большую сторону выполняется для отдельных файлов данных, а не на уровне табличного пространства. Для этого введите следующую команду:

Код:
SQL>  ALTER DATABASE DATAFILE
G:\oradata\Oracle\data03.dat
RESIZE 1088M;
Третий способ увеличить размер существующих файлов данных использовать свойство autoextend в Oracle. Такой пример мы уже рассматривали. Как и при изменении размеров файлов данных, свойство autoextend применяется к индивидуальным файлам данных, а не к табличному пространству, содержащему этот файл данных. Автоматическое расширение файла данных выполняется с помощью следующей команды:

Код:
SQL>  ALTER DATABASE DATAFILE


G:\oradata\Oracle\data03.dat
AUTOEXTEND ON NEXT 100M MAXSIZE 1988M;
Отметим несколько важных свойств фразы autoextend. Во-первых, определяется размер следующего блока пространства, которое Oracle займет для файла данных с помощью фразы next. В этом примере мы даем Oracle указание брать по 100 Мбайт всякий раз, когда потребуется расширить размер файла данных. Во-вторых, с помощью фразы maxsize, мы сообщаем Oracle максимальный размер, до которого сможет дорасти файл данных. Указанное в этой фразе значение должно превышать текущий размер файла данных.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #14  
Старый 22.12.2011, 20:13
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Назначение пространства временным сегментам

Напомним, что временные сегменты могут размещаться и в постоянно и во временном табличном пространстве. Эти функциональнее возможности обеспечиваются для обратной совместимости; однако всегда следует проектировать базы данных так, чтобы временные сегменты размещались во временных табличных пространствах, а постоянные сегменты в постоянных табличных пространствах. Нельзя поместить постоянный объект базы данных (например, таблицу) во временное табличное пространство. Можно переводить табличное пространство то в постоянное, то во временное состояние при условии, что постоянное табличное пространство не содержит постоянных объектов базы данных на тот момент, когда его переключат во временное табличное пространство. Следующий блок кода демонстрирует это:
Код:
SQL> create tablespace test 01 datafile d:\ORACLE\test01.dat
Size 1M default storage ( initial 10K
Next 10K pctincrease 0
Minextents 1 maxextents 5) temporary;
Tablespace created.

SQL> create table dumy3 (dummy vfrchar2(10) tablespace test01;
Error

SQL> alter tablespace test01 permanent;
Successfully;

SQL>  create table dummy3 (dummy varchfr2(10)) tablespace test01;
Table created.

SQL> alter tablespace test01 temporary;
Error
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #15  
Старый 22.12.2011, 20:13
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Временные сегменты в постоянном табличном пространстве

Пользователю можно назначить или постоянное, или временное табличное пространство для сортировки. При необходимости дисковой сортировки пользователь создает временные сегменты в табличном пространстве для поддержки команд select, содержащих фразы group by, order by, distinct или union, или команды create index, как уже говорилось. Для создания временных сегментов пользователем можно назначить или постоянные, или временные табличные пространства. Если пользователю назначены постоянные табличные пространства для создания временных сегментов, временный сегмент будет создан в то время, когда потребуется дисковая сортировка. После ее завершения процесс SMON автоматически удаляет временный сегмент, чтобы освободить пространство для других пользователей. Поскольку это приводит к существенной фрагментации, желательно создать отдельное временное табличное пространство и хранить в нем временные сегменты для всех пользователей.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #16  
Старый 22.12.2011, 20:13
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Временные сегменты во временном табличном пространстве

Временное пространство управляется по-другому во временном табличном пространстве. Вместо оперативного выделения временных непрерывных сегментов экземпляр Oracle выделяет один сегмент сортировки для первой команды, требующей дисковой сортировки. Все последующие пользователи, которым нужны дисковые сортировки, могут совместно использовать этот сегмент. Число экстентов, запрашиваемых сегментом сортировки, не ограничивается. Сегмент сортировки освобождается при выключении экземпляра. Такое управление временными сегментами повышает производительность двумя способами. Во-первых, Oracle просто устраняет экстенты и сохраняет первичный сегмент доступным для следующей транзакции, требующей сортировки. Все управление пространством для сегмента сортировки во временном табличном пространстве осуществляется в новой области SGA, называемой пулом экстентов (sort extent pool) сортировки. Процесс, нуждающийся в пространстве для дисковых сортировок, может выделять экстенты на основании информации в этой области.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #17  
Старый 22.12.2011, 20:13
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Использование локально-управляемых временных табличных пространств


Ваше временное табличное пространство должно быть локально управляемым. Это объясняется тем, что при выполнении дисковой сортировки Oracle требуется быстрый доступ к информации о свободном пространстве, а также тем, что дисковые сортировки славятся своей низкой производительностью, нет никакого смысла создавать для словаря данных еще одно узкое место в процессе. Ниже приводится пример создания локально управляемого временного табличного пространства:

Код:
CREATE TEMPORARY TABLESPACE temp
TEMPFILE /DISK2/temp_01.dbf SIZ 500M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 10M;
Мы уже рассматривали использование ключевых слов tempfile и temporary для определения временных табличных пространств таким образом. Однако с фразой uniform extent size вы еще не знакомы. Указание размера однородных экстентов свойство, используемое в управлении табличными пространствами для упрощения выделения экстентов объектам. В отличие от определения для каждого объекта своего собственного распределения экстентов с помощью фраз storage или назначения объектов табличным пространствам при распределении памяти с помощью фразы default storage, uniform extent management упрощает процесс, назначая каждый объект в табличное пространство с точно такой же конфигурацией управления экстентами. Когда объект помещается в табличное пространство с помощью uniform extent management, настройка табличного пространства uniform extent management переопределяет любые конфигурации памяти, включенные в команду создания объекта.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #18  
Старый 22.12.2011, 20:14
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Назначение места во временном табличном пространстве

Временные табличные пространства предполагают повышенную производительность дисковых сортировок и улучшенное управление пространством для множественных пользователей. Если для управления размером временных сегментов и экстентов в этом табличном пространстве используется фраза default storage, следует знать о специальных правилах определения значений для этих опций памяти. Поскольку по определению дисковой сортировки записанные на диск данные будут равны SORT_AREA_SIZE, экстенты должны быть по крайней мере дольше этого значения. Установите размер начального сегмента сортировки по формуле numxSORT_AREA_SIZE+DB_BLOCK_SIZE, где num небольшое число по вашему выбору, используемое как множитель SORT_AREA_SIZE. Эта формула установления размеров позволяет хранить в каждом экстенте память заголовка блока, а также данные многократных сортировок. Далее аналогично сегментам отмены, сегменты сортировки должны запрашивать экстенты одинакового размера и таким образом задать initial равным next. Кроме того, pctincrease должен быт равен нулю. И наконец, во временном табличном пространстве не используется опция памяти maxextents.

Можно также создавать многократные временные табличные пространства для поддержки различных типов дисковых сортировок, необходимых вашим пользователям. Например, можно иметь чрезвычайно большое временное табличное пространство для долговременных команд select order в процессах группового формирования отчетов или для создания индекса для большой периодически реорганизуемой таблицы. Кроме того, можно включать меньшее по размеру временное табличное пространство для дисковых сортировок как побочного продукта выполняемых пользователями специальных запросов. Каждое из этих временных табличных пространств может назначаться пользователям на основании их ожидаемых потребностей в сортировке.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #19  
Старый 22.12.2011, 20:14
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Получение информации о временных сегментах от Oracle

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

DBA_SEGMENTS дает информацию об имени и местоположении пространства и владельце обоих типов временных сегментов в Oracle. Обратите внимание, что можно увидеть только информацию относительно временных сегментов в постоянных табличных пространствах, пока эти сегменты назначены, а информацию о временных сегментах во временных табличных пространствах в течение срока службы экземпляра.
V$SORT_SEGMENT дает информацию о размере временных табличных пространств, текущем числе экстентов, выделенных для сортировки сегментов и информацию о верхней отметке сегментов сортировки.
V$SORT_USAGE дает информацию о сортировках, которые в настоящее время производятся в базе данных. Это представление часто объединяется с V$SESSION.

Можно получить имя, тип сегмента и табличное пространство, в котором хранятся сегменты сортировки с помощью представления DBA_SEGMENTS. Учтите, что этот сегмент возникнет только в связи с выполнением первой дисковой сортировки после запуска экземпляра. Примером служит следующий блок кода:

Код:
SQL> select owner, segment_name, segment_type, tablespace_name from dba_segments;
Можно получить размер сегментов сортировки , выделенных во временных табличных пространствах, обратившись к V$SORT_SEGMENT, что полезно при текущем определении размеров временных табличных пространств. Следующий запрос иллюстрирует, как получить информацию о верхней отметке сегмента сортировки из V$SORT_SEGMENT:

Код:
SQL> select tablespace_name, extent_size, total_extents, max_sort_blicks from V$SORT_SEGMENT;
И наконец, можно увидеть информацию о текущих сортировках в экземпляре, объединив данные из представлений V$SORT_USAGE и V$SESSION. Примером является следующий блок кода.

Код:
SQL> select  a.username, b.tablespace. b.contents, b.extents, b.blocks 
From V$SESSION a,  V$SORT_USAGE b
Where a.saddr = b.session_addr;
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #20  
Старый 22.12.2011, 20:14
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию

Представления словаря для управления временными табличными пространствами

Существует два представления словаря для управления временными табличными пространствами:
DBA_TEMP_FILES предоставляет информацию о каждом файле данных, связанном с временным табличным пространством.
V$TEMPFILE предоставляет информацию о каждом файле данных, связанном с временным табличным пространством.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 07:17. Часовой пояс GMT +3.


Powered by vBulletin®