Kodulehed
[387] - Andmebaasid II (ITI0207) (sügis 2024)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Üldist
Materjalid
LisainfoMaterjalide kataloogid.
Värvilised mummud tähistavad hinnangulist kataloogide lugemise vajadust. Roheline - suurim, kollane - keskmine, punane või mummuta - väikseim
Isiklik
Lisainfo Info ainult Sulle - teised kasutajad seda ei näe
Abi
Lisainfo Võimalus küsida õppejõult abi (nagu foorum, kus saab küsida küsimusi ja kommenteerida vastuseid)
Mitmesugust
Abi / Kasutajatugi / PostgreSQL

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Erki Eessaar (01.11.2022 18:27):
Kui muuta PostgreSQL tabeli FILLFACTOR omaduse väärtust, siis kuidas see mõjutab olemasolevaid tabeli plokke?
Vastus (01.11.2022 19:18): FILLFACTOR parameetri väärtus määrab kui palju jäetakse tabeli plokkidesse vaba ruumi, et samasse plokki mahuks ära ka UPDATE lausete tulemusena tekkivad ridade uusversioonid. Tabelite puhul on FILLFACTOR parameetri vaikimisi väärtus 100. See tähendab, et tabeli plokid pannakse INSERT lausete tulemusel lisanduvaid ridu täiesti täis ja mingit vaba ruumi plokkidesse ei jäeta. Seega, kui UPDATE lausega muudetakse plokis olevat rida, siis rea uusversioon pannakse teise plokki.

Kui näiteks määrata, et FILLFACTOR on 90, siis jäetakse plokki 10% vaba ruumi. Kui plokk on 90% ulatuses ridadega täidetud, siis INSERT lausetega lisanduvaid ridu sinna plokki enam ei lisata. Kui plokis olevat rida UPDATE lausega muudetakse, siis tekib reast uus versioon ja plokis on ruumi, et see panna sellesse samasse plokki.

FILLFACTOR parameetri väärtust saab muuta ka olemasolevatel tabelitel.

ALTER TABLE Tellimus SET (fillfactor = 90);

Sellisel juhul hakkab see mõjutama uusi tabeli plokke, kuid ei mõjuta olemasolevaid. Seega on loogiline, et olemasolevate plokkide mõjutamiseks tuleb need ümberkorraldada.

Selleks peaks käivitama VACUUM FULL lause, mille tulemusena kirjutatakse kogu tabeli sisu uude andmefaili.  Mida rohkem on tabelis andmeid, seda rohkem võtab see aega. Samuti lukustab see lause tabeli eksklusiivselt, st ükski teine transaktsioon ei saa tabelit samal ajal kasutada.

VACUUM FULL Tellimus;

Alternatiiviks on kasutada laiendust pg_repack, mille kasutamise korral tabelit eksklusiivselt ei lukustata.

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!