Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Kann ich diesen Query weiter optimieren, oder wo muss ich meine Hardware aufr�sten

  1. #11
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Ich hab da was richtig performantes im Angebot.
    Leider hostet das deine Firma nicht ;-)
    Hier liegt bis jetzt noch keine Anfrage Deiner Firma nach Hosting vor ...

    So what?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  2. #12
    josch ist offline Neuer Benutzer
    Registriert seit
    10.10.2011
    Beiträge
    7

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Vermutlich mehr RAM und schnellere Platten. Du könntest das EXPLAIN mit BUFERS ON fahren, da sieht man noch besser, wie die Hitrate Shared Buffers ist. Cores nützen bei einer Anfrage nicht, nur wenn davon viele gleichzeitig laufen.
    Hab den Query mal mit "Buffers On" Explain laufen lassen:

    Code:
    Limit  (cost=236550.97..236551.02 rows=20 width=8) (actual time=4960.441..4960.449 rows=20 loops=1)
      Buffers: shared hit=66210
      CTE bauteil_ids
        ->  Bitmap Heap Scan on bauteile  (cost=9.59..17.81 rows=10 width=4) (actual time=0.109..0.134 rows=10 loops=1)
              Recheck Cond: (id = ANY ('{3145,4466,4323,4452,3095,3195,4131,3140,3189,4512}'::integer[]))
              Buffers: shared hit=27
              ->  Bitmap Index Scan on bauteile_id  (cost=0.00..9.59 rows=10 width=0) (actual time=0.087..0.087 rows=10 loops=1)
                    Index Cond: (id = ANY ('{3145,4466,4323,4452,3095,3195,4131,3140,3189,4512}'::integer[]))
                    Buffers: shared hit=21
      ->  Sort  (cost=236533.15..237217.85 rows=273879 width=8) (actual time=4960.439..4960.442 rows=20 loops=1)
            Sort Key: (sum(CASE WHEN (NOT (alternatives: SubPlan 2 or hashed SubPlan 3)) THEN 1 ELSE 0 END)), (count(*))
            Sort Method:  top-N heapsort  Memory: 26kB
            Buffers: shared hit=66210
            ->  HashAggregate  (cost=163514.37..229245.33 rows=273879 width=8) (actual time=4546.799..4814.703 rows=549890 loops=1)
                  Buffers: shared hit=66208
                  ->  Seq Scan on zuordnung  (cost=0.00..121800.07 rows=5561907 width=8) (actual time=0.033..1145.416 rows=5442128 loops=1)
                        Buffers: shared hit=66181
                  SubPlan 2
                    ->  CTE Scan on bauteil_ids  (cost=0.00..0.22 rows=1 width=0) (never executed)
                          Filter: (id = $1)
                  SubPlan 3
                    ->  CTE Scan on bauteil_ids  (cost=0.00..0.20 rows=10 width=4) (actual time=0.111..0.138 rows=10 loops=1)
                          Buffers: shared hit=27
    Total runtime: 4967.197 ms
    Soweit ich den "Buffers On" Explain verstanden habe, liest er da nichts mehr von der Platte, oder sehe ich das falsch? Die Zahl ist immer mit "shared hit=XXX" angegeben.

    Wir haben 4 GB für die Shared Buffers reserviert, die Datenbank ist gedumpt ungefähr 400 MB groß.

    Wir hatten am Anfang 4 GB Ram. Beim Sprung von 4 GB auf 8 GB ist der Query viel schneller geworden, dann haben wir von 8 GB auf 16 GB hochgerüstet, und da war es dann nur noch ca. 1 Sekunde Unterschied.

    Noch mehr Speicher und eine schnellere Platte (SSD) z.B. würden da doch auch nicht mehr weiterhelfen, wenn die komplette Datenbank schon im RAM ist, oder sehe ich das falsch?

  3. #13
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von josch Beitrag anzeigen
    Hab den Query mal mit "Buffers On" Explain laufen lassen:

    Code:
    Limit  (cost=236550.97..236551.02 rows=20 width=8) (actual time=4960.441..4960.449 rows=20 loops=1)
      Buffers: shared hit=66210
      CTE bauteil_ids
        ->  Bitmap Heap Scan on bauteile  (cost=9.59..17.81 rows=10 width=4) (actual time=0.109..0.134 rows=10 loops=1)
              Recheck Cond: (id = ANY ('{3145,4466,4323,4452,3095,3195,4131,3140,3189,4512}'::integer[]))
              Buffers: shared hit=27
              ->  Bitmap Index Scan on bauteile_id  (cost=0.00..9.59 rows=10 width=0) (actual time=0.087..0.087 rows=10 loops=1)
                    Index Cond: (id = ANY ('{3145,4466,4323,4452,3095,3195,4131,3140,3189,4512}'::integer[]))
                    Buffers: shared hit=21
      ->  Sort  (cost=236533.15..237217.85 rows=273879 width=8) (actual time=4960.439..4960.442 rows=20 loops=1)
            Sort Key: (sum(CASE WHEN (NOT (alternatives: SubPlan 2 or hashed SubPlan 3)) THEN 1 ELSE 0 END)), (count(*))
            Sort Method:  top-N heapsort  Memory: 26kB
            Buffers: shared hit=66210
            ->  HashAggregate  (cost=163514.37..229245.33 rows=273879 width=8) (actual time=4546.799..4814.703 rows=549890 loops=1)
                  Buffers: shared hit=66208
                  ->  Seq Scan on zuordnung  (cost=0.00..121800.07 rows=5561907 width=8) (actual time=0.033..1145.416 rows=5442128 loops=1)
                        Buffers: shared hit=66181
                  SubPlan 2
                    ->  CTE Scan on bauteil_ids  (cost=0.00..0.22 rows=1 width=0) (never executed)
                          Filter: (id = $1)
                  SubPlan 3
                    ->  CTE Scan on bauteil_ids  (cost=0.00..0.20 rows=10 width=4) (actual time=0.111..0.138 rows=10 loops=1)
                          Buffers: shared hit=27
    Total runtime: 4967.197 ms
    Soweit ich den "Buffers On" Explain verstanden habe, liest er da nichts mehr von der Platte, oder sehe ich das falsch? Die Zahl ist immer mit "shared hit=XXX" angegeben.

    Wir haben 4 GB für die Shared Buffers reserviert, die Datenbank ist gedumpt ungefähr 400 MB groß.

    Wir hatten am Anfang 4 GB Ram. Beim Sprung von 4 GB auf 8 GB ist der Query viel schneller geworden, dann haben wir von 8 GB auf 16 GB hochgerüstet, und da war es dann nur noch ca. 1 Sekunde Unterschied.

    Noch mehr Speicher und eine schnellere Platte (SSD) z.B. würden da doch auch nicht mehr weiterhelfen, wenn die komplette Datenbank schon im RAM ist, oder sehe ich das falsch?
    Exakt.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #14
    josch ist offline Neuer Benutzer
    Registriert seit
    10.10.2011
    Beiträge
    7

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Exakt.
    Ja, aber was kann ich denn da machen? Heißt das, dieser Query kann niemals unter den erreichten 3-4 Sekunden ausgeführt werden? Es gibt doch weit größere Datenbanken als meine, das muss doch irgendwie gehen...

  5. #15
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Zitat Zitat von josch Beitrag anzeigen
    -> HashAggregate (cost=163514.37..229245.33 rows=273879 width=8) (actual time=4546.799..4814.703 rows=549890 loops=1)

    -> Seq Scan on zuordnung (cost=0.00..121800.07 rows=5561907 width=8) (actual time=0.033..1145.416 rows=5442128 loops=1)
    Na, ja, ich würde mal schauen, wie du diese Zeiten heruntergebrochen bekommst.
    Da braucht die reine I/O-Leistung deines Systems schon über eine Sekunde, um die Tabelle sequentiell zu durchlaufen.

    Die Aggregierung will dann eine halbe Million Zeilen bearbeiten, das kostet einerseits Zeit, andererseits Speicher.
    Siehst ja, wie schnell du da auf 5 Sekunden kommst.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Antworten: 17
    Letzter Beitrag: 22.12.2011, 12:36
  2. Frage Wie kann ein Array mittels Domain oder Funktion validiert werden?
    Von jazzhunter im Forum Trigger und Funktionen
    Antworten: 5
    Letzter Beitrag: 26.07.2011, 17:48
  3. Antworten: 0
    Letzter Beitrag: 10.01.2011, 10:26
  4. Antworten: 4
    Letzter Beitrag: 07.11.2007, 11:42
  5. Beste Hardware Ausstattung???
    Von werner im Forum Installation von PostgreSQL
    Antworten: 3
    Letzter Beitrag: 29.08.2007, 11:36

Berechtigungen

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

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum