Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 20

Thema: Wie lange Tabellen auslesen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650

    Question Wie lange Tabellen auslesen?

    Ich brauche eine Tabelle in PostgreSQL Zeile für Zeile ausgelesen und weil es ein paar Millionen Zeilen sind, die nicht in das RAM passen, geht das mit SELECT * nicht.
    Irgendwelche Vorschläge?

  2. #2
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von nobody0
    Ich brauche eine Tabelle in PostgreSQL Zeile für Zeile ausgelesen und weil es ein paar Millionen Zeilen sind, die nicht in das RAM passen, geht das mit SELECT * nicht.
    Irgendwelche Vorschläge?
    RAM kaufen.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    SELECT ..... LIMIT 0,1
    SELECT ..... LIMIT 1,2
    SELECT ..... LIMIT 2,3
    usw.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Zitat Zitat von Turbohummel
    SELECT ..... LIMIT 0,1
    SELECT ..... LIMIT 1,2
    SELECT ..... LIMIT 2,3
    usw.
    Die Angabe mit dem Komma funktioniert nicht:

    ERROR: LIMIT #,# syntax is not supported
    HINT: Use separate LIMIT and OFFSET clauses.

    Es geht aber so:

    SELECT * FROM foo ORDER BY bar,bar1 LIMIT 1 OFFSET 0;

    usw.
    Geändert von nobody0 (16-07-2006 um 11:04 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Achja, SQL-Dialekte Hätte vielleicht mal ganz lesen sollen.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  6. #6
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    wenn du die daten effektiv verarbeiten willst, solltest du mit blöcken von datensätzen arbeiten. also "select ... limit 100 offset 0" usw. An dieser stelle mit der Blockgrösse rumzuspielen kann erheblich performance bringen. ob 100 oder 10000 datensätze das optimum sind,kannst du nur testen..
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  7. #7
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Ja, mir ist schon aufgefallen, dass es ohne Blöcke relativ langsam ist.
    Wenn es mit Blöcken noch zu langsam ist, kann ich ja noch zusätzlich einen binären Cursor nehmen.

  8. #8
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Kommt drauf an was du mit den Datensätzen machst. Wenn du da 20 weitere Updates/Inserts anstößt, machen die eine Query den Bock auch nicht mehr fett.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  9. #9
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Also ich lese die Daten nur aus, aber das funktioniert nur bei relativ wenig Zeilen gut; bei einige Millionen wird das Auslesen immer langsamer, obwohl PostgreSQL heftige Platten-Aktivität verursacht und obwohl die Daten mittels

    CREATE UNIQUE INDEX data_index ON data (foo, foo1);

    geordnet sind und ich mit

    SELECT * FROM data ORDER BY foo,foo1 LIMIT %d OFFSET %d

    auslese. Ein Speicherleck ist nicht vorhanden.
    Irgendwelche Vorschläge?

  10. #10
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von nobody0
    Irgendwelche Vorschläge?
    Mein Ratschlag wurde nicht verstanden.
    Dann mußt Du den Weg der Schmerzen gehen.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  11. #11
    Registrierter Benutzer
    Registriert seit
    09.04.2003
    Beiträge
    17
    Meiner Theorie nach, hast du 3 Probleme:
    1. Du hast Postgres nicht konfiguriert
    2. Du hast im Postgres Handbuch die Sektion über die Limit/Offset Funktion übersprungen.
    3. Fehlende Beweis deiner Theorien (z.B. "Millionen Zeilen sind, die nicht in das RAM passen, geht das mit SELECT * nicht." oder "Ein Speicherleck ist nicht vorhanden")

    Meine Behauptung:
    Cache zu grosss eingestellt und das Ding swappt sich zu tode.

    Nun gilt es mich zu widerlegen.

  12. #12
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Wieso sollte bei einfachen Anfragen geswappt werden?
    Im Programm habe ich vor jedem PQexec ein PQclear, so daß sowohl bei Postgres als auch beim Programm der Speicherbedarf konstant sein sollte.
    Beim Programm sehe ich auch, dass der Pointer zu den Daten-Blöcken konstant ist.

    Das Postgres ist konfiguriert; das wird beim SuSE schon lauffähig installiert.

  13. #13
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    Zitat Zitat von nobody0
    Das Postgres ist konfiguriert; das wird beim SuSE schon lauffähig installiert.
    ja lauffähig und ordentlich konfiguriert sind zwei dinge...

    ist der cache der db so gross, dass er nicht in den arbeitsspeicher passt, werden die cache-daten auf die platte ausgelagert; das kostet zeit.
    Das ist ein prozess, den du im programm nicht beeinflussen kannst.
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  14. #14
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Und was genau heißt groß?
    Welche Muster-Konfiguration empfehlen denn die Experten hier?

  15. #15
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Aufgefallen ist mir auch, das Postgres auch Minuten nach den Abfragen, also im "Leerlauf", noch heftig auf der Platte arbeitet. Woran kann das liegen?

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •