Zum Inhalt springen

aktueller Fortschritt bei SQL-Abfrage


Peeter

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Auf jeden Fall zu lange. So ca. 1-2 Minuten bei ner Datenbankdatei mit einer Anzahl von ca. 4Mio. Datensätzen!:rolleyes:

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!:P

cu Peeter

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...