(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Использование v$object_usage

Источник: ln

Этот короткая статья, в частности, посвящена применению представления v$object_usage для контроля использования индекса.

Том!

Контролировать использование индекса в Oracle 9i можно, выполнив сначала оператор alter index xxx monitoring usage, начинающего процесс сбора соответствующей информации, а затем выполняя запросы к представлению v$object_usage. Какие операторы DDL или DML при этом будут генерировать 'YES' в столбце 'USED' этого представления? Друкгими словами, будут ли операторы 'select' считаться использующими индекс, или только update?..

Ответ Тома Кайта

Столбец будет иметь значение YES, если индекс использовался для ДОСТУПА к таблице, -- будь-то при изменении, слиянии (merge), удалении строк или при выполнении оператора SELECT. Этот столбец изменяется не потому, что "изменена" какая-то запись индекса -- это будет происходить при каждой вставке. Столбец устанавливается в YES, когда индекс используется для доступа к таблице.

Рассмотрим пример

ops$tkyte@ORA920.US.ORACLE.COM> create table t ( x int,
  2                   constraint t_pk primary key(x) );
 
Table created.
 
ops$tkyte@ORA920.US.ORACLE.COM> insert into t
  2  select rownum 
  3    from all_objects
  4   where rownum <= 100
  5  /
 
100 rows created.
 
ops$tkyte@ORA920.US.ORACLE.COM> set echo off

Теперь включим мониторинг индекса:

ops$tkyte@ORA920.US.ORACLE.COM> select index_name, monitoring, used, start_monitoring, end_monitoring
  2    from v$object_usage;
 
no rows selected
 
ops$tkyte@ORA920.US.ORACLE.COM> alter index t_pk monitoring usage
  2  /
 
Index altered.
 
ops$tkyte@ORA920.US.ORACLE.COM> select index_name, monitoring, used, start_monitoring, end_monitoring
  2    from v$object_usage;
 
INDEX_NAME   MONITORING USED START_MONITORING    END_MONITORING
------------ ---------- ---- ------------------- -------------------
T_PK         YES        NO   10/05/2003 18:29:16
 
ops$tkyte@ORA920.US.ORACLE.COM>
ops$tkyte@ORA920.US.ORACLE.COM> set echo off

При использовании оптимизатора, основанного на правилах (RBO), как оно и будет по умолчанию, выборка count(*) идет не через индекс:

  
ops$tkyte@ORA920.US.ORACLE.COM> set autotrace on explain
ops$tkyte@ORA920.US.ORACLE.COM> select count(*) from t;
 
  COUNT(*)
----------
       100
 
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF 'T'
 
  
ops$tkyte@ORA920.US.ORACLE.COM> set autotrace off
ops$tkyte@ORA920.US.ORACLE.COM> select index_name, monitoring, used, start_monitoring, end_monitoring
  2    from v$object_usage;
 
INDEX_NAME   MONITORING USED START_MONITORING    END_MONITORING
------------ ---------- ---- ------------------- -------------------
T_PK         YES        NO   10/05/2003 18:29:16
 
ops$tkyte@ORA920.US.ORACLE.COM> set echo off

Как и выполнение оператора insert:

ops$tkyte@ORA920.US.ORACLE.COM> insert into t values (-1);
 
1 row created.
 
ops$tkyte@ORA920.US.ORACLE.COM> select index_name, monitoring, used, start_monitoring, end_monitoring
  2    from v$object_usage;
 
INDEX_NAME   MONITORING USED START_MONITORING    END_MONITORING
------------ ---------- ---- ------------------- -------------------
T_PK         YES        NO   10/05/2003 18:29:16
 
ops$tkyte@ORA920.US.ORACLE.COM> set echo off

Но если проанализировать таблицу, при выборке count(*) индекс будет использоваться, и мы получим соответствующую запись:

ops$tkyte@ORA920.US.ORACLE.COM> analyze table t compute statistics
  2  /
 
Table analyzed.
 
ops$tkyte@ORA920.US.ORACLE.COM> set autotrace on explain
ops$tkyte@ORA920.US.ORACLE.COM> select count(*) from t;
 
  COUNT(*)
----------
       101
 
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1)
   1    0   SORT (AGGREGATE)
   2    1     INDEX (FULL SCAN) OF 'T_PK' (UNIQUE) (Cost=2 Card=101)
 
 
 
ops$tkyte@ORA920.US.ORACLE.COM> set autotrace off
ops$tkyte@ORA920.US.ORACLE.COM> select index_name, monitoring, used, start_monitoring, end_monitoring
  2    from v$object_usage;
 
INDEX_NAME   MONITORING USED START_MONITORING    END_MONITORING
------------ ---------- ---- ------------------- -------------------
T_PK         YES        YES  10/05/2003 18:29:16
 
ops$tkyte@ORA920.US.ORACLE.COM>

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Oracle »
Написать редактору 
 Рекомендовать » Дата публикации: 25.02.2010 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Standard Edition 2 Named User Plus License
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Personal Edition Named User Plus License
Oracle Database Standard Edition 2 Processor License
VideoStudio X9 ULTIMATE. Электронный ключ.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Мир OLAP и Business Intelligence: новости, статьи, обзоры
Проект mic-hard - все об XP - новости, статьи, советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Сайт инструмент (1)
Я бывший программист пользовался 1 сайтом проверенным он мне действительно помог я блогодоря...
 
Где взять лицензионный ключ для AllFusion Process Modeler (BPwin) 7? (5)
Выручайте!!! где найти ключ, ужасно срочно нужна программа. заранее спасибо!
 
работа на дому! (5)
Доброго времени суток дорогие друзья. Многоуровневый маркетинг окончательно признан...
 
Регистрация на Oracle.com (4)
Сразу прошу прощения за тупой вопрос, но вчера зарегался на oracle.com (чтоб 9i слить себе...
 
Ищу кодера (2)
Добрый день! Ищу кодера который сможет сделать копии сайтов. Сколько будет стоить скопировать...
 
 
 



    
rambler's top100 Rambler's Top100