| 
 | 
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Кому интересно. Oracle Reports 10.1.2.3 Столкнулся с такой фичей, - есть таблица, с кучей полей. В таблице есть поле, пусть будет "abc", типа char(2) not null (не индексировано), значения типа: 01,02,03 и т.д.. Так вот в "в репортах", если в запросе написать Код: plsql 1. , то отчёт генерится минуты 2, а если Код: plsql 1. или равносильно Код: plsql 1. , то 5-10 секунд! Замечу, что сам запрос, что с abc='01' , что abc=1 - отрабатавает одинаково быстро (0,01 сек.) Может кто знает, где @ зарыта? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 10:57 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Не верю ( C ) Запустить отчет, посмотреть ID выполняющегося запроса в сессии, посмотреть бинд переменные для данного запроса, посмотреть план для данного запроса (в данной сессии). Ну или включить трассировку и смотреть в трассировке. Как-то так. И все станет ясно. IMHO & AFAIK ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 13:26 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leonid Kudryavtsev, Сам бы не поверил ) Планы посмотрел, причина понятна и в тоже время нет ) table: id (number), abc char(2), created (sysdate) ... index1: id index2: zzz, abc, yyy index3: abc, created Запросы: 1. Код: plsql 1. 2. Код: plsql 1. Так вот SQL Developer, SQL Plus в запросах 1 и 2 использует index3 А Reports, в 1 случае - index2, а во втором - index1 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 14:46 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  А Reports, в 1 случае - index2, а во втором - index1  В Вашем запросе в WHERE нет поля ID, т.ч. как может план содержать индекс по полю, которого нет в запросе - лично мне не понятно. Быть такого не может, т.к. не может быть никогда. Предположу, что Вы что-то умалчиваете и не договариваете ))) А вообще, проблемы НЕ вижу. Выбирается "плохой" индекс, ну так поставьте хинт и/или соберите статистику ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 16:07 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leonid Kudryavtsev, самому не понятно.. а получается всё может быть и быть всё может, чеснслово.. скрин прилагаю ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 16:48 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ты лучше план покажи, с index1 ))). Как Oracle вообще умудряется в данный запрос Index1 притянуть. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 16:50 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ну и самого интересного не видно. Какой тип у d_sta, d_end ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 16:52 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leonid Kudryavtsev, v$sql sql_textmodulehash_valueselect id from hm_tp where tp='01' and created between :d_sta and :d_endrwbuilder.exe3322942397 v$sql_plan 3322942397 operation options object_nameobject_type filter_predicatesINDEXUNIQUE SCANindex1INDEX (UNIQUE)("CREATED">=:D_STA AND "CREATED"<=:D_END)INDEXSKIP SCANindex2INDEX"TP"='01' v$sql sql_textmodulehash_valueselect id from hm_tp where tp=01 and created between :d_sta and :d_endrwbuilder.exe1710107384 v$sql_plan 1710107384 operation options object_nameobject_type filter_predicatesINDEXUNIQUE SCANindex1INDEX (UNIQUE)TO_NUMBER("TP")=1INDEXRANGE SCANindex4INDEXnull index4: created d_sta и d_end: Datatype: Date , Width: 12 , Input Mask: ddmmyyyyhh24mi ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 17:14 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  А что за план такой, малость "укороченный"? В обычном виде нет возможности показать, а то хотя бы access predicate увидеть хотелось бы. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.07.2014, 18:34 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  -=APS=-, hash_valueoperationoptionsobject_nameobject_typecostcardinalitybytescpu_costaccess_predicatesfilter_predicatesprojectiontime3322942397"INDEX""UNIQUE SCAN""index1""INDEX (UNIQUE)"24019263274263842006"TP"='01'("CREATED">=:D_STA AND "CREATED"<=:D_END)"ID"[NUMBER.22]"33322942397"INDEX""SKIP SCAN""index2""INDEX"23977037432904167"TP"='01'"TP""='01'ROWID[ROWID.31]. "ID"[NUMBER.22]. "TP"[CHARACTER.2]. "CREATED"[DATE.7]. ROWID[ROWID.31]3 hash_valueoperationoptionsobject_nameobject_typecostcardinalitybytescpu_costaccess_predicatesfilter_predicatesprojectiontime1710107384"INDEX""UNIQUE SCAN""index1""INDEX (UNIQUE)"13696273528574"CREATED">=:D_STA AND "CREATED"<=:D_ENDTO_NUMBER("TP")=1"ID"[NUMBER.22]11710107384"INDEX""RANGE SCAN""index4""INDEX"16646261681"CREATED">=:D_STA AND "CREATED"<=:D_ENDROWID[ROWID.31]. "ID"[NUMBER.22]. "TP"[CHARACTER.2]. "CREATED"[DATE.7]. ROWID[ROWID.31]1 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.07.2014, 08:27 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Хм, а что за тулза, которой так план отображается? Я ожидал увидеть, например, для второго случая что-то вроде: SELECT STATEMENT ...TABLE ACCESS BY INDEX ROWID // тут filter по to_number(tp)=1 и projection ID ......INDEX SKIP SCAN по index4 // тут access по created, и projection ROWID ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.07.2014, 12:33 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Поправка, не skip, а range scan ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.07.2014, 12:38 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  -=APS=-, Не по существу APS :) а "тулза" - select from ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.07.2014, 17:11 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Путаетесь в показаниях. Индексы были приведены с одними названиями полей (abc), план с совершенно другим названием полей. Ну и "а что за план такой, малость "укороченный"?", в v$sql_plan есть и TABLE ACCESS и все остальное. Какие-то куски плана. Вы уверяли, что mRdUKEindex1: id а на плане index1 access predicate TP='01'. Кто-то врет или Вы или Oracle. Предположу, что это Вы ))) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 16.07.2014, 19:47 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Путаетесь в показаниях. Индексы были приведены с одними названиями полей (abc), план с совершенно другим названием полей. abc это tp Ну и "а что за план такой, малость "укороченный"?", в v$sql_plan есть и TABLE ACCESS и все остальное. Какие-то куски плана. Там много чего есть, что нужно то, имхо необходимое привёл. Вы уверяли, что index1: id а на плане index1 access predicate TP='01'. Кто-то врет или Вы или Oracle. Предположу, что это Вы ))) index1: id index2: zzz, tp, yyy index3: tp, created index4: created повторюсь, - именно reports использует другие индексы, те же forms используют как нужно - index3 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 17.07.2014, 08:27 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  У тебя в запросе ОДНО обращение к таблице и откуда-то ДВА обращения к индексам в плане. Такого быть не должно и такое представить при элементарном условии очень сложно. План ты привел урезанный. Каким образом эти ДВА обращения к индексу потом комбинируются совершенно не понятно. Я иногда наблюдал всякие битмап-то-ровид и комбайны с мержами но обычно на значительно более сложных запросах. По тем обрывкам плана, которые ты привел, что происходит не понятно. Ну и понятное дело, что Reports тут совершенно не причем. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 17.07.2014, 15:07 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Недавно видел похожий запрос над таблицей, типа получить ID-ы строк на большом диапазоне индексированных дат "select id from bigtable where dt between ... and ..." (т.е., строк потенциально много). Картина похожая, только fast full scan по pk-индексу, без обращения к самой таблице.  Как-то так  Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 17.07.2014, 18:35 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ну так создать индекс: tp + dt + id если хочется, что бы все из индекса бралось Или hint'ы в запрос. Но подозреваю или статистика кривая, либо админы "помогли" ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 17.07.2014, 18:42 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leonid KudryavtsevНу и понятное дело, что Reports тут совершенно не причем. Посмотрел, - согласен ) -=APS=-..на основании "подсмотренных" биндов Что-то в "биндах", - согласен ) вообщем посмотрел EXPLAIN PLAN FOR в навигаторе, что и нужно было сделать изначально, имеем: Код: plsql 1. 2. 3. Id Operation Name Rows Bytes Cost (%CPU)0 SELECT STATEMENT 1926 32742 240 (1) 1 FILTER 2 INDEX UNIQUE SCAN index1 1926 32742 240 (1) 3 INDEX SKIP SCAN index2 770K 239 (1) Код: plsql 1. 2. 3. Id Operation Name Rows Bytes Cost (%CPU)0 SELECT STATEMENT 369 6273 1 (0) 1 FILTER 2 INDEX UNIQUE SCAN index1 369 6273 1 (0) 3 INDEX RANGE SCAN index4 6646 1 (0) Код: plsql 1. 2. 3. Id Operation Name Rows Bytes Cost (%CPU)0 SELECT STATEMENT 14 238 1 (0) 1 INDEX RANGE SCAN index3 14 238 1 (0) т.е. с биндами одни индексы, без - другие используются ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.07.2014, 08:43 | 
  
  
  
   | 
||
| 
 
Reports 10 и поле типа char 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  mRdUKE, может Bind peeking ? в принципе можно "кнопочку" включения-отключения трассировки в Reports сделать и отсылать по e-mail или через external table ....ну и там смотреть ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 16.08.2014, 12:21 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=51&msg=38693966&tid=1878149]:  | 
    0ms | 
get settings:  | 
    9ms | 
get forum list:  | 
    13ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    60ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    48ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 11ms | 
| total: | 162ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...