Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

aktueller Fortschritt bei SQL-Abfrage

Empfohlene Antworten

Veröffentlicht

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

hm, nee. denk net, dass das geht

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

Nichts zu machen, sowas gibt es leider nicht. Würde ich auch ab und zu mal brauchen. Schade eigentlich!

Schade eigentlich! Aber danke nochmals.

Muß ich mir halt was anderes überlegen.:(

cu Peeter

Wie lange dauert denn deine Abfrage?

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

Naja ich kenne keine lösung

Bei soviele Datensätze ist es normal, dass es auch lang daueren wird.

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

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.