Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Consulta tarda demasiado la segunda vez

Estas en el tema de Consulta tarda demasiado la segunda vez en el foro de Oracle en Foros del Web. Hola a todos! Pues eso, tengo un problema y es que mi consulta la primera vez que se ejecuta lo hace muy rapido y la ...
  #1 (permalink)  
Antiguo 14/03/2014, 05:22
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Consulta tarda demasiado la segunda vez

Hola a todos!
Pues eso, tengo un problema y es que mi consulta la primera vez que se ejecuta lo hace muy rapido y la segunta tarda muchisimo... si cambio algo, pongo una linea vacia o espacio en blanco, vuelve a ejecutarse muy rapido, por lo que creo que es algun problema del cache... Alguna idea?
Muchas gracias!
  #2 (permalink)  
Antiguo 14/03/2014, 06:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta tarda demasiado la segunda vez

¿Ideas?
¿Sin ver la consulta, conocer la tabla, o saber por lo menos qué indices usa y en qué contexto?



En serio, ¿tú podrías responder algo a alguien, sin esa información?

Bueno, nosotros tampoco. La adivinación es algo que aún no está abarcando a las Bases de Datos...

Posteanos lo que te sugiero y veremos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/03/2014, 06:45
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Ok, gracias!
La consulta:
Código SQL:
Ver original
  1. SELECT *
  2.     FROM DISPO2.TB_LKW_TOUR t,
  3.          DISPO2.VI_AUFTRAG_AUF_LKW a
  4.          
  5.    WHERE     T.LKT_ID = A.LKT_ID
  6.          AND T.MND_NR = 1
  7.          AND T.NDL_NR = 117
  8.          AND TRUNC (t.LKT_ABFAHRT_VON) BETWEEN '24.01.2014' AND '24.02.2014'

la Tabla tiene varios indices, uno soble LKT_ABFAHRT_VON y la VIEW es mas complicada y puede que sea la que da los problemas... Necesitarias el Script de la VIEW?

Gracias!

lo que no se explica es porque cuando ejecuto la consulta tarda menos de un segundo y se la vuelvo a ejecutar puede llegar a 10 minutos... raro raro...

Última edición por gnzsoloyo; 14/03/2014 a las 07:14
  #4 (permalink)  
Antiguo 14/03/2014, 07:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta tarda demasiado la segunda vez

Una de las razones es simple de responder:
Cita:
la Tabla tiene varios indices, uno soble LKT_ABFAHRT_VON
Eso implica que tienes un campo DATE y un índice sobre este campo, el cual si no me equivoco alamcena fechas largas (Dias y horas).
Pero estás usando un TRUNC():
Código SQL:
Ver original
  1. AND TRUNC (t.LKT_ABFAHRT_VON) BETWEEN '24.01.2014' AND '24.02.2014'
Eso, te comento, hace que oracle descarte el índice, y realice un full table scan.
Lo que te conviene en ese caso es hacer que las fechas del BETWEEN se tomen como DATETIME:
Código SQL:
Ver original
  1. SELECT *
  2.     FROM DISPO2.TB_LKW_TOUR t,
  3.          DISPO2.VI_AUFTRAG_AUF_LKW a
  4.    WHERE     T.LKT_ID = A.LKT_ID
  5.          AND T.MND_NR = 1
  6.          AND T.NDL_NR = 117
  7.          AND t.LKT_ABFAHRT_VON BETWEEN TO_DATE('24/01/2014 00:00:00', 'dd/mm/yyyy hh24:mi:ss')  AND TO_DATE('24/01/2014 23:59:59', 'dd/mm/yyyy hh24:mi:ss')
Por engorroso que parezca, eso es más eficiente.

Ten en cuenta que siempre que aplicas una función sobre un campo que está indexado, el índice se descarta, porque Oracle no puede, a priori, saber si la función no suprime las características de las claves.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/03/2014, 07:38
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta tarda demasiado la segunda vez

La vista que tienes es materializada?
Postea por favor el script de la vista.

Como dices, es un escenario que no tiene sentido y entre mas información nos des, puede analizarse mejor.

El escenario es logico si fuese al reves, ya que la primera vez hace lectura a disco... para la segunda, todos los bloques con la información seleccionada ya se encuentran en memoria (SGA).


saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 14/03/2014, 07:54
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

probe con t.LKT_ABFAHRT_VON BETWEEN TO_DATE('24/01/2014 00:00:00', 'dd/mm/yyyy hh24:mi:ss') AND TO_DATE('24/01/2014 23:59:59', 'dd/mm/yyyy hh24:mi:ss'
y no ayudo nada

Aqui el Script... gracias!!!
Código SQL:
Ver original
  1. CREATE OR REPLACE FORCE VIEW DISPO2.VI_AUFTRAG_AUF_LKW
  2. (
  3.    MND_NR,
  4.    NDL_NR,
  5.    AUF_ID,
  6.    FAT_ID,
  7.    RIA_ID,
  8.    OEM_ID,
  9.    LKT_ID,
  10.    LKT_LAUF,
  11.    TPO_ID,
  12.    TPO_ID_END,
  13.    VERS_ROLLE,
  14.    VERS_ADR,
  15.    VERS_NAME1,
  16.    VERS_STRASSE,
  17.    VERS_LKZ,
  18.    VERS_PLZ,
  19.    VERS_ORT,
  20.    VERS_LADESTELLE,
  21.    VERS_LADEZONE,
  22.    AHIS_ID,
  23.    AUF_ANLIEFERUNG,
  24.    KOSTEN,
  25.    KOSTEN_EV,
  26.    ERLOES,
  27.    LKT_POS,
  28.    LKT_ENTLADEN,
  29.    LKT_ENTLADEN_SYSTEM,
  30.    LKT_ABHOL_ANLIEF_WAB,
  31.    LKT_ABFAHRT_VON,
  32.    LKT_ANKUNFT_VON
  33. )
  34. AS
  35.    SELECT "MND_NR",
  36.           "NDL_NR",
  37.           "AUF_ID",
  38.           "FAT_ID",
  39.           "RIA_ID",
  40.           "OEM_ID",
  41.           "LKT_ID",
  42.           "LKT_LAUF",
  43.           "TPO_ID",
  44.           "TPO_ID_END",
  45.           "VERS_ROLLE",
  46.           "VERS_ADR",
  47.           "VERS_NAME1",
  48.           "VERS_STRASSE",
  49.           "VERS_LKZ",
  50.           "VERS_PLZ",
  51.           "VERS_ORT",
  52.           "VERS_LADESTELLE",
  53.           "VERS_LADEZONE",
  54.           "AHIS_ID",
  55.           "AUF_ANLIEFERUNG",
  56.           "KOSTEN",
  57.           "KOSTEN_EV",
  58.           "ERLOES",
  59.           "LKT_POS",
  60.           "LKT_ENTLADEN",
  61.           "LKT_ENTLADEN_SYSTEM",
  62.           "LKT_ABHOL_ANLIEF_WAB",
  63.           "LKT_ABFAHRT_VON",
  64.           "LKT_ANKUNFT_VON"
  65.      FROM (                                          -- HL - nicht freigegeben
  66.            SELECT a.MND_NR,
  67.                   a.NDL_NR,
  68.                   A.AUF_ID,
  69.                   A.FAT_ID,
  70.                   a.RIA_ID,
  71.                   A.OEM_ID,
  72.                   T.LKT_ID,
  73.                   T.LKT_LAUF,
  74.                   A.TPO_ID_HL AS TPO_ID,
  75.                   A.TPO_ID_HL_END AS TPO_ID_END,
  76.                   NVL (hist.AHIS_ABHOL_ROLLE, a.AUF_ABHOL_ROLLE)
  77.                      AS VERS_ROLLE,
  78.                   NVL (hist.AHIS_ABHOL_ADR, a.AUF_ABHOL_ADR) AS VERS_ADR,
  79.                   NVL (hist.AHIS_ABHOL_NAME1, a.AUF_ABHOL_NAME1)
  80.                      AS VERS_NAME1,
  81.                   NVL (hist.AHIS_ABHOL_STRASSE, a.AUF_ABHOL_STRASSE)
  82.                      AS VERS_STRASSE,
  83.                   NVL (hist.AHIS_ABHOL_LKZ, a.AUF_ABHOL_LKZ) AS VERS_LKZ,
  84.                   NVL (hist.AHIS_ABHOL_PLZ, a.AUF_ABHOL_PLZ) AS VERS_PLZ,
  85.                   NVL (hist.AHIS_ABHOL_ORT, a.AUF_ABHOL_ORT) AS VERS_ORT,
  86.                   NVL (hist.AHIS_ABHOLSTELLE, a.AUF_ABHOLSTELLE)
  87.                      AS VERS_LADESTELLE,
  88.                   NVL (hist.AHIS_ABHOLZONE, a.AUF_ABHOLZONE) AS VERS_LADEZONE,
  89.                   TO_NUMBER (NULL) AS AHIS_ID,
  90.                   a.AUF_ANLIEFERUNG,
  91.                   NVL (NVL (a.AUF_KOSTEN_PAU_HL, A.AUF_KOSTEN_VERTEILT), 0)
  92.                      AS KOSTEN,
  93.                   0 AS KOSTEN_EV,
  94.                   NVL (NVL (a.AUF_ERLOES_HL_MANUELL, A.AUF_ERLOES_HL), 0)
  95.                      AS ERLOES,
  96.                   A.LKT_POS_HL AS LKT_POS,
  97.                   A.LKT_HL_ENTLADEN AS LKT_ENTLADEN,
  98.                   A.LKT_HL_ENTLADEN_SYSTEM AS LKT_ENTLADEN_SYSTEM,
  99.                   a.LKT_HL_ABHOL_ANLIEF_WAB AS LKT_ABHOL_ANLIEF_WAB,
  100.                   T.LKT_ABFAHRT_VON,
  101.                   T.LKT_ANKUNFT_VON
  102.              FROM DISPO2.TB_AUFTRAG a,
  103.                   DISPO2.TB_LKW_TOUR t,
  104.                   DISPO2.tb_auf_historie hist
  105.             WHERE     A.LKT_ID_HL = T.LKT_ID
  106.                   AND NOT EXISTS
  107.                          (SELECT 1
  108.                             FROM DISPO2.TB_AUF_HISTORIE h
  109.                            WHERE a.AUF_ID = h.AUF_ID AND t.LKT_ID = h.LKT_ID)
  110.                   -- mit welchem Historieneintrag für den genannten Auftrag
  111.                   -- wurde die erste Abholung gemacht?
  112.                   AND a.AUF_ID = hist.AUF_ID(+)
  113.                   AND DISPO2.GET_FIRST_AUF_HIST_INDEX (a.AUF_ID) =
  114.                          hist.AHIS_INDEX(+)
  115.            UNION
  116.            -- VL - nicht freigegeben
  117.            SELECT a.MND_NR,
  118.                   a.NDL_NR,
  119.                   A.AUF_ID,
  120.                   A.FAT_ID,
  121.                   a.RIA_ID,
  122.                   A.OEM_ID,
  123.                   T.LKT_ID,
  124.                   T.LKT_LAUF,
  125.                   A.TPO_ID_VL AS TPO_ID,
  126.                   A.TPO_ID_VL_END AS TPO_ID_END,
  127.                   NVL (hist.AHIS_ABHOL_ROLLE, a.AUF_ABHOL_ROLLE)
  128.                      AS VERS_ROLLE,
  129.                   NVL (hist.AHIS_ABHOL_ADR, a.AUF_ABHOL_ADR) AS VERS_ADR,
  130.                   NVL (hist.AHIS_ABHOL_NAME1, a.AUF_ABHOL_NAME1)
  131.                      AS VERS_NAME1,
  132.                   NVL (hist.AHIS_ABHOL_STRASSE, a.AUF_ABHOL_STRASSE)
  133.                      AS VERS_STRASSE,
  134.                   NVL (hist.AHIS_ABHOL_LKZ, a.AUF_ABHOL_LKZ) AS VERS_LKZ,
  135.                   NVL (hist.AHIS_ABHOL_PLZ, a.AUF_ABHOL_PLZ) AS VERS_PLZ,
  136.                   NVL (hist.AHIS_ABHOL_ORT, a.AUF_ABHOL_ORT) AS VERS_ORT,
  137.                   NVL (hist.AHIS_ABHOLSTELLE, a.AUF_ABHOLSTELLE)
  138.                      AS VERS_LADESTELLE,
  139.                   NVL (hist.AHIS_ABHOLZONE, a.AUF_ABHOLZONE) AS VERS_LADEZONE,
  140.                   TO_NUMBER (NULL) AS AHIS_ID,
  141.                   a.AUF_ANLIEFERUNG,
  142.                   NVL (A.AUF_KOSTEN_VERTEILT, 0) AS KOSTEN,
  143.                   0 AS KOSTEN_EV,
  144.                   NVL (NVL (a.AUF_ERLOES_VL_MANUELL, A.AUF_ERLOES_VL), 0)
  145.                      AS ERLOES,
  146.                   A.LKT_POS_VL AS LKT_POS,
  147.                   A.LKT_VL_ENTLADEN AS LKT_ENTLADEN,
  148.                   A.LKT_VL_ENTLADEN_SYSTEM AS LKT_ENTLADEN_SYSTEM,
  149.                   a.LKT_VL_ABHOL_ANLIEF_WAB AS LKT_ABHOL_ANLIEF_WAB,
  150.                   T.LKT_ABFAHRT_VON,
  151.                   T.LKT_ANKUNFT_VON
  152.              FROM DISPO2.TB_AUFTRAG a,
  153.                   DISPO2.TB_LKW_TOUR t,
  154.                   DISPO2.tb_auf_historie hist
  155.             WHERE     A.LKT_ID_VL = T.LKT_ID
  156.                   AND NOT EXISTS
  157.                          (SELECT 1
  158.                             FROM DISPO2.TB_AUF_HISTORIE h
  159.                            WHERE a.AUF_ID = h.AUF_ID AND t.LKT_ID = h.LKT_ID)
  160.                   -- mit welchem Historieneintrag für den genannten Auftrag
  161.                   -- wurde die erste Abholung gemacht?
  162.                   AND a.AUF_ID = hist.AUF_ID(+)
  163.                   AND DISPO2.GET_FIRST_AUF_HIST_INDEX (a.AUF_ID) =
  164.                          hist.AHIS_INDEX(+)
  165.            UNION
  166.            -- Historie (alles was freigegeben ist)
  167.            SELECT a.MND_NR,
  168.                   a.NDL_NR,
  169.                   A.AUF_ID,
  170.                   A.FAT_ID,
  171.                   a.RIA_ID,
  172.                   A.OEM_ID,
  173.                   T.LKT_ID,
  174.                   H.AHIS_LAUF AS LKT_LAUF,
  175.                   h.TPO_ID,
  176.                   h.TPO_ID_END,
  177.                   NVL (hist.AHIS_ABHOL_ROLLE, a.AUF_ABHOL_ROLLE)
  178.                      AS VERS_ROLLE,
  179.                   NVL (hist.AHIS_ABHOL_ADR, a.AUF_ABHOL_ADR) AS VERS_ADR,
  180.                   NVL (hist.AHIS_ABHOL_NAME1, a.AUF_ABHOL_NAME1)
  181.                      AS VERS_NAME1,
  182.                   NVL (hist.AHIS_ABHOL_STRASSE, a.AUF_ABHOL_STRASSE)
  183.                      AS VERS_STRASSE,
  184.                   NVL (hist.AHIS_ABHOL_LKZ, a.AUF_ABHOL_LKZ) AS VERS_LKZ,
  185.                   NVL (hist.AHIS_ABHOL_PLZ, a.AUF_ABHOL_PLZ) AS VERS_PLZ,
  186.                   NVL (hist.AHIS_ABHOL_ORT, a.AUF_ABHOL_ORT) AS VERS_ORT,
  187.                   NVL (hist.AHIS_ABHOLSTELLE, a.AUF_ABHOLSTELLE)
  188.                      AS VERS_LADESTELLE,
  189.                   NVL (hist.AHIS_ABHOLZONE, a.AUF_ABHOLZONE) AS VERS_LADEZONE,
  190.                   h.AHIS_ID,
  191.                   a.AUF_ANLIEFERUNG,
  192.                   -- KOSTEN - bei HL gehen die Kosten nicht in die Historie
  193.                   DECODE (
  194.                      H.AHIS_LAUF,
  195.                      'HL', NVL (
  196.                               NVL (a.AUF_KOSTEN_PAU_HL,
  197.                                    A.AUF_KOSTEN_VERTEILT),
  198.                               0),
  199.                      NVL (NVL (h.AHIS_KOSTEN_PAU, h.AHIS_KOSTEN_VERTEILT), 0))
  200.                      AS KOSTEN,
  201.                   -- KOSTEN EV (Umschlag) - bei HL gehen die Kosten nicht in die Historie
  202.                   DECODE (H.AHIS_LAUF,
  203.                           'HL', NVL (A.AUF_KOSTEN_EV, 0),
  204.                           NVL (H.AHIS_KOSTEN_EV, 0))
  205.                      AS KOSTEN_EV,
  206.                   -- Bei HL gehen die Erlöse nicht in die Historie
  207.                   DECODE (
  208.                      H.AHIS_LAUF,
  209.                      'HL', NVL (
  210.                               NVL (a.AUF_ERLOES_HL_MANUELL, A.AUF_ERLOES_HL),
  211.                               0),
  212.                      NVL (NVL (h.AHIS_ERLOES_MANUELL, h.AHIS_ERLOES), 0))
  213.                      AS ERLOES,
  214.                   H.LKT_POS,
  215.                   H.LKT_ENTLADEN,
  216.                   H.LKT_ENTLADEN_SYSTEM,
  217.                   H.LKT_ABHOL_ANLIEF_WAB,
  218.                   T.LKT_ABFAHRT_VON,
  219.                   T.LKT_ANKUNFT_VON
  220.              FROM DISPO2.TB_AUFTRAG a,
  221.                   DISPO2.TB_LKW_TOUR t,
  222.                   DISPO2.TB_AUF_HISTORIE h,
  223.                   DISPO2.tb_auf_historie hist
  224.             WHERE     h.LKT_ID = T.LKT_ID
  225.                   AND A.AUF_ID = h.AUF_ID
  226.                   -- mit welchem Historieneintrag für den genannten Auftrag
  227.                   -- wurde die erste Abholung gemacht?
  228.                   AND a.AUF_ID = hist.AUF_ID(+)
  229.                   AND DISPO2.GET_FIRST_AUF_HIST_INDEX (a.AUF_ID) =
  230.                          hist.AHIS_INDEX(+));
  231.  
  232.  
  233. GRANT SELECT ON DISPO2.VI_AUFTRAG_AUF_LKW TO ABRECHDC;
  234.  
  235. GRANT SELECT ON DISPO2.VI_AUFTRAG_AUF_LKW TO APPLILOG_USER;

Última edición por gnzsoloyo; 14/03/2014 a las 08:34
  #7 (permalink)  
Antiguo 14/03/2014, 08:11
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

La cuestion es que estoy mirando y remirando y tengo lo mismo en dos bases de datos distintas, misma tabla misma view y en una funciona perfectamente y en la otra no... esto es de locos!!
  #8 (permalink)  
Antiguo 14/03/2014, 08:13
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta tarda demasiado la segunda vez

Un plan de ejecución de esta consulta ayudaría:

Código SQL:
Ver original
  1. SELECT "MND_NR",
  2. "NDL_NR",
  3. "AUF_ID",
  4. "FAT_ID",
  5. "RIA_ID",
  6. "OEM_ID",
  7. "LKT_ID",
  8. "LKT_LAUF",
  9. "TPO_ID",
  10. "TPO_ID_END",
  11. "VERS_ROLLE",
  12. "VERS_ADR",
  13. "VERS_NAME1",
  14. "VERS_STRASSE",
  15. "VERS_LKZ",
  16. "VERS_PLZ",
  17. "VERS_ORT",
  18. "VERS_LADESTELLE",
  19. "VERS_LADEZONE",
  20. "AHIS_ID",
  21. "AUF_ANLIEFERUNG",
  22. "KOSTEN",
  23. "KOSTEN_EV",
  24. "ERLOES",
  25. "LKT_POS",
  26. "LKT_ENTLADEN",
  27. "LKT_ENTLADEN_SYSTEM",
  28. "LKT_ABHOL_ANLIEF_WAB",
  29. "LKT_ABFAHRT_VON",
  30. "LKT_ANKUNFT_VON"
  31. FROM ( -- HL - nicht freigegeben
  32. SELECT a.MND_NR,
  33. a.NDL_NR,
  34. A.AUF_ID,
  35. A.FAT_ID,
  36. a.RIA_ID,
  37. A.OEM_ID,
  38. T.LKT_ID,
  39. T.LKT_LAUF,
  40. A.TPO_ID_HL AS TPO_ID,
  41. A.TPO_ID_HL_END AS TPO_ID_END,
  42. NVL (hist.AHIS_ABHOL_ROLLE, a.AUF_ABHOL_ROLLE)
  43. AS VERS_ROLLE,
  44. NVL (hist.AHIS_ABHOL_ADR, a.AUF_ABHOL_ADR) AS VERS_ADR,
  45. NVL (hist.AHIS_ABHOL_NAME1, a.AUF_ABHOL_NAME1)
  46. AS VERS_NAME1,
  47. NVL (hist.AHIS_ABHOL_STRASSE, a.AUF_ABHOL_STRASSE)
  48. AS VERS_STRASSE,
  49. NVL (hist.AHIS_ABHOL_LKZ, a.AUF_ABHOL_LKZ) AS VERS_LKZ,
  50. NVL (hist.AHIS_ABHOL_PLZ, a.AUF_ABHOL_PLZ) AS VERS_PLZ,
  51. NVL (hist.AHIS_ABHOL_ORT, a.AUF_ABHOL_ORT) AS VERS_ORT,
  52. NVL (hist.AHIS_ABHOLSTELLE, a.AUF_ABHOLSTELLE)
  53. AS VERS_LADESTELLE,
  54. NVL (hist.AHIS_ABHOLZONE, a.AUF_ABHOLZONE) AS VERS_LADEZONE,
  55. TO_NUMBER (NULL) AS AHIS_ID,
  56. a.AUF_ANLIEFERUNG,
  57. NVL (NVL (a.AUF_KOSTEN_PAU_HL, A.AUF_KOSTEN_VERTEILT), 0)
  58. AS KOSTEN,
  59. 0 AS KOSTEN_EV,
  60. NVL (NVL (a.AUF_ERLOES_HL_MANUELL, A.AUF_ERLOES_HL), 0)
  61. AS ERLOES,
  62. A.LKT_POS_HL AS LKT_POS,
  63. A.LKT_HL_ENTLADEN AS LKT_ENTLADEN,
  64. A.LKT_HL_ENTLADEN_SYSTEM AS LKT_ENTLADEN_SYSTEM,
  65. a.LKT_HL_ABHOL_ANLIEF_WAB AS LKT_ABHOL_ANLIEF_WAB,
  66. T.LKT_ABFAHRT_VON,
  67. T.LKT_ANKUNFT_VON
  68. FROM DISPO2.TB_AUFTRAG a,
  69. DISPO2.TB_LKW_TOUR t,
  70. DISPO2.tb_auf_historie hist
  71. WHERE A.LKT_ID_HL = T.LKT_ID
  72. AND NOT EXISTS
  73. (SELECT 1
  74. FROM DISPO2.TB_AUF_HISTORIE h
  75. WHERE a.AUF_ID = h.AUF_ID AND t.LKT_ID = h.LKT_ID)
  76. -- mit welchem Historieneintrag für den genannten Auftrag
  77. -- wurde die erste Abholung gemacht?
  78. AND a.AUF_ID = hist.AUF_ID(+)
  79. AND DISPO2.GET_FIRST_AUF_HIST_INDEX (a.AUF_ID) =
  80. hist.AHIS_INDEX(+)
  81. UNION
  82. -- VL - nicht freigegeben
  83. SELECT a.MND_NR,
  84. a.NDL_NR,
  85. A.AUF_ID,
  86. A.FAT_ID,
  87. a.RIA_ID,
  88. A.OEM_ID,
  89. T.LKT_ID,
  90. T.LKT_LAUF,
  91. A.TPO_ID_VL AS TPO_ID,
  92. A.TPO_ID_VL_END AS TPO_ID_END,
  93. NVL (hist.AHIS_ABHOL_ROLLE, a.AUF_ABHOL_ROLLE)
  94. AS VERS_ROLLE,
  95. NVL (hist.AHIS_ABHOL_ADR, a.AUF_ABHOL_ADR) AS VERS_ADR,
  96. NVL (hist.AHIS_ABHOL_NAME1, a.AUF_ABHOL_NAME1)
  97. AS VERS_NAME1,
  98. NVL (hist.AHIS_ABHOL_STRASSE, a.AUF_ABHOL_STRASSE)
  99. AS VERS_STRASSE,
  100. NVL (hist.AHIS_ABHOL_LKZ, a.AUF_ABHOL_LKZ) AS VERS_LKZ,
  101. NVL (hist.AHIS_ABHOL_PLZ, a.AUF_ABHOL_PLZ) AS VERS_PLZ,
  102. NVL (hist.AHIS_ABHOL_ORT, a.AUF_ABHOL_ORT) AS VERS_ORT,
  103. NVL (hist.AHIS_ABHOLSTELLE, a.AUF_ABHOLSTELLE)
  104. AS VERS_LADESTELLE,
  105. NVL (hist.AHIS_ABHOLZONE, a.AUF_ABHOLZONE) AS VERS_LADEZONE,
  106. TO_NUMBER (NULL) AS AHIS_ID,
  107. a.AUF_ANLIEFERUNG,
  108. NVL (A.AUF_KOSTEN_VERTEILT, 0) AS KOSTEN,
  109. 0 AS KOSTEN_EV,
  110. NVL (NVL (a.AUF_ERLOES_VL_MANUELL, A.AUF_ERLOES_VL), 0)
  111. AS ERLOES,
  112. A.LKT_POS_VL AS LKT_POS,
  113. A.LKT_VL_ENTLADEN AS LKT_ENTLADEN,
  114. A.LKT_VL_ENTLADEN_SYSTEM AS LKT_ENTLADEN_SYSTEM,
  115. a.LKT_VL_ABHOL_ANLIEF_WAB AS LKT_ABHOL_ANLIEF_WAB,
  116. T.LKT_ABFAHRT_VON,
  117. T.LKT_ANKUNFT_VON
  118. FROM DISPO2.TB_AUFTRAG a,
  119. DISPO2.TB_LKW_TOUR t,
  120. DISPO2.tb_auf_historie hist
  121. WHERE A.LKT_ID_VL = T.LKT_ID
  122. AND NOT EXISTS
  123. (SELECT 1
  124. FROM DISPO2.TB_AUF_HISTORIE h
  125. WHERE a.AUF_ID = h.AUF_ID AND t.LKT_ID = h.LKT_ID)
  126. -- mit welchem Historieneintrag für den genannten Auftrag
  127. -- wurde die erste Abholung gemacht?
  128. AND a.AUF_ID = hist.AUF_ID(+)
  129. AND DISPO2.GET_FIRST_AUF_HIST_INDEX (a.AUF_ID) =
  130. hist.AHIS_INDEX(+)
  131. UNION
  132. -- Historie (alles was freigegeben ist)
  133. SELECT a.MND_NR,
  134. a.NDL_NR,
  135. A.AUF_ID,
  136. A.FAT_ID,
  137. a.RIA_ID,
  138. A.OEM_ID,
  139. T.LKT_ID,
  140. H.AHIS_LAUF AS LKT_LAUF,
  141. h.TPO_ID,
  142. h.TPO_ID_END,
  143. NVL (hist.AHIS_ABHOL_ROLLE, a.AUF_ABHOL_ROLLE)
  144. AS VERS_ROLLE,
  145. NVL (hist.AHIS_ABHOL_ADR, a.AUF_ABHOL_ADR) AS VERS_ADR,
  146. NVL (hist.AHIS_ABHOL_NAME1, a.AUF_ABHOL_NAME1)
  147. AS VERS_NAME1,
  148. NVL (hist.AHIS_ABHOL_STRASSE, a.AUF_ABHOL_STRASSE)
  149. AS VERS_STRASSE,
  150. NVL (hist.AHIS_ABHOL_LKZ, a.AUF_ABHOL_LKZ) AS VERS_LKZ,
  151. NVL (hist.AHIS_ABHOL_PLZ, a.AUF_ABHOL_PLZ) AS VERS_PLZ,
  152. NVL (hist.AHIS_ABHOL_ORT, a.AUF_ABHOL_ORT) AS VERS_ORT,
  153. NVL (hist.AHIS_ABHOLSTELLE, a.AUF_ABHOLSTELLE)
  154. AS VERS_LADESTELLE,
  155. NVL (hist.AHIS_ABHOLZONE, a.AUF_ABHOLZONE) AS VERS_LADEZONE,
  156. h.AHIS_ID,
  157. a.AUF_ANLIEFERUNG,
  158. -- KOSTEN - bei HL gehen die Kosten nicht in die Historie
  159. DECODE (
  160. H.AHIS_LAUF,
  161. 'HL', NVL (
  162. NVL (a.AUF_KOSTEN_PAU_HL,
  163. A.AUF_KOSTEN_VERTEILT),
  164. 0),
  165. NVL (NVL (h.AHIS_KOSTEN_PAU, h.AHIS_KOSTEN_VERTEILT), 0))
  166. AS KOSTEN,
  167. -- KOSTEN EV (Umschlag) - bei HL gehen die Kosten nicht in die Historie
  168. DECODE (H.AHIS_LAUF,
  169. 'HL', NVL (A.AUF_KOSTEN_EV, 0),
  170. NVL (H.AHIS_KOSTEN_EV, 0))
  171. AS KOSTEN_EV,
  172. -- Bei HL gehen die Erlöse nicht in die Historie
  173. DECODE (
  174. H.AHIS_LAUF,
  175. 'HL', NVL (
  176. NVL (a.AUF_ERLOES_HL_MANUELL, A.AUF_ERLOES_HL),
  177. 0),
  178. NVL (NVL (h.AHIS_ERLOES_MANUELL, h.AHIS_ERLOES), 0))
  179. AS ERLOES,
  180. H.LKT_POS,
  181. H.LKT_ENTLADEN,
  182. H.LKT_ENTLADEN_SYSTEM,
  183. H.LKT_ABHOL_ANLIEF_WAB,
  184. T.LKT_ABFAHRT_VON,
  185. T.LKT_ANKUNFT_VON
  186. FROM DISPO2.TB_AUFTRAG a,
  187. DISPO2.TB_LKW_TOUR t,
  188. DISPO2.TB_AUF_HISTORIE h,
  189. DISPO2.tb_auf_historie hist
  190. WHERE h.LKT_ID = T.LKT_ID
  191. AND A.AUF_ID = h.AUF_ID
  192. -- mit welchem Historieneintrag für den genannten Auftrag
  193. -- wurde die erste Abholung gemacht?
  194. AND a.AUF_ID = hist.AUF_ID(+)
  195. AND DISPO2.GET_FIRST_AUF_HIST_INDEX (a.AUF_ID) =
  196. hist.AHIS_INDEX(+));

Si estas en sql developer con f10 te sale el plan de ejecución. Esto nos dirá si esta usando bien los indices.

Con respecto a lo que dices de la misma BD en otra maquina, también puedes poner ese mismo plan de ejecución.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 14/03/2014, 08:26
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

Estoy con Toad for Oracle. Puede que sea un problema de cofiguracion del Toad?
  #10 (permalink)  
Antiguo 14/03/2014, 08:37
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta tarda demasiado la segunda vez

Busca en toad como generar el explain plan. y lo pones aca.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 14/03/2014, 08:39
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

ya lo tengo... lo que no puedo es ponerlo... me pide una url siempre ????
  #12 (permalink)  
Antiguo 14/03/2014, 08:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta tarda demasiado la segunda vez

http://markhoxey.wordpress.com/2012/...xecution-plan/

aca sale en toad cual es el boton para sacar el explain plan
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 14/03/2014, 08:44
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

lo tengo!! pero no tengo narices de colgarlo aqui!! no se como subirlo
  #14 (permalink)  
Antiguo 14/03/2014, 08:50
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

lo logre
  #15 (permalink)  
Antiguo 14/03/2014, 08:51
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

  #16 (permalink)  
Antiguo 14/03/2014, 08:53
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

  #17 (permalink)  
Antiguo 14/03/2014, 08:58
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta tarda demasiado la segunda vez

No es para nada alentador ese plan de ejecución

Si te fijas, hay 10 tablas con access full. Esto quiere decir que tiene que leer cada registro de la tabla hasta encontrar los registros solicitados en el where.
Los costos y la caerdinalidad están bastante altos.

De las 10 tablas que aparecen en rojo, revisa cuales son las mas grandes y empieza a crear indices sobre los campos de busqueda.

Si quieres, puedes subir de igual forma el explain plan de la maquina que dices si trae la información rapidamente.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #18 (permalink)  
Antiguo 17/03/2014, 02:01
 
Fecha de Ingreso: marzo-2014
Ubicación: Passau
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Consulta tarda demasiado la segunda vez

Esta claro que podria mejorar ese plan de ejecucion, pero eso no explicaria el porque tarde tanto la ejecucion de la SQL la segunda vez.

Sigo pensando que es el cache y ahora más:
Si despues de cada ejecucion hago un alter system flush shared_pool;
la query tarda siempre milisegundos... pero no se como solucionar o mirar el cache... Ayuda, Gracias!!!

Etiquetas: demasiado, segunda, tarda, vez
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:23.