#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 редко выбирает план выполнения, который намного уступает другому. Может быть, статистика устарела? В этом случае сбор новой статистики может уже решить ваши проблемы.