Давно обратил внимание, что логи оптимизатора никто не читает, хотя они напичканы полезной информацией. Но иногда влом обеспечивать связь и ставить оптимизатор для какой-то простейшей и единственной операции (если есть - обязательно посмотрите, поскольку информации так куда больше, чем в это примере). Разберем случай, когда среди кучи дисков вы сидите и не знаете, куда и что положить. Разделим проблему проседания винтов на две части: 1) плавность работы 2) общая нагрузка. В первом случае ситуация развивается по схеме "работаем, работаем, налетаем на медленный отклик от винта). Во втором - "работаем, работаем, налетаем на зверски загруженный и без того винт". Первый случай больше виден в OLTP, т.е. вместо плавной работы интерфейса он начинает икать, второй, например, сказывается на общем времени выполнения отчета. Есть системная вьюшка V$FILE_HISTOGRAM. Первая колонка - номер файла, вторая, SINGLEBLKRDTIM_MILLI - время ожидания, третья, SINGLEBLKRDS - количество таких ожиданий. Первым запросом будем выбирать файлы с большим временем отклика:
Код:
select d.name,h.SINGLEBLKRDTIM_MILLI,h.SINGLEBLKRDS from V$FILE_HISTOGRAM h, v$datafile d where h.file#=d.file# order by 2 desc,3 desc
вот пример вывода:
Цитата: SINGLEBLKRDTIM_MILLI SINGLEBLKRDS
-------------------- ------------
/mnt/big/fftbles+4.dbf
16384 2
/mnt/stripe1/indx+6.dbf
16384 1
/mnt/stripe1/indx_ok.dbf
8192 2
видно, что big у меня чудовищно перегружена и сам винт тупой, поэтому при обращении к fftbles+4.dbf два раза было ожидание по 16384 миллисекунд. Соответственно, один раз было, что stripe1 просел и indx+6.dbf ждали 16384 миллисекунд. В зависимости от ценности файла можно рассматривать его претендентом на перенос куда-либо.
Вторым запросом - более нагруженные:
Код:
select d.name,sum(h.SINGLEBLKRDTIM_MILLI*h.SINGLEBLKRDS) "LOAD" from V$FILE_HISTOGRAM h, v$datafile d where h.file#=d.file# group by d.name order by 2 desc
пример вывода:
Цитата: /mnt/main/users+2.dbf
30487678
/mnt/stripe1/indx+2.dbf
26867406
/mnt/main/users+1.dbf
26221257
по нему видно, что раз в первой табличке users+2.dbf не фигурирует, то в принципе ничего страшного, но тем не менее, по всем файлам больше всего ждать приходится его и если есть возможность его отсадить на отдельный винт - хорошо бы это сделать.
Можно так же анализировать еще одну вьюшку
Код:
select d.name,s.* from V$FILESTAT s, v$datafile d where s.file#=d.file# order by 5 desc,6 desc