#sql #oracle #block
#sql #Oracle #блокировать
Вопрос:
Есть ли у Oracle способ определить, сколько обращений к блокам необходимо для прямого полного сканирования конкретной таблицы?
Ответ №1:
Общее количество операций ввода-вывода, необходимых для выполнения полного сканирования таблицы, зависит от размера таблицы ( select blocks from user_segments where segment_name='TABLE_NAME'
), количества прочитанных нескольких блоков (контролируется DB_FILE_MULTIBLOCK_READ_COUNT
параметром) и того, используется ли для операции параллельное выполнение.
Ответ №2:
Количество обращений к блокам — это, по сути, количество логических / согласованных запросов, выполняемых вашим запросом. Вы можете использовать опцию set autotrace traceonly statistics
SQL * Plus, чтобы увидеть это значение статистики:
SQL> set autotrace traceonly statistics;
SQL> select * from customers;
115005 rows selected.
Statistics
----------------------------------------------------------
4 recursive calls
0 db block gets
8215 consistent gets
580 physical reads
0 redo size
4689008 bytes sent via SQL*Net to client
84826 bytes received via SQL*Net from client
7668 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
115005 rows processed
consistent gets
это количество блоков, используемых запросом (также известное как «логический ввод-вывод». physical reads
— это количество блоков, фактически извлеченных с жесткого диска (поскольку их не было в буферном кэше).