Peeter Geschrieben 11. Juni 2002 Geschrieben 11. Juni 2002 Hallo! Hat jemand von euch ne Ahnung, ob man bei ner SQL-Abfrage irgendwie den aktuellen Fortschritt zurückgeben kann? Oder gibts irgendwie ne andere Möglichkeit? Manche Abfragen dauern einfach lange und da wärs schon schön, wenn ich wüßte, wie weit er ist!! cu Peeter Zitieren
Jaraz Geschrieben 11. Juni 2002 Geschrieben 11. Juni 2002 Hallo, woher soll die Datenbank denn wissen wie viele Datensätze zu den Kriterien passen? Bei manchen Datenbanken/Sprachen kannst du allerdings schon mit dem Verarbeiten der Daten anfangen, bevor die Abfrage beendet ist. Gruß Jaraz Zitieren
Sonic83 Geschrieben 11. Juni 2002 Geschrieben 11. Juni 2002 Nichts zu machen, sowas gibt es leider nicht. Würde ich auch ab und zu mal brauchen. Schade eigentlich! Zitieren
Peeter Geschrieben 11. Juni 2002 Autor Geschrieben 11. Juni 2002 Schade eigentlich! Aber danke nochmals. Muß ich mir halt was anderes überlegen. cu Peeter Zitieren
BlearSun Geschrieben 11. Juni 2002 Geschrieben 11. Juni 2002 Wie lange dauert denn deine Abfrage? Zitieren
Peeter Geschrieben 11. Juni 2002 Autor Geschrieben 11. Juni 2002 Auf jeden Fall zu lange. So ca. 1-2 Minuten bei ner Datenbankdatei mit einer Anzahl von ca. 4Mio. Datensätzen! OK, da kann es lange dauern. Aber ich will ja nur wissen, ob es überhaupt voran geht. Also ist ne Fortschrittsanzeige eigentlich perfeckt dafür geeignet. Ach ja, ist ein DB2/400 Datenbankserver (AS/400). Und mit Java JDBC werden die Datenbankabfragen gemacht!! Lacht mich jetzt bitte net aus! cu Peeter Zitieren
BlearSun Geschrieben 11. Juni 2002 Geschrieben 11. Juni 2002 Naja ich kenne keine lösung Bei soviele Datensätze ist es normal, dass es auch lang daueren wird. Zitieren
loeti Geschrieben 15. Juni 2002 Geschrieben 15. Juni 2002 Unter Oracle kann man sich die "Kosten" eines SQL Statements mit dem "explain plan" Befehl ansehen. Hierbei macht es allerdings einen Unterschied, ob die Zugriffe statistik- oder regelbasiert durchgeführt werden. Um sich diese Kosten anzusehen bzw. den "Pfad", den Oracle zur Erlangung des Ergebnisses geht, muss man eine sog. Plan Tabelle anlegen und ein "explain plan" Statement ausführen. Die Ergebnisse der Analyse werden dann in der Plan Tabelle abgelegt und durch einen anschließenden Select ausgewertet und optisch aufbereitet. Folgende statements muss man dafür absetzen: 1) Plan Tabelle erzeugen (ist nur einmalig notwendig):create table PLAN_TABLE ( statement_id varchar2(30), timestamp date, remarks varchar2(80), operation varchar2(30), options varchar2(30), object_node varchar2(128), object_owner varchar2(30), object_name varchar2(30), object_instance numeric, object_type varchar2(30), search_columns numeric, id numeric, parent_id numeric, position numeric, other long) storage ( initial 100k next 100k ); 2) Plan Tabelle leeren und das zu analysierende Statement analysieren lassen und damit Plan Tabelle füllen:DELETE FROM PLAN_TABLE WHERE statement_id IN ('4', '5'); explain plan set statement_id = '4' for [i]<hier muss das Statement rein>[/i]; 3) Plan Tabelle auswerten:select lpad (' ',2*(level-1))||operation||' '||options||' '||object_name||' ' ||decode(id,0,'Cost='||position) "Query Plan" from plan_table start with id= 0 and statement_id = '4' connect by prior id = parent_id and statement_id = '4'; Gute Erklärungen zur Auswertung findet man hier:http://www.adp-gmbh.ch/ora/explainplan.html Zitieren
Olli_Master Geschrieben 15. Juni 2002 Geschrieben 15. Juni 2002 Wenn man den Status nicht abfragen kann, dann sollte man doch wenigstens dem Nutzer auf geeignete Weise anzeigen, dass viele Daten abgerufen werden. (Kleine Animation oder eine Progressbar) Alternative? Vielleicht kann man Datenbankseitig was optimieren? Wenn du nur lesen musst und die Daten nicht 100% aktuell sein müssen - bietet sich eventuell ein Materialized View (= Snapshot) an - mit einem passendem Index sollte das auch bei ein paar Mio-Datensätzen recht schnell gehen (Wenn du nur im Index suchst) Vielleicht sollte man auch analysieren, warum es so lange dauert? (Full-Table-Scan, Index, Cache-Treffer, Sperrungen, ...) Bei uns ist es zwar nur ein "kleiner" NT-Server - bei uns dauert aber keine optimierte Abfrage mehr als 2 Minuten. Zitieren
loeti Geschrieben 16. Juni 2002 Geschrieben 16. Juni 2002 DB Abfragen sollten eigentlich NIE länger als ein paar Sekunden laufen. Ich habe schon Abfragen gesehen, die Millionen von Sätzen aus einer Oracle DB lesen und dafür nur wenige Sekunden brauchen. Allerdings reicht es hier, eine klitztkleine Änderung vorzunehmen, und daraus werden 10 Minuten. Also: Wirklich optimierte Statements benötigen nur Sekunden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.