[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2005
    Beiträge
    47
    Hallo, das ist ein initialer select der 120000 Sätze lädt. Vor dem Wechsel 8 sek. Jetzt fast 2 min. Mach ich den select über Java, hab ich das Phänomen nicht. Dann sind es wie vorher mit odbc nur 8 sek...
    Bin Softwareentwickler und hab relativ wenig Ahnung von der AS400... Werde das morgen mal weiterleiten und hoffe, dass das dann klappt...

  2. #2
    Registriert seit
    Feb 2005
    Beiträge
    47
    Guten Morgen,
    ich möchte das Problem nochmal etwas konkretisieren, mein Quellcode sieht so aus:

    string sql ="select * from bibl.table";
    OleDbDataReader dr=new OleDbCommand(sql, AS400Connection.getConnection()).ExecuteReader();
    //Diese Anweisung wird innerhalb von 1 sek ausgeführt!
    int c=0;
    while(dr.Read())
    c++; <-- Wenn ich hier nur den Counter laufen lasse braucht er 2 min bis er durch ist für 120.000 Sätze!

    Wie gesagt seltsam ist halt, dass das bei Tabellen auftritt, die ein Journal haben. Wenn ich eine Tabelle ohne Journal nehme, und durch Schleife rumpeln lasse ist das in 2 sek. erledigt. Und das bei 16.000.000 Sätzen!

    Grüße Oli


  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    .. was verwendet ihr denn hier für ein isolation (commit) level?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Feb 2005
    Beiträge
    47
    Hallo,
    erstmal vielen Dank für eure Hilfe!
    Ich habe nun eine Lösung gefunden. Ich verwende nicht mehr den OleDb-Treiber sondern den
    IBM.Data.DB2.iSeries. Damit geht es gefühlt nochmal schneller als vorher...

    Nun hab ich allerdings eine kleine Problemchen: Wenn ich mit dr.GetString(0) ein Feld aus der DB hole, dann ist das Ergebnis mit Blanks gefüllt (Soviele Blanks bis die Feldgröße erreicht ist). z.B. 'oli001 ' bei einem char(10). Kann man das irgendwie umgehen? Der OleDb hat hier nur 'oli001' geliefert.

    Grüße Oli




  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Du könntest mit Trim() die Blanks abschneiden. Entweder im SQL oder du machst das in einer View.

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... im SQL oder View bringt wohl nix, da der Treiber die Blanks dann wohl wieder dranhängt. Aber C##, C++ und VB. das C# für Arme und Kranke, haben eine Trim() Methode von String und die sollte es tun.

    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/

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von BenderD Beitrag anzeigen
    ... im SQL oder View bringt wohl nix, da der Treiber die Blanks dann wohl wieder dranhängt.
    auch getestet?
    Woher will der Treiber wissen ob da Blanks drangehängt gehören, wenn ich die Werte mit einer Funktion ändere?!?

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... weil er sich die Feldlänge aus den Metadaten holen. Im SQL könnte da allenfalls ein cast nach varchar funzen.
    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
    Aug 2003
    Beiträge
    1.508
    ... was noch nicht die Frage beantwortet ob die Aussage auch getestet wurde!
    Wenn irgendein Treiber oder was auch immer glaubt wissen zu können wie lang das Ergebnis einer Funktion ist, halte ich das für Glaskugellesen!

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... werfe mal einen Blick in die SQL Reference, bevor Du hier starke Sprüche los lässt.
    Stichwort create function, falls Du das ohne Hinweis nicht findest!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Auch ich lerne gerne dazu, also bitte ich um den Hinweis wo steht, dass wenn ich trim() verwende, irgendwo zu sehen ist, wie groß das Ergebnis VIELLEICHT sein "KÖNNTE".
    Und dann noch den Hinweis, dass der Treiber auch wirklich so arbeitet!
    Wenn das alles schon so klar belegt werden kann ... ja, dann braucht man es wirklich nicht probieren. Ansonsten schadet ein Test nicht um es eindeutig heraus zu finden oder wo liegt da jetzt das Problem?!?

Similar Threads

  1. SQL-Probleme nach Release-Wechsel auf V5R1M0
    By B.Hauser in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 03-03-03, 16:49
  2. Performanceanstieg bei Wechsel von V4R5 auf V5R1
    By tweedy1971 in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 04-02-03, 10:44
  3. Laufzeit-Probleme nach Release-Wechsel
    By B.Hauser in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-02-02, 18:18
  4. Release Wechsel von V4R4 auf V5R1
    By Carsten in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 19-10-01, 09:42
  5. Release - Wechsel
    By moeller400 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 29-05-01, 15:55

Berechtigungen

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