настройка oracle sql: запрос ввода-вывода или байты ввода-вывода, что мне следует предпочесть?

#sql #oracle #performance

#sql #Oracle #Производительность

Вопрос:

Сейчас я настраиваю sql.

  • Oracle 12.1
  • Размер блока: 16 КБ
  • DB_FILE_MULTIBLOCK_READ_COUNT: 64
 SYSSTATS_MAIN   CPUSPEEDNW  2698.14241486068
SYSSTATS_MAIN   IOSEEKTIM   10
SYSSTATS_MAIN   IOTFRSPEED  4096
SYSSTATS_MAIN   SREADTIM    0.121
SYSSTATS_MAIN   MREADTIM    1.799
SYSSTATS_MAIN   CPUSPEED    2811
SYSSTATS_MAIN   MBRC    2
SYSSTATS_MAIN   MAXTHR  597475328
SYSSTATS_MAIN   SLAVETHR    4006912
 

У меня есть два плана.

план 1 — использовать подсказку USE_NL (с использованием индекса в цикле nest):

  • Время БД: 9 секунд
  • Запрос ввода-вывода: 44 Тыс.
  • Байты ввода-вывода: 1G

план 2 по умолчанию, без каких-либо подсказок (с использованием полного доступа к таблице в хэш-соединении):

  • Время БД: 46 секунд
  • Запрос ввода-вывода: 7254
  • Байты ввода-вывода: 4G

Я думаю, мне следует выбрать план 1, потому что его время в базе данных мало, а байты ввода-вывода малы.

Но я беспокоюсь о том, что запрос ввода-вывода намного больше, чем план 2. Это проблема, которая может повлиять на другие процессы?

Комментарии:

1. Пожалуйста, отредактируйте стиль вашего вопроса (теперь он выглядит некрасиво).

2. Я считаю естественным, что использование вложенных циклов приводит к большему количеству, но меньшим запросам ввода-вывода. Итак, да, я бы тоже выбрал первый план, если 46 секунд для вас проблема. Если это не проблема, я бы не стал использовать подсказки. В любом случае, в настоящее время Oracle редко выбирает план выполнения, который намного уступает другому. Может быть, статистика устарела? В этом случае сбор новой статистики может уже решить ваши проблемы.