[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    290

    Optimale SQL Lösung für Zugriff PF mit 12+xx Millionen Sätze

    Hallo zusammen,
    ich muss via SQL den optimalsten Weg für den Zugriff auf eine PF mit > 12 Mill. Sätze realisieren.

    Grundsätzlich möchte ich die Daten in 3 Gruppen trennen, dazu das Jahr aus einem timestamp-Feld mit Timestamp - aktuelles Jahr -1, -2 und -3 abfragen
    Was ist die beste Lösung:
    a) 3 Views mit where-Klausel
    ....where year(timestamp_feld) >= (year(CURRENT_DATE)-1) (für 1 Jahr)

    b) 3 Indizies mit where-Klausel
    ...wobei mir hier ehrlich gesagt nicht ganz klar ist, ob die DB aufgrund des abgesetzen
    SQL Befehl den optimalen Index automatisch erkennt (glaube ich so gelesen zu haben)

    c) über LF ...ich weiß SQL und LF ??? gehts noch ???..Gott o Gott ...nichts verstanden :=(
    ...ich wüßte jetzt auch nicht wie ich die Abfrage timestamp mit akt.Jahr -1 bis -3
    im DDS codieren sollte

    Bin gespannt auf eure Vorschläge...Brigitta, etwas für dich als Vollprofi ???

    Danke vorab an alle !

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    12 Millionen ist nicht viel und rentiert kaum Gehirnschmalz zu verbraten, bevor man macht. Einfach machen und sehen ob es schnell genug ist => fertig. Nicht schnell genug? STRDBG und im Joblog nachsehen welche Indexe vorgeschlagen werden und diese anlegen. Immer noch zu langsam? Erst ab hier rentiert es sich nach schnelleren Lösungen zu suchen.
    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Jan 2003
    Beiträge
    290
    Danke Dieter Bender !

    Ich habe jetzt erst einmal 3 verschiedene Views gemacht, läuft schon recht fix.
    Jetzt schaue ich mal in IndexAdvisor/DBMon, was die DB dazu sagt.

    Vg.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Views maskieren Komplexität und machen deshalb das Leben einfacher, weswegen man sie auch unbedingt einsetzen sollte, tragen jedoch nichts zur Performance-Verbesserung bei.
    Eine View ist lediglich ein gesichertes SQL-Statement, das bei der Ausführung des tatsächlichen Statements aufgelöst und ausgeführt wird.

    Ich würde auf alle Fälle einen Encoded Vector Index (EVI( mit dem Schlüssel-Feld Year(Timestamp_Feld) anlegen.
    Code:
    Create Index YOURSCHEMA.YOUREVI01 
           On YOURSCHEMA.YOURTABLE
           (Year(YourTimestamp) As YOURYEAR Asc)
    Je nach dem welche Spalten du noch brauchst, oder ob Du an dieser Stelle z.B. Summen oder andere Aggregate bildest, kann der EVI erweitert werden.

    Evtl. würde auch ein normaler (Binary Radix Tree) Index ausreichen, ich gehe jedoch davon aus, dass pro Jahr mehr als ca. 15% der Daten verarbeitet werden (wenn nicht noch andere Selektions-Kriterien verwendet werden), und damit hat ein Binary Radix Tree Index ausgedient.

    ... und noch was: STRSQL und auch STRDBG wurden mindestens seit Release V5R3 nicht mehr erweitert. Die Nachrichten die auf diese Weise ausgegeben werden, sind schon lange nicht mehr vollständig.
    Zur Analyse von SQL-Statements sollte man wirklich Visual Explain verwenden.
    Mit Run AND Explain bekommt man auch die aktuellen Daten bzw. den aktuellen Access Plan angezeigt und KEINE Schätzwerte.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Ich würde auf alle Fälle einen Encoded Vector Index (EVI( mit dem Schlüssel-Feld Year(Timestamp_Feld) anlegen.
    Birgitta
    Glaskugel defekt: Timestamp Felder liefern in der Regel distincte Werte, für die ein EVI keinen Sinn macht!

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von BenderD Beitrag anzeigen
    Glaskugel defekt: Timestamp Felder liefern in der Regel distincte Werte, für die ein EVI keinen Sinn macht!
    Birgitta hat es eigentlich schön beschrieben. Es soll nicht der Timstamp im Index gespeichert werden, sondern lediglich das Jahr und das sollte halbwegs überschaubar sein ;-)

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Zitat Zitat von BenderD Beitrag anzeigen
    Glaskugel defekt: Timestamp Felder liefern in der Regel distincte Werte, für die ein EVI keinen Sinn macht!

    D*B
    Vielleicht solltest du deine Glaskugel mal abstauben, damit sie dir auch mal derived Indices und EVIs (mit und ohne Include Anweisungen) und auch sonst noch einige Neuerungen anzeigt.

    Die Welt hat sich weitergedreht über STRSQL und STRDBG hinaus.
    Es gibt neue und bessere Tools auch für die Auswertung der gesammelten Daten.
    Und gerade im Bereich der Performance-Optimierung passiert einiges in Rochester.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Und gerade im Bereich der Performance-Optimierung passiert einiges in Rochester.

    Birgitta
    ... man muss nur fest dran glauben! Ich bleibe dabei: jede[r], der ohne Messung Patentrezepte hat, ist ein Scharlatan!

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Jan 2003
    Beiträge
    290
    Vielen Dank an alle.

    @Birgitta
    Ich habe bis zur 1.Antwort hier schon einmal 3 Views gemacht, mittlerweile hat sich herausgestellt, dass ich in Monatsschritten abfragen muss/soll....also 3 Views für 3, 6 und 12 Monate.
    In den Views habe ich die where-Klausel wie folgt codiert:
    "where timestampdiff(64, Cast(current_timestamp-dmstimsn as Char(22))) <=3"
    Feld dmstimsn ist das timestamp-Feld.

    Sollte der Index dann so aussehen ???
    Create Index lib.indexname On lib.pfname ( dmstimsn Asc)

    Ich habe zwar schon einige andere Indizies erstellt, meist schaue ich in den Index-Advisor (mit dem DB-View) oder DBMonitor und hole mir da die "Index-Empfehlungen" mit den meisten Vorkommen/Verwendungen.
    Jetzt möchte ich mein Wissen mal ein wenig ausbauen und einen Profi wie dich fragen :=)
    (habe leider bisher kein Budget für eine Schulung bei euch bekommen, soll aber bald kommen und dann aber :=))

    Eine Frage bitte noch zu Visual Explain..
    Wenn ich das richtig gesucht habe ist das eine Funktion im Navigator for i ??
    Ich habe leider kein PDF/Link zu einem Tutorial für DB2/i gefunden, nur für andere DB2.
    Hast du da vielleicht einen Link, wo ich mich "schlau" machen kann ??

    Vielen Dank nochmals !!
    Peet

  10. #10
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von Peet Beitrag anzeigen
    Eine Frage bitte noch zu Visual Explain..
    Wenn ich das richtig gesucht habe ist das eine Funktion im Navigator for i ??
    Ich habe leider kein PDF/Link zu einem Tutorial für DB2/i gefunden, nur für andere DB2.
    Hast du da vielleicht einen Link, wo ich mich "schlau" machen kann ??
    Hier z.B.: https://www.ibm.com/support/knowledg...q/rzajqpdf.pdf

    lg Andreas

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Mache einen normalen Index über deinen Timestamp und kalkuliere das Abfrageergebnis in ein Timestamp:

    where mytimestamp
    between
    timestamp(current date - 3 months, time('00.00.00'))
    and
    timestamp(current date, time('23.59.59'))

    Dann benötigst du keine berechneten Indizes, da diese nur verwendet werden, wenn der Ausdruck genau identisch ist.
    Es ist daher besser, die Abfragebedingung so zu berechnen, dass sie zum gespeicherten Inhalt passt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Aug 2006
    Beiträge
    2.072
    Zitat Zitat von BenderD Beitrag anzeigen
    ... man muss nur fest dran glauben! Ich bleibe dabei: jede[r], der ohne Messung Patentrezepte hat, ist ein Scharlatan!

    D*B
    Naja,
    ich denke auch Du bist alt genug um bei bestimmten Zusammenhänge ohne ins Detail zu gehen sagen zu können: Machst Du es so dann wird es besser sein als vorher. Von Perfekt spricht ja keiner.

    Und gerade im EDV Bereich sind fast alle Dinge vorhersagbar. Und wenn Birgitta sagt probier das mal aus, wird es eine hohe Warscheinlichkeit haben das es passt.

    GG 4417

Similar Threads

  1. Qdls zugriff unter Win7 zugriff verweigert
    By berg01796 in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 15-11-16, 12:55
  2. BI-Lösung für iSeries
    By heini in forum NEWSboard IT Strategie
    Antworten: 7
    Letzter Beitrag: 11-02-13, 11:08
  3. Portal Lösung
    By Joey in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 06-11-02, 16:59
  4. CRM-Lösung von Quartess
    By Kirsten Steer in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 06-06-02, 10:31
  5. Vollelektronische Lotterie-Lösung
    By W.Steiner in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 10-08-01, 11:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •