определение количества необходимых обращений к блокам

#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 — это количество блоков, фактически извлеченных с жесткого диска (поскольку их не было в буферном кэше).