Haeufige Updates in Tabelle mit vielen/breiten Spalten
--==========3E9CCEAAB047A3D810A1==========
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Hallo allerseits,
evtl. hat ja jemand Erfahrungswerte für folgende Situation:
Wenn Postgres ein Update auf eine Spalte macht, wird aufgrund der
Transaktionen immer eine komplette Kopie der Spalte angelegt. (wenn ich
mich nun nicht irre)
Angenommen, ich habe eine Tabelle mit relativ vielen Spalten, einigen
Texten usw. und eine Spalte davon wird relativ häufig aktualisiert, zum
Beispiel ein Counter.
Hat jemand Erfahrungswerte, ob bzw. ab wann es sinnvoll ist, diese Spalte
(oder mehrere häufig zu aktualisierende Spalten) in eine andere Tabelle
zu verfrachten, damit beim Update nicht immer von allen Spalten (und
Texten) Kopien angelegt werden müssen und große Lücken entstehen? =
Oder
ist das eher Quatsch? Beim Auslesen muss ja auch ein Join gemacht werden
und außerdem ist dann zwei mal der Overhead für die =
Spalten-Basisdaten
nötig.
Ciao
Alvar
--
** Alvar C.H. Freude, http://alvar.a-blast.org/
** http://www.wen-waehlen.de/
** http://odem.org/
**=A0http://www.assoziations-blaster.de/
--==========3E9CCEAAB047A3D810A1==========
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)
iD8DBQFEAjNLOndlH63J86wRAlCdAJ9v+ZIJ2Vl244ogU5X5NfxnPvGGXACe N/I8
IziZP1fMf5cDOp9PudqMZiQ=
=uO8p
-----END PGP SIGNATURE-----
--==========3E9CCEAAB047A3D810A1==========--
Re: Haeufige Updates in Tabelle mit vielen/breiten Spalten
--=-=-=
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Alvar Freude writes:
> Wenn Postgres ein Update auf eine Spalte macht, wird aufgrund der
> Transaktionen immer eine komplette Kopie der Spalte angelegt. (wenn ich
> mich nun nicht irre)
s/Spalte/Zeile/, da MVCC ja Zeilenweise agiert.
> Angenommen, ich habe eine Tabelle mit relativ vielen Spalten, einigen
> Texten usw. und eine Spalte davon wird relativ häufig aktualisiert, zum
> Beispiel ein Counter.
Wenn die Text-Felder groß genug sind (> 2kB IIRC), wird darin nur ein
Zeiger auf die passende Toast-Tabelle abgelegt. MVCC-Kopien werden in
dem Fall dann nur von den verbleibenden Zeigern gemacht, und nicht von
Inhalt der Toast-Tabellen.
> Hat jemand Erfahrungswerte, ob bzw. ab wann es sinnvoll ist, diese Spalte
> (oder mehrere häufig zu aktualisierende Spalten) in eine andere Tabelle
> zu verfrachten, damit beim Update nicht immer von allen Spalten (und
> Texten) Kopien angelegt werden müssen und große Lücken entstehen? O=
der
> ist das eher Quatsch?
Also ich hatte durchaus schon Fälle, in denen man gerade so unter der
Toast-Grenze lag, und dadurch in rasantem Tempo tote Seiten produziert
wurden. Hier lohnte es sich dann, "manuell zu toasten".
Ich könnte mir auch vorstellen, daß man in macnhen Fällen auch via
"alter table set storage" feineinstellen kann, welche der Felder im
Zweifelsfall getoastet werden.
> Beim Auslesen muss ja auch ein Join gemacht werden und außerdem ist
> dann zwei mal der Overhead für die Spalten-Basisdaten nötig.
Sollte einklich unproblematisch sein, da genau das impliziert wird,
wenn Postgres sich für's toasten entscheidet.
Gruß
Andreas
=2D-
--=-=-=
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD4DBQFEApNfLABrNA+MjBsRAhG9AJiQsfp5/5aU946DljbSRpaWbok7AJ9L 9yTT
i2WBnJKKH7SOmI3nylS5dw==
=vIxp
-----END PGP SIGNATURE-----
--=-=-=--
Re: Haeufige Updates in Tabelle mit vielen/breiten Spalten
--==========D190C3FDE232D4A9C008==========
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Hallo,
-- Andreas Seltenreich <andreas+pg [at] gate450.dyndns.org> wrote:
> Alvar Freude writes:
>
>> Wenn Postgres ein Update auf eine Spalte macht, wird aufgrund der
>> Transaktionen immer eine komplette Kopie der Spalte angelegt. (wenn =
ich
>> mich nun nicht irre)
>
> s/Spalte/Zeile/, da MVCC ja Zeilenweise agiert.
ähm, natürlich, so war das auch gemeint, das war ein Vertipper, denn
bei Spaltenweise gäbe es die Frage ja auch gar nicht ;-)
> Wenn die Text-Felder groß genug sind (> 2kB IIRC), wird darin nur ein
> Zeiger auf die passende Toast-Tabelle abgelegt. MVCC-Kopien werden in
> dem Fall dann nur von den verbleibenden Zeigern gemacht, und nicht von
> Inhalt der Toast-Tabellen.
stimmt, hatte ich ganz vergessen.
> Also ich hatte durchaus schon Fälle, in denen man gerade so unter der
> Toast-Grenze lag, und dadurch in rasantem Tempo tote Seiten produziert
> wurden. Hier lohnte es sich dann, "manuell zu toasten".
genau das meinte ich
Wenn sich mittendrin dauernd dicke Lücken auftun, ist dies ja auch =
nicht
wirklich sinnvoll.
> Sollte einklich unproblematisch sein, da genau das impliziert wird,
> wenn Postgres sich für's toasten entscheidet.
viel ist es nicht, aber auch ein einfacher Join kostet eben ein paar
Mikrosekunden ;) -- und die Daten etwas mehr Speicher.
Ciao
Alvar
--
** Alvar C.H. Freude, http://alvar.a-blast.org/
** http://www.wen-waehlen.de/
** http://odem.org/
**=A0http://www.assoziations-blaster.de/
--==========D190C3FDE232D4A9C008==========
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)
iD8DBQFEA0wROndlH63J86wRArz+AJ9GiJwmapavXISPkqwfb7tbxnwJsACg l9Bi
Zd0lzFtyX6iVbH2V6ZruGdg=
=d7+O
-----END PGP SIGNATURE-----
--==========D190C3FDE232D4A9C008==========--