Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оценка интенсивности использования индексов / 20 сообщений из 20, страница 1 из 1
26.02.2009, 21:57:19
    #35840677
serg59
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
Есть БД oracle 10.2.0.1 Необходимо произвести оценку интенсивности использования индексов.
Как это можно сделать?
...
Рейтинг: 0 / 0
27.02.2009, 03:25:39
    #35840978
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
serg59Есть БД oracle 10.2.0.1 Необходимо произвести оценку интенсивности использования индексов.
Как это можно сделать?

FTFM Monitoring Index Usage

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

а нету этой статьи на русском? или описать как проверить статистику использования индекса на простеньком примере из одной таблицы?
...
Рейтинг: 0 / 0
01.03.2009, 00:24:52
    #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
01.03.2009, 00:54:55
    #35844354
wurdu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
AlterlingВ 10ке есть новый механизм отслеживания использования индексов.
...
P.S.: Вот тут оный механизм для 10ки описан
Это не новый механизм, а очередной бред от Бурлесона. Его скрипт лезет в TOP запросов AWR. Но на то он и TOP, чтобы хранить не все запросы...
...
Рейтинг: 0 / 0
01.03.2009, 01:02:10
    #35844357
DВА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
Если совсем не хочется мониторить индекс, то смотрим периодически в v$sql_plan на предмет разобранных планов в кеше с его участием. Не факт, что не провороните, но обычно результат адекватный.
...
Рейтинг: 0 / 0
01.03.2009, 13:31:14
    #35844592
serg59
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
DВА,

А некак непосчитать количество раз которое используеться индекс за промежуток времени ?
...
Рейтинг: 0 / 0
01.03.2009, 14:51:35
    #35844660
Alterling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
serg59, можно попробовать взять v$segment_statistics в момент т1 и т2 и посчитать разницу.
...
Рейтинг: 0 / 0
01.03.2009, 15:10:25
    #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
01.03.2009, 15:25:27
    #35844691
serg59
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
SYserg59Есть БД oracle 10.2.0.1 Необходимо произвести оценку интенсивности использования индексов.
Как это можно сделать?

FTFM Monitoring Index Usage

SY.
Так и непонял как проверить как часто используеться индекс.
Пока что определяю вообще использеуться ли индекс или нет с помощью V$OBJECT_USAGE...
...
Рейтинг: 0 / 0
02.03.2009, 18:55:47
    #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
02.03.2009, 20:30:32
    #35847088
SY
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
02.03.2009, 23:01:55
    #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
02.03.2009, 23:08:52
    #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
03.03.2009, 03:36:21
    #35847314
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
AlterlingCLUSTERING_FACTOR сравним по величине с NUM_ROWS или наоборот, ... то это повод задуматься над реорганизацией индексов После перестройки индекса изменится CLUSTERING_FACTOR ? Или NUM_ROWS ?
Хороший фактор кластеризации так же плох, как и плохой ? Типо, лучшее -- враг хорошего ?
...
Рейтинг: 0 / 0
03.03.2009, 12:46:01
    #35848014
Alterling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
Вячеслав Любомудров, нет разумеется, зачем такие глаза? и почему реорганизация=перестройка?
А почему тогда DISTINCT_KEYS вопросов не вызвал? Или у вас DISTINCT_KEYS изменяется после alter index rebuild? И если вы заметили, я не дал однозначных советов, я сказал "повод задуматься".
Высокий CLUSTERING_FACTOR по отношению к NUM_ROWS говорит о том, таблица неупорядочена по этому индексу и что индекс скорее неудачный, его использование скорее всего вызовет много логических чтений.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
24.08.2016, 08:18:12
    #39296798
nata44845
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка интенсивности использования индексов
DimaR,

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


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