Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Нумерация блоков данных.  [new]
shamanoff
Member

Откуда: Moscow
Сообщений: 318
Анализирую системные вьюхи словаря данных dba_segments, dba_extents. Возникли следующие вопросы:

1. Как определяется следующий свободный блок на диске, в который будет вестись запись процессом DBW? Будет ли это помеченный, как свободный, блок с min(block_id)?

2. Когда блокам назначается BLOCK_ID? Есть ли общая последовательность ID в соответствии с которой нумеруются блоки?
(Например, при создании нового файла данных блоки этого файла данных получают номера, начинающиеся с max(block_id))

3. Как посмотреть под что заняты блоки с BLOCK_ID = 1,2..8,10...?

select * from 
(select segment_name, block_id from dba_extents order by block_id) t
where rownum < 20

segment_name block_id
AW_OBJ$9
DM_AUDITTRAIL_S9
IDX_ACL_R9
ADM_TURBO_SIZE9
_SYSSMU1$9
SYSTEM9
D_1F6AEEA68000010A9
D_1F6AEEA6800001CA9
_SYSSMU11$9
DM_ACL_R17
DMC_ASPECT_RELATION_S17
D_1F6AEEA6800001C917
SYS_LOB0000000586C00007$$17
_SYSSMU53$17
SYSTEM17
D_1F6AEEA68000004D17
IDX_ACL_S17
DMC_ASPECT_RELATION_S25
_SYSSMU2$25
2 мар 09, 17:16    [6878289]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация блоков данных.  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
shamanoff
Анализирую системные вьюхи словаря данных dba_segments, dba_extents.

Мне кажется вы рано стали анализировать вьюхи словаря данных, стоит прочитать концепции.

shamanoff

1. Как определяется следующий свободный блок на диске, в который будет вестись запись процессом DBW? Будет ли это помеченный, как свободный, блок с min(block_id)?
DBWR пишет блок на его место, а не в свободный блок. Взяли блок в буферный кеш когда он понадобился, запачкали, записали на его исходное место на диске.
Если вы имеете ввиду как выбирается буффер в буферном кеше, в который помещается считываемый с диска блок, то это делает не dbwr, а серверный процесс обслуживающий пользователя использую touch count мордифицированный LRU алгоритм.


shamanoff

2. Когда блокам назначается BLOCK_ID? Есть ли общая последовательность ID в соответствии с которой нумеруются блоки?
(Например, при создании нового файла данных блоки этого файла данных получают номера, начинающиеся с max(block_id))
block_id это просто порядковый номер блока в файле, у каждого файла своя нумерация.
Полный логический адрес блока будет (file_id, block_id )
Приведенный вами запрос к dba_extents довольно бессмысленен, я не знаю какую информацию из него можно извлечь.

shamanoff

3. Как посмотреть под что заняты блоки с BLOCK_ID = 1,2..8,10...?
Это не полный адрес блоков, поскольку требуется еще указание file_id.

Можно посмотреть дамп блока по данным (file_id, block_id )

ALTER SYSTEM DUMP DATAFILE <absolute_file_number> BLOCK <block_number>;
Образуется трасировачный файл с дампом блока.

Если блок принадлежит какому либо сегменту, можно посмотреть, что это за сегмент:
select segment_name from dba_extents e
   where e.file_id = <file_no>  and <block_no> between block_id  and e.block_id + e.blocks - 1;
Но запрос работает медленно.
2 мар 09, 17:50    [6878499]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация блоков данных.  [new]
shamanoff
Member

Откуда: Moscow
Сообщений: 318
Спасибо за подсказку о FILE_ID.

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

Я и ёжик

Если блок принадлежит какому либо сегменту, можно посмотреть, что это за сегмент:
select segment_name from dba_extents e
   where e.file_id = <file_no>  and <block_no> between block_id  and e.block_id + e.blocks - 1;
Но запрос работает медленно.


Разжуйте, пожалуйста конструкцию where. Разве следующий запрос не вернет сегмент, которому принадлежит блок?

select segment_name from dba_extents where file_id = <file_no> and block_id = <block_no>
3 мар 09, 10:54    [6880118]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация блоков данных.  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Экстент содержит blocks последовательных блоков
Поэтому, если это не первый блок экстента в *_extents его не видно
3 мар 09, 10:56    [6880129]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация блоков данных.  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
shamanoff


Разжуйте, пожалуйста конструкцию where. Разве следующий запрос не вернет сегмент, которому принадлежит блок?

select segment_name from dba_extents where file_id = <file_no> and block_id = <block_no>

вернет, если указанный вами блок является "первым в цепочке"...но это далеко не всегда так ;)
3 мар 09, 11:03    [6880173]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить