powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оценка интенсивности использования индексов
20 сообщений из 20, страница 1 из 1
Оценка интенсивности использования индексов
    #35840677
serg59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть БД oracle 10.2.0.1 Необходимо произвести оценку интенсивности использования индексов.
Как это можно сделать?
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35840978
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg59Есть БД oracle 10.2.0.1 Необходимо произвести оценку интенсивности использования индексов.
Как это можно сделать?

FTFM Monitoring Index Usage

SY.
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35840988
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно подойдет v$segment_statistics. С учетом, конечно, что статистики также отражают insert, update, delete. С monitoring есть неприятные нюансы, вроде того что индекс может использоваться самим Ораклом для проверки ссылочной целостности или получения статистики, но это не ловится мониторингом.
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35840989
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, от MONITORING USAGE весьма мало толку. Чтоб определить что индекс не используется нужно прогнать все/большинство типичных запросов. Но если показывается, что индекс использовался, это далеко не факт что он использовался в нужном запросе, а не в каком-то случайном, где от него был только вред и на самом деле его лучше вообще снести
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35842807
denix1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровК сожалению, от MONITORING USAGE весьма мало толку. Чтоб определить что индекс не используется нужно прогнать все/большинство типичных запросов. Но если показывается, что индекс использовался, это далеко не факт что он использовался в нужном запросе, а не в каком-то случайном, где от него был только вред и на самом деле его лучше вообще снести+ при сборе статистики по таблице + индексам индекс метится как используемый...
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844275
serg59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

а нету этой статьи на русском? или описать как проверить статистику использования индекса на простеньком примере из одной таблицы?
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844328
Alterling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serg59, забей на MONITORING USAGE. В 10ке есть новый механизм отслеживания использования индексов.

Содержание раздела "Monitoring Index Usage" вкратце:
1) Делаешь ALTER INDEX index MONITORING USAGE
2) Перестаешь дышать (т.к. сбор статистики по индексам автоматически отметит использование)
3) Запускаешь все свои запросы
4) Смотришь в V$OBJECT_USAGE
На практике так можно поотстреливать только самые бесполезные индексы, про нежизнеспособность которых было известно с момента их создания.

P.S.: Вот тут оный механизм для 10ки описан. Гугл по набору слов "Oracle index usage" рулит.
P.S.2: Английский в этих статьях как правило вполне доступный.
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844354
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlterlingВ 10ке есть новый механизм отслеживания использования индексов.
...
P.S.: Вот тут оный механизм для 10ки описан
Это не новый механизм, а очередной бред от Бурлесона. Его скрипт лезет в TOP запросов AWR. Но на то он и TOP, чтобы хранить не все запросы...
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844357
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если совсем не хочется мониторить индекс, то смотрим периодически в v$sql_plan на предмет разобранных планов в кеше с его участием. Не факт, что не провороните, но обычно результат адекватный.
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844592
serg59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DВА,

А некак непосчитать количество раз которое используеться индекс за промежуток времени ?
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844660
Alterling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serg59, можно попробовать взять v$segment_statistics в момент т1 и т2 и посчитать разницу.
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844676
serg59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alterling
P.S.: Вот тут оный механизм для 10ки описан.
а что выдаеться в запросах?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
col c1 heading ‘Object|Name’ format a30
col c2 heading ‘Operation’ format a15
col c3 heading ‘Option’ format a15
col c4 heading ‘Index|Usage|Count’ format  999 , 999 
break on c1 skip  2 
break on c2 skip  2 

select
   p.object_name c1,
   p.operation   c2,
   p.options     c3,
   count( 1 )      c4
from
   dba_hist_sql_plan p,
   dba_hist_sqlstat s
where
   p.object_owner <> 'SYS'
and
   p.operation like ‘%INDEX%’
and
   p.sql_id = s.sql_id
group by
   p.object_name,
   p.operation,
   p.options
order by
    1 , 2 , 3 ; 

и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
col c1 heading 'Begin|Interval|time' format a20
col c2 heading 'Search Columns'      format  999 
col c3 heading 'Invocation|Count'    format  99 , 999 , 999 
break on c1 skip  2 
accept idxname char prompt 'Enter Index Name: '
ttitle 'Invocation Counts for index|&idxname'
select
   to_char(sn.begin_interval_time,'yy-mm-dd hh24')  c1,
   p.search_columns                                 c2,
   count(*)                                         c3
from
   dba_hist_snapshot  sn,
   dba_hist_sql_plan   p,
   dba_hist_sqlstat   st
where
   st.sql_id = p.sql_id
and
   sn.snap_id = st.snap_id
and
   lower(object_name) like lower('%&idxname%')
group by
   begin_interval_time,search_columns;

и первый запрос у меня ошибку выдает...
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35844691
serg59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYserg59Есть БД oracle 10.2.0.1 Необходимо произвести оценку интенсивности использования индексов.
Как это можно сделать?

FTFM Monitoring Index Usage

SY.
Так и непонял как проверить как часто используеться индекс.
Пока что определяю вообще использеуться ли индекс или нет с помощью V$OBJECT_USAGE...
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35846983
serg59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DВАЕсли совсем не хочется мониторить индекс, то смотрим периодически в v$sql_plan на предмет разобранных планов в кеше с его участием. Не факт, что не провороните, но обычно результат адекватный.

а запрос как такой писать ? например есть индекс A_IDX?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
OPERATION,
OPTIONS,
OBJECT_NAME,
ACCESS_PREDICATES,	
FILTER_PREDICATES,	
PROJECTION
from V$SQL_PLAN
where OBJECT_NAME = 'A_IDX';
Вот так нечего неполучаеться хоть смотриш в V$OBJECT_USAGE там пишет USED YES....
Что нетак делаю?
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35847088
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg59,

Well, I admit, my suggestion on MONITORING USAGE is "не в тeму". MONITORING USAGE is more to determine which indexes are not/rarely used. I suppose you could try something like:

1. Create a table INDEX_USAGE. Something like this. For each user you want to monitor:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE INDEX_USAGE(
                         TABLE_NAME VARCHAR2( 30 ),
                         INDEX_NAME VARCHAR2( 30 ),
                         USAGE_CNT NUMBER
                        )
  AS
    SELECT  TABLE_NAME,
            INDEX_NAME,
             0 
      FROM  USER_INDEXES
/

2. Set all indexes to MONITORING USAGE.
3. Run a job every so often that does something like:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE
    CURSOR v_cur
      IS
        SELECT  INDEX_NAME
          FROM  V$OBJECT_USAGE
          WHERE USED = 'Y';
BEGIN
    FOR v_rec IN v_cur LOOP
      UPDATE  INDEX_USAGE
        SET   USAGE_CNT = USAGE_CNT +  1 
        WHERE INDEX_NAME = v_rec.INDEX_NAME;
      EXECUTE IMMEDIATE 'ALTER INDEX ' || v_rec.INDEX_NAME || 'NOMONITORING USAGE';
      EXECUTE IMMEDIATE 'ALTER INDEX ' || v_rec.INDEX_NAME || 'MONITORING USAGE';
    END LOOP;
END;
/

SY.
P.S. I do not know what performance penalty is associated with keeping MONITORING USAGE for a long time.

SY.
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35847193
Alterling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serg59, Как по-моему, V$OBJECT_USAGE - не лучшее средство. Но, раз об нем речь - причина "YES" в USED -это либо кто-то собрал статистику либо индекс таки был использован где-то в планах.

Можно сделать вот что: собрать статистику и посмотреть в user_indexes, колонки BLEVEL, DISTINCT_KEYS, CLUSTERING_FACTOR и NUM_ROWS. Если BLEVEL равно или больше 3..4 или CLUSTERING_FACTOR сравним по величине с NUM_ROWS или наоборот, DISTINCT_KEYS очень мало по сравнению с NUM_ROWS, то это повод задуматься над реорганизацией индексов, даже если они используются по V$OBJECT_USAGE.
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35847201
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда то давно пробовал так, периодическими запусками в момент реальной работы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
select /* CHOOSE*/
  o.owner,o.object_name,o.object_id,o.object_type, p.exc, a.blk* 8192 / 1024 / 1024  size_mb, 
  ss.lrds, round(ss.lrds/st.st),
  pr.prds, round(pr.prds/st.st)
from dba_objects o,
  (select p.OBJECT#, sum(p.exc) exc from
    (
    select pl.OBJECT#,sum(s.EXECUTIONS) exc  from gv$sql_plan pl, gv$sql s 
      where  1 = 1 
        and pl.ADDRESS=s.ADDRESS
        and pl.HASH_VALUE=s.HASH_VALUE
        and pl.CHILD_NUMBER=s.CHILD_NUMBER
        and pl.inst_id= 1  and s.inst_id= 1 
      group by pl.OBJECT#  
/*     union all
     select pl.OBJECT#,sum(s.EXECUTIONS) exc  from gv$sql_plan pl, gv$sql s 
      where 1=1
        and pl.ADDRESS=s.ADDRESS
        and pl.HASH_VALUE=s.HASH_VALUE
        and pl.CHILD_NUMBER=s.CHILD_NUMBER
        and pl.inst_id=2 and s.inst_id=2
      group by pl.OBJECT#       */
    ) p
    group by p.OBJECT#
  ) p,
  (SELECT s.owner,s.segment_name, sum(s.blocks) blk FROM dba_segments S group by s.owner,s.segment_name) a,
  (select ss.OWNER, ss.OBJECT_NAME, sum(ss.value) lrds from v$segment_statistics ss where ss.STATISTIC#= 0  group by ss.OWNER, ss.OBJECT_NAME) ss,
  (select ss.OWNER, ss.OBJECT_NAME, sum(ss.value) prds from v$segment_statistics ss where ss.STATISTIC#= 3  group by ss.OWNER, ss.OBJECT_NAME) pr,
  (select (sysdate-startup_time) st from v$instance) st 
  
where  1 = 1 
  and o.object_id=p.object#(+)
  and o.owner=a.owner
  and o.object_name=a.segment_name
  and o.owner=ss.owner
  and o.object_name=ss.OBJECT_NAME  
  and o.owner=pr.owner
  and o.object_name=pr.OBJECT_NAME  
  and o.object_type='INDEX'
  and o.owner='ОВНЕР'
order by  6  desc  
;
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35847314
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlterlingCLUSTERING_FACTOR сравним по величине с NUM_ROWS или наоборот, ... то это повод задуматься над реорганизацией индексов После перестройки индекса изменится CLUSTERING_FACTOR ? Или NUM_ROWS ?
Хороший фактор кластеризации так же плох, как и плохой ? Типо, лучшее -- враг хорошего ?
...
Рейтинг: 0 / 0
Оценка интенсивности использования индексов
    #35848014
Alterling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров, нет разумеется, зачем такие глаза? и почему реорганизация=перестройка?
А почему тогда DISTINCT_KEYS вопросов не вызвал? Или у вас DISTINCT_KEYS изменяется после alter index rebuild? И если вы заметили, я не дал однозначных советов, я сказал "повод задуматься".
Высокий CLUSTERING_FACTOR по отношению к NUM_ROWS говорит о том, таблица неупорядочена по этому индексу и что индекс скорее неудачный, его использование скорее всего вызовет много логических чтений.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Оценка интенсивности использования индексов
    #39296798
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaR,

А не расшифруете результаты запроса?
exc это количество запусков, за сколько? за час? от начала работы?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оценка интенсивности использования индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]