Oracle mechanics

10.06.2011

Отчёт High Version Count

Filed under: Диагностика системы (instance),Oracle — Игорь Усольцев @ 00:51

На сайте поддержки заметил интересный универсальный скрипт  Formatted V$SQL_SHARED_CURSOR Report by SQLID or Hash Value [ID 438755.1]

  • судя по версии, скрипт неновый ;)
  • работает на 9iR2 , 10gR1, 10gR2, 11gR1, 11gR2 — в зависимости от версии модифицирует запросы и получает изменчивый список стобцов V$SQL_SHARED_CURSOR (зависящий от релиза  список фиксируемых причин неиспользования Oracle существующего курсора)
  • выводит отчёт о запросах с фильтром по количеству версий курсора в shared pool, разные полезные вещи (вызов cursortrace, plan hash value), есть секция для описания причин большого кол-ва версий  (Details for CURSOR_PARTS_MISMATCH — пока или для этого конкретного случая  пустая), пример вывода:

SQL> select b.* from v$sqlarea a ,table(version_rpt(a.sql_id)) b where loaded_versions >= 100;
####
 To further debug Ask Oracle Support for the appropiate level LLL.
 alter session set events
 'immediate trace name cursortrace address 429086876, level LLL';
 To turn it off do use address 1, level 2147483648
 ================================================================
 Version Count Report Version 3.1.2 -- Today's Date 08-jun-11 19:05
 RDBMS Version :11.1.0.7.0 Host: db.host.ru Instance 1 : inst01
 ==================================================================
 Addr: 000000065EA46078 Hash_Value: 3584147747 SQL_ID 2vnwxczau3h93
 Sharable_Mem: 8673025 bytes Parses: 146
 Stmt:
 0 SELECT DISTINCT type, type_name FROM MY_VIEW WHERE category_id = 755741

Versions Summary
 ----------------
 CURSOR_PARTS_MISMATCH :142
 Total Versions:142
 ~
 Plan Hash Value Summary
 -----------------------
 Plan Hash Value Count
 =============== =====
 35066614 22
 3318909611 121

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Details for CURSOR_PARTS_MISMATCH :

No details available
 #### 

2 комментария »

  1. Мне намного больше нравится nonshared.sql отсюда — он не требует создания функции.

    комментарий от Timur Akhmadeev — 10.06.2011 @ 12:42 | Ответить

    • Спасибо, Тимур, отличный скрипт, для сравнения привожу вывод для того же SQL:

      SQL> @noshared 2vnwxczau3h93
       Show why existing SQL child cursors were not reused (V$SQL_SHARED_CURSOR)...
      
      old 17: replace( '&cmd', '"', ''''),
       new 17: replace( 'select * from v$sql_shared_cursor where sql_id = ''2vnwxczau3h93''', '"', ''''),
       SQL_ID : 2vnwxczau3h93
       ADDRESS : 000000065EA46078
       CHILD_ADDRESS : 000000065E711778
       CHILD_NUMBER : 0
       -----------------
       SQL_ID : 2vnwxczau3h93
       ADDRESS : 000000065EA46078
       CHILD_ADDRESS : 000000065E719438
       CHILD_NUMBER : 1
       CURSOR_PARTS_MISMATCH : Y
       -----------------
       SQL_ID : 2vnwxczau3h93
       ADDRESS : 000000065EA46078
       CHILD_ADDRESS : 000000065F81C2D0
       CHILD_NUMBER : 2
       CURSOR_PARTS_MISMATCH : Y
       -----------------
      ...

      комментарий от Igor Usoltsev — 10.06.2011 @ 15:58 | Ответить


RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Блог на WordPress.com.

%d такие блоггеры, как: