13.08.2014 09:41
Mr_Vito
 
СМ 29.3 сп 6
После переезда на новый сервер и оракл 11.2.0.3
появилась проблемаа:
поиск по штрих-коду из фильтра карточки товара виснет намертво, а именно:
если запустить супермаг, вбить ш/к и он находит карточку товара мгновенно, забиваешь в фильтре второй ш/к, подвисает намертво. при этом запрос в сессиях висит, и усиленно, что делает. Выдрал запрос, выкинул лишние таблички, запустил из навигатора тоже самое, первый запуск, результат мгновенный, второй запуск - висит. Обрываешь, добавляешь пробел, получем опять результат мгновенный, второй запуск - висит (400 сек висел). Куда копать, что можно сделать?

Запрос:
Код:
SELECT --+ FIRST_ROWS
    TMain.Article
from Supermag.SMCard TMain
where (exists(select * from Supermag.SVStoreUnits Units 
		            where Units.Article=TMain.Article
                and UPPER(Units.Barcode)=UPPER('4607163095827')))
ORDER BY TMain.Article


------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                    | Rows  | Bytes | Cost  |
------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |                         |   903 | 11739 |   233K|
|   1 |  NESTED LOOPS SEMI             |                         |   903 | 11739 |   233K|
|   2 |   INDEX FULL SCAN              | SMCARD_PK               | 77846 |   532K|   176 |
|   3 |   VIEW                         | SVSTOREUNITS            |     1 |     6 |     3 |
|   4 |    UNION ALL PUSHED PREDICATE  |                         |       |       |       |
|   5 |     TABLE ACCESS BY INDEX ROWID| SMSTOREUNITS            |     1 |    19 |     2 |
|   6 |      INDEX RANGE SCAN          | SMISTOREUNITS_ARTICLE   |     1 |       |     1 |

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------
|   7 |     TABLE ACCESS BY INDEX ROWID| SMFOREIGNUNITS          |     1 |    54 |     1 |
|   8 |      INDEX RANGE SCAN          | SMIFOREIGNUNITS_ARTICLE |     1 |       |     1 |
------------------------------------------------------------------------------------------
13.08.2014 09:50
Mr_Vito
 
еще нашел, что если в запросу убрать хинт, то все становится хорошо, запрос стабильно выполняется мгновенно:

Код:
SQL> EXPLAIN PLAN FOR
  2  SELECT 
  3      TMain.Article
  4  from Supermag.SMCard TMain
  5  where (exists(select * from Supermag.SVStoreUnits Units 
  6                where Units.Article=TMain.Article
  7                  and UPPER(Units.Barcode)=UPPER('4607163095827')))
  8  ORDER BY TMain.Article;

Explained.

SQL> SELECT * FROM TABLE(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------

-----------------------------------------------------------------------------
| Id  | Operation              | Name               | Rows  | Bytes | Cost  |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |                    |     1 |    13 |   177 |
|   1 |  SORT ORDER BY         |                    |     1 |    13 |   177 |
|   2 |   NESTED LOOPS         |                    |     1 |    13 |   176 |
|   3 |    VIEW                | SVSTOREUNITS       |   903 |  5418 |   175 |
|   4 |     HASH UNIQUE        |                    |     1 | 17192 |   175 |
|   5 |      UNION-ALL         |                    |       |       |       |
|   6 |       TABLE ACCESS FULL| SMSTOREUNITS       |   902 | 17138 |   175 |

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------
|   7 |       INDEX FULL SCAN  | SMCFOREIGNUNITS_PK |     1 |    54 |     0 |
|   8 |    INDEX UNIQUE SCAN   | SMCARD_PK          |     1 |     7 |     0 |
-----------------------------------------------------------------------------
что с этим можно сделать? ведь в супермаге запрос не подправишь
13.08.2014 10:32
kadr
 
Цитата:
Mr_Vito Обрываешь, добавляешь пробел, получем опять результат мгновенный, второй запуск - висит (400 сек висел). Куда копать, что можно сделать?
После этого получаем новый запрос, который БД заново парсит и разбирает.
Может чего кривого со статистикой?

Цитата:
Mr_Vito при этом запрос в сессиях висит, и усиленно, что делает.
Очень рекомендую посмотреть статистику ожиданий по запросу в этот момент.

ПыСы. Ну и все это уже не относится к СМ, надо наверно в другой раздел с этим
13.08.2014 12:16
OlegON
 
Отключение подсказок в запросе Oracle, например.
голосую за просмотр ожиданий долгого запроса. и разницу планов надо посмотреть.
13.08.2014 15:25
Mr_Vito
 
статистика посчитана, притом я пытался считать статистику по разному (через analyze и через DBMS_STATS)
результатов нет :( , план не меняется

пока отключил хинты, тригером по подсказке Олега
в супермаге все заработало (где еще вылезет, будем посмотреть :))) )
13.08.2014 15:35
whitewizard
 
связка 29.3 на Оракл 11.2.0.3 уже не радовает
Часовой пояс GMT +3, время: 16:50.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.