[53328] in SAPr3-news

home help back first fref pref prev next nref lref last post

Performance-Problem

daemon@ATHENA.MIT.EDU (Jens Hoetger)
Thu Feb 10 09:56:11 2005

To: sapr3-news@mit.edu
Date: Thu, 10 Feb 2005 15:55:30 +0100
From: Jens Hoetger <Jens.Hoetger@de.bosch.com>
Message-ID: <s8tm01ls8okm56elu80fv96v5b1ddu63jv@4ax.com>

Hallo,

wir haben bei einer (eigenentwickelten) Anwendung erhebliche
Performance-Probleme. Das Select-Statement liest bereits "nur" die
benötigten Felder eines Views, beteiligte Tabellen sind MKPF und MSEG.
Der Execution Plan vom Oracle (Version 9...) sieht eigentlich nicht so
schlecht aus:
SQL Statement
SELECT
  "MANDT" , "MBLNR" , "MATNR" , "WERKS" , "LGORT" , "BWART" , "ERFMG"
, "LGPLA" , "LGNUM" ,         
  "LGTYP" , "BUDAT" , "ERFME"
FROM
  "/RB04/YL4_V_MKPF"
WHERE
  "MANDT" = :A0 AND "MATNR" IN ( :A1 , ..., :A64) AND "WERKS" = :A65
  AND "BUDAT" >= :A66 AND "BUDAT" <= :A67 AND "LGORT" = :A68 AND (
"BWART" = :A69 OR "BWART" = :A70
  ) AND "LGPLA" = :A71

Execution Plan
 SELECT STATEMENT ( Estimated Costs = 1 , Estimated #Rows = 1 )
       FILTER
           NESTED LOOPS
               INLIST ITERATOR
                   TABLE ACCESS BY INDEX ROWID MSEG
                       INDEX RANGE SCAN MSEG~M
               TABLE ACCESS BY INDEX ROWID MKPF
                   INDEX UNIQUE SCAN MKPF~0

Das Problem scheint der Zugriff auf MSEG zu sein. Die Verwendung des
Index MSEG~M ist nach meiner Einschaetzung (den CBO mal aussen vor)
auch in Ordnung, der CBO liegt da wohl richtig. Die Tabelle enthaelt
ca. 18 Mio Datensaetze, was zugegebenermassen nicht wenig ist, was
sich aber nicht mal eben aendern laesst.  

Was mich wundert, sind die lahmen Zugriffszeiten:
Duration  Objectname Oper    Rec   RC     Statement
    1.416 /X/YL4_V_X PREPARE     0      0 SELECT WHERE "MANDT" ...
       18 /X/YL4_V_X OPEN        0      0 SELECT WHERE "MANDT" ...
369951521 /X/YL4_V_X FETCH     677      0 
442593250 /X/YL4_V_X FETCH     677      0 
137638795 /X/YL4_V_X FETCH     677      0 
44856.511 /X/YL4_V_X FETCH     205   1403 

Ein Fetch liest soweit ich weiss maximal 32KB Daten. Die benoetigten
Zeiten dafuer sind enorm, ich verstehe nicht, warum das so lange
dauert. Den Index MSEG~M habe ich neu erzeugt, da die Storage Quality
bei 55% lag, aber das hat letzten Endes so gut wie nichts gebracht.
Die Hardware ist eine IBM Regatta irgendwas. 

Hat jemand einen Tipp oder eine Idee (Reorganisation der MSEG-Tabelle
bzw. des Tablespaces mal ausgenommen)?
-- 
Jens Hoetger
-> http://www.scribblepapers.de.vu

home help back first fref pref prev next nref lref last post