# Effektives Update einer Tabelle mit 32Mio DatensÃ¤tzen - wie?

**URL:** https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161
**Category:** Trigger und Funktionen
**Created:** [21. April 2008 um 20:46 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161 "2008-04-21T20:46:55Z")
**Posts on this page:** 12
**Page:** 2

<div class="post-metadata">

### Author: ![akretschmer](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@akretschmer](https://www.pg-forum.de/u/akretschmer)
#### Post date: [29. April 2008 um 15:25 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/21 "2008-04-29T15:25:16Z")

</div>

> [@Nowo](#):
>
> Hallo!
> 
> Also, um´s nochmal auf den Punkt zu bringen: Momentan habe ich folgende Probleme, bei denen ich einfach nicht weiterkomme:

Die Ursache dafür könnte durchaus sein, daß Deine gesammtes Datenmodell, ähm, Scheiße ist. Aber das haben ads und ich Dir schon vor einiger Zeit erklärt.

> Dieser Befehl wurde innerhalb von 1,5h (!) durchgeführt. Es ist mir daher wirklich unverständlich, warum selbst der o.a. INSERT-Befehl zu Speicherproblemen innerhalb der Datenbank führen sollte…

Da sind DISTINCT-Operationen auf eine relativ große Datenmenge nötig. Möglicherweise ist schlicht und ergreifend Deine Platte voll und PG kann da keine temp. Dateien mehr anlegen.

> Leider ist es aber so, dass es einige Ausnahmefälle gibt:
> 
> In allen Fällen enthält die kleine Tabelle Daten, die in art\_id, store\_id und dat\_id mit einem jeweiligen Datensatz aus der großen Tabelle übereinstimmen.
> 
> Manche Artikel wurden aber im gleichen Geschäft am selben Tag bestellt (best.datum) und an unterschiedlichen Tagen bezahlt (bez.datum). Diese Tatsache erfordert eine Summenfunktion innerhalb des UPDATE-Befehls,

Und das ist der Punkt mit dem Datenmodell: warum einklich das UPDATE? Wenn Du die Programmlogik vielleicht mal ändern würdest, hättest Du das Problem vielleicht nicht.

> Ich muss also irgendwie eine Summenfunktion in dem UPDATE-Befehl unterbringen können, oder eben die Summenfunktion in einem getrennten INSERT-Befehl ausführen. Leider ist lässt sich eine Summenfunktion aber eben NICHT in einem UPDATE-Befehl unterbringen - es sei denn, es gibt da ein paar Tricks? Diesbezüglich bin ich langsam mit meinem Latein am Ende…

Deine Auswertungen, zu denen ja offensichtlich die Tabelle gehört, auf die der Update zugreift, vielleicht mal komplett ohne Veränderung der Daten selbst durchführen. VIEWS existieren.  
  
  
Andreas

---

<div class="post-metadata">

### Author: ![Nowo](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/n/f475e1/32.png) [@Nowo](https://www.pg-forum.de/u/Nowo)
#### Post date: [29. April 2008 um 15:38 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/22 "2008-04-29T15:38:18Z")

</div>

```nohighlight
Die Ursache dafür könnte durchaus sein, daß Deine gesammtes Datenmodell, ähm, Scheiße ist. Aber das haben ads und ich Dir schon vor einiger Zeit erklärt.

```

Wirklich konstruktiv, danke vielmals…

---

<div class="post-metadata">

### Author: ![Nowo](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/n/f475e1/32.png) [@Nowo](https://www.pg-forum.de/u/Nowo)
#### Post date: [29. April 2008 um 15:39 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/23 "2008-04-29T15:39:28Z")

</div>

Um die restlichen Anregungen werde ich mich heute Abend kümmern…

Trotzdem danke.

---

<div class="post-metadata">

### Author: ![ads](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@ads](https://www.pg-forum.de/u/ads)
#### Post date: [29. April 2008 um 15:43 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/24 "2008-04-29T15:43:55Z")

</div>

> [@Nowo](#):
>
> ```plaintext
> Die Ursache dafür könnte durchaus sein, daß Deine gesammtes Datenmodell, ähm, Scheiße ist. Aber das haben ads und ich Dir schon vor einiger Zeit erklärt.
> 
> ```
> 
> Wirklich konstruktiv, danke vielmals…

Schon mal überlegt, dass akretschmer Recht haben könnte und dein Datenmodell wirklich - unzulänglich ist? Mit einem komplett anderen Ansatz könnte man sonst nämlich solche Monster Updates vielleicht vermeiden.

---

<div class="post-metadata">

### Author: ![akretschmer](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@akretschmer](https://www.pg-forum.de/u/akretschmer)
#### Post date: [29. April 2008 um 16:18 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/25 "2008-04-29T16:18:23Z")

</div>

> [@Nowo](#):
>
> ```plaintext
> Die Ursache dafür könnte durchaus sein, daß Deine gesammtes Datenmodell, ähm, Scheiße ist. Aber das haben ads und ich Dir schon vor einiger Zeit erklärt.
> 
> ```
> 
> Wirklich konstruktiv, danke vielmals…

Du solltest das echt mal überlegen, und Dir auch mal überlegen, was da im Detail abläuft. Bedenke dabei u.a. das:

- jede Zeile, die geupdatet wird, hinterläßt einen toten Tupel
- wenn Du in einer Schleife innerhalb einer TX das mehrfach machst, das Du halt entsprechend viel davon.
- all das läuft in einer TX, also wird da auch ein hinreichend großes Log für anfallen
- für die Sortieroperationen (Distinct) ist wieder Speicher nötig, wahrscheinlich auf Platte
- obige Punkte zusammengenommen: du hast sehr, sehr viel zu schreiben, was Zeit braucht, und nicht zu vergessen: Platz  
  
  
Du hast nun 2 Wege, das zu beschleunigen:
- Du wirfst mit Geld und kaufst hinreichend Hardware (oder einen, der sich damit auskennt)
- Du wirst mit Hirn um das Problem eleganter zu lösen  
  
  
  
Du kannst natürlich auch beleidigt tun, mir egal. Aber Dein Problem wird davon ganz sicher nicht gelöst, und mir ist es egal. Ganz echt.

Andreas

---

<div class="post-metadata">

### Author: ![ads](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@ads](https://www.pg-forum.de/u/ads)
#### Post date: [29. April 2008 um 16:23 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/26 "2008-04-29T16:23:02Z")

</div>

> [@akretschmer](#):
>
> Du kannst natürlich auch beleidigt tun, mir egal. Aber Dein Problem wird davon ganz sicher nicht gelöst, und mir ist es egal. Ganz echt.

Korrekt, kann ich nur zustimmen.

Wir doktoren seit 3 Forumseitenan dem Problem herum, ohne das akretschmer oder ich wirklich wissen, was vor sich geht. Kein Query Plan, keine tiefgreifenden Details.

Wenn wir jedoch etwas sagen, was dir nicht passt, bist du beleidigt. Hey, wir machen das hier in unserer Freizeit, du hast nicht mal Anspruch darauf, dass jemand dir überhaupt antwortet. Für so etwas kauft man sich Support ein.

---

<div class="post-metadata">

### Author: ![symbiont](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/s/ea666f/32.png) [@symbiont](https://www.pg-forum.de/u/symbiont)
#### Post date: [5. Mai 2008 um 17:43 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/27 "2008-05-05T17:43:49Z")

</div>

> [@akretschmer](#):
>
> - jede Zeile, die geupdatet wird, hinterläßt einen toten Tupel
> 
> …
> 
> Andreas

Wieso sollte das so sein ? _JEDE_ wenn das Update des Tupel weniger oder genauso breit ist wie das alte gibt es keinen - aber auch garkeinen Grund des alten Tupel sterben zu lassen … und wenn das Update zudem auch keinen Index tangiert muss auch der Index nicht geupdated werden.

Wenn dem bei Postges dennoch so ist … ohje ohjemine 🙂

Gruß

---

<div class="post-metadata">

### Author: ![akretschmer](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@akretschmer](https://www.pg-forum.de/u/akretschmer)
#### Post date: [5. Mai 2008 um 17:49 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/28 "2008-05-05T17:49:19Z")

</div>

> [@symbiont](#):
>
> Wieso sollte das so sein ?  
> Gruß

MVCC.

Andreas

---

<div class="post-metadata">

### Author: ![ads](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@ads](https://www.pg-forum.de/u/ads)
#### Post date: [5. Mai 2008 um 18:23 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/29 "2008-05-05T18:23:10Z")

</div>

> [@symbiont](#):
>
> aber auch garkeinen Grund des alten Tupel sterben zu lassen

Dir ist schon bewusst, dass diese “alten” Tuples ggf. noch für andere Transaktionen zur Verfügung stehen müssen und man diese demzufolge nicht einfach blind überschreiben kann?

Das nennt sich MVCC, wie akretschmer schon erwähnt hat.

Wenn du eine bessere Lösung für dieses Problem weisst, die Welt steht dir offen.  
  
  
Bezüglich Index aktualisieren: ja, das stimmt. PG 8.3 bildet etwas ähnliches ab, indem in den Speicherseiten selbst eine Art Mini-Vacuum durchgeführt wird und der Speicherplatz wiederverwendet wird. Trotzdem muss erst mal für die Laufzeit der Transaktion(en) der neue Wert geschrieben **und gleichzeitig** der alte Wert bereitgestellt werden.

---

<div class="post-metadata">

### Author: ![symbiont](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/s/ea666f/32.png) [@symbiont](https://www.pg-forum.de/u/symbiont)
#### Post date: [5. Mai 2008 um 19:18 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/30 "2008-05-05T19:18:30Z")

</div>

das ist aber ebenso kein Grund diese Tupel sterben zu lassen …

---

<div class="post-metadata">

### Author: ![ads](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@ads](https://www.pg-forum.de/u/ads)
#### Post date: [5. Mai 2008 um 19:22 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/31 "2008-05-05T19:22:49Z")

</div>

> [@symbiont](#):
>
> das ist aber ebenso kein Grund diese Tupel sterben zu lassen …

Das ist halt der alte Tupel, der zum Ende der Transaktion ungültig wird.  
Wie möchtest du das anders lösen? In-place kannst du den Wert nicht überschreiben …

---

<div class="post-metadata">

### Author: ![system](https://www.pg-forum.de/uploads/default/original/1X/dc97a981dd26692d5fb52e8b8fc7c090d7b9559a.png) [@system](https://www.pg-forum.de/u/system)
#### Post date: [21. Februar 2021 um 07:09 UTC](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161/32 "2021-02-21T07:09:07Z")

</div>



[Vorherige Seite](https://www.pg-forum.de/t/effektives-update-einer-tabelle-mit-32mio-datensa-tzen-wie/3161.md?page=1)
