
ΠΡΠ΅ΠΊΡΡΡ Π½Π° ΡΠ°Π·Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ (bloat) Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΈ ΡΠ΅ ΡΡΠ΅ΡΠ° Π½Π΅ ΡΠ°ΠΌΠΎ Π² Postgres. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΡΠΏΡΠ°Π²ΡΠ½Π΅ Ρ Π½Π΅Π³ΠΎ βΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈβ, ΠΊΠ°ΡΠΎ VACUUM FULL ΠΈΠ»ΠΈ CLUSTER, Π½ΠΎ ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΈ Π·Π°ΡΠΎΠ²Π° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ.
Π ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ΠΎΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° bloat, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ Π±ΠΎΡΠΈΠΌ Ρ Π½Π΅Π³ΠΎ, Π·Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π²Π½Π°ΡΡΡ Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ pg_repack.
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Π½Π° PgConf.Russia 2020.

ΠΠ°ΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° bloat
Π ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° Postgres ΡΡΠΎΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π΅ΡΡΠΈΠΎΠ½Π½ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π» (). Π‘ΡΡΠ½ΠΎΡΡΡΠ° ΠΌΡ Π΅, ΡΠ΅ Π²ΡΡΠΊΠ° ΡΠ΅Π΄ΠΈΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠ°ΡΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅ Π²ΠΈΠΆΠ΄Π°Ρ Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄Π½Π° ΠΎΡ ΡΠ΅Π·ΠΈ Π²Π΅ΡΡΠΈΠΈ, Π½ΠΎ Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ°. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΎΠΊΠ°Π·Π²Π°Ρ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π΅Π΄Π½Π° Π½Π° Π΄ΡΡΠ³Π°.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ. Postgres ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡΡ ΠΎΠ±Π΅ΠΌ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ΅ ΠΎΡ Π΄ΠΈΡΠΊΠ° ΠΈΠ»ΠΈ Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΠΏΠΈΡΠ°Π½. ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΌΠ°Π»ΡΠΊ ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠΎΠ²Π° ΡΡΠ°Π²Π°.
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΡΠΌΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·Π°ΠΏΠΈΡΠΈ. Π ΠΏΡΡΠ²Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π° ΡΠ°ΠΉΠ»Π°, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΡ Π° Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° ΡΠ° ΠΆΠΈΠ²ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° Π΄ΡΡΠ³ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΠ»Π΅Π΄ ΠΊΠΎΠΌΠΈΡ (Π·Π° ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅, Π½Π΅ΠΊΠ° ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ, ΡΠ΅ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π΅ Read Committed).

Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡ
ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΌΠ°ΡΠΊΠΈΡΠ°Ρ
ΠΌΠ΅ ΡΡΠ°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ ΠΊΠ°ΡΠΎ Π½Π΅Π°ΠΊΡΡΠ°Π»Π½Π°.

Π‘ΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ°, ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΠΉΠΊΠΈ ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°ΠΉΠΊΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅, ΠΏΠΎΠ»ΡΡΠΈΡ
ΠΌΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° βΠ±ΠΎΠΊΠ»ΡΠΊβ. Π’Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π΅ ΡΠ° Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ.

Π Postgres ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ , ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΡΠΈΡΡΠ²Π° Π½Π΅Π°ΠΊΡΡΠ°Π»Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π° ΠΌΡΡΡΠΎ Π·Π° Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΎ Π°ΠΊΠΎ ΡΠΎΠΉ Π½Π΅ Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π°Π³ΡΠ΅ΡΠΈΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π΅ Π·Π°Π΅Ρ Ρ ΡΠ°Π±ΠΎΡΠ° Π² Π΄ΡΡΠ³ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ, βΠ±ΠΎΠΊΠ»ΡΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈβ ΠΎΡΡΠ°Π²Π°Ρ ΠΈ Π½ΠΈ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π·Π° Π½ΠΎΠ²ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ.
Π’Π°ΠΊΠ° Π² Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ Π² Π½ΡΠΊΠ°ΠΊΡΠ² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΠ΅ΡΠΈΡΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ, Π½ΠΎ ΠΆΠΈΠ²ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π² Π½Π΅Ρ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ°. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΡΠ΅ ΡΠ΅ΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.

ΠΠΎΡΠΈ Π°ΠΊΠΎ VACUUM Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΡΡΠΈΠ΅ Π²ΡΠΈΡΠΊΠΈΡΠ΅ Π½Π΅Π°ΠΊΡΡΠ°Π»Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅, ΡΠΈΡΡΠ°ΡΠΈΡΡΠ° Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ Π΄ΡΠ°ΡΡΠΈΡΠ½ΠΎ. Π©Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΡΠ΅Π»ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π·Π° Π½ΠΎΠ²ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅, Π½ΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ΅ ΡΠ΅ΡΠ΅ΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, Π°ΠΊΠΎ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠ°Π·Π½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° (Π²ΡΠΎΡΠ°ΡΠ° Π² Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ) Π±ΡΠ΄Π΅ Π½Π°ΠΊΡΠ°Ρ Π½Π° ΡΠ°ΠΉΠ»Π°, VACUUM Π±ΠΈ ΠΌΠΎΠ³ΡΠ» Π΄Π° Ρ ΠΏΠΎΠ΄ΡΠ΅ΠΆΠ΅. ΠΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΡ Π΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° ΠΏΠΎ ΡΡΠ΅Π΄Π°ΡΠ°, Π·Π°ΡΠΎΠ²Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½ΠΈΡΠΎ Ρ Π½Π΅Ρ.

ΠΠΎΠ³Π°ΡΠΎ Π±ΡΠΎΡΡ Π½Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠ°Π·Π½ΠΈ ΠΈΠ»ΠΈ ΡΠΈΠ»Π½ΠΎ ΡΠ°Π·ΡΠ΅Π΄Π΅Π½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΡΠ°Π½Π΅ Π³ΠΎΠ»ΡΠΌ, Π½Π°ΡΠΈΡΠ°Π½ΠΎ bloat, ΡΠΎΠ²Π° Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΡΠ΅ ΠΎΡΡΠ°Π·ΡΠ²Π° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
ΠΡΠΈΡΠΊΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅ Π΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠΊΠ° Π½Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° bloat Π² ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅. Π ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½.
ΠΠΌΠ°ΠΌ Π»ΠΈ bloat?
ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΡΠ΅ bloat. ΠΠ΄Π΅ΡΡΠ° Π½Π° ΠΏΡΡΠ²ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π½Π° Postgres, ΠΊΠΎΡΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π±ΡΠΎΡ ΡΠ΅Π΄ΠΎΠ²Π΅ Π² ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅, Π±ΡΠΎΡ Π½Π° βΠΆΠΈΠ²ΠΈΡΠ΅β ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΈ Ρ.Π½. Π ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°ΡΠΈΠΈ Π½Π° Π³ΠΎΡΠΎΠ²ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅. ΠΠΈΠ΅ Π²Π·Π΅Ρ ΠΌΠ΅ Π·Π° ΠΎΡΠ½ΠΎΠ²Π° ΠΎΡ PostgreSQL Experts, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠ΅Π½ΠΈ bloat Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Π·Π°Π΅Π΄Π½ΠΎ Ρ toast ΠΈ bloat Π½Π° btree ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. Π‘ΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΠΈΡ ΠΎΠΏΠΈΡ, Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π½Π΅ΡΠΎΡΠ½ΠΎΡΡ Π΅ 10-20%.
ΠΡΡΠ³ ΠΌΠ΅ΡΠΎΠ΄ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ , ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π·Π°Π³Π»Π΅Π΄Π°ΡΠ΅ Π² ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΊΠ°ΠΊΡΠΎ ΠΎΡΠ΅Π½ΡΡΠ½ΠΎ, ΡΠ°ΠΊΠ° ΠΈ ΡΠΎΡΠ½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° bloat. ΠΠΎ Π² Π²ΡΠΎΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΊΠ°Π½ΠΈΡΠ°ΡΠ΅ ΡΡΠ»Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°.
ΠΠΈΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° bloat, Π΄ΠΎ 20%, ΡΡΠΈΡΠ°ΠΌΠ΅ Π·Π° ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ. ΠΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΡΠΌΡΡΠ°ΡΠ΅ Π·Π° Π°Π½Π°Π»ΠΎΠ³ Π½Π° fillfactor Π·Π° ΠΈ . ΠΡΠΈ 50% ΠΈ Π½Π°Π³ΠΎΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
ΠΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΡΠΏΡΠ°Π²ΡΠ½Π΅ Ρ bloat
Π Postgres ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π° ΡΠΏΡΠ°Π²ΡΠ½Π΅ Ρ bloat βΠΈΠ·Π²ΡΠ½ ΠΊΡΡΠΈΡΡΠ°β, Π½ΠΎ ΡΠ΅ Π½Π΅ ΡΠ° Π²ΠΈΠ½Π°Π³ΠΈ ΠΈ Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ.
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ AUTOVACUUM, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π° bloat.. ΠΠΊΠΎ Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎ-ΡΠΎΡΠ½ΠΈ, Π·Π° Π΄Π° ΠΎΡΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ Π·Π° Π²Π°Ρ Π½ΠΈΠ²ΠΎ. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ βΠΊΠ°ΠΏΠΈΡΠ°Π½ΡΠΊΠΈβ ΡΡΠ²Π΅Ρ, Π½ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π°ΠΊΡΠΈΠ²Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΡΠ΅Π΄ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΡ Π΅ΠΌΠ°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π°, Π²Π°ΡΠΈΡΡ Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ ΠΏΡΠΎΡΠΈΠ» ΠΌΠΎΠΆΠ΅ ΡΠ΅ΡΡΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ. Π’ΠΎΠ΅ΡΡ, ΡΡΡΠ±Π²Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ Π½Π°ΠΏΡΠ΅Π΄ ΠΈ Π΄Π° Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΡΠ΅ AUTOVACUUM ΡΠΏΡΡΠΌΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠΈΡ ΡΠ΅ ΠΏΡΠΎΡΠΈΠ» Π½Π° Π²ΡΡΠΊΠ° ΡΠ°Π±Π»ΠΈΡΠ°. ΠΠΎ Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΠ΅ Π½Π΅ Π΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ²Π°.
ΠΡΡΠ³Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π° ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΡΡΠΎ AUTOVACUUM Π½Π΅ ΡΡΠΏΡΠ²Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅, Π΅ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π΄ΡΠ»Π³ΠΎΡΡΠ°ΠΉΠ½ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΈΠ·ΡΠΈΡΡΠ²Π° Π΄Π°Π½Π½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° ΡΠ΅Π·ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΡΠ΅ΠΏΠΎΡΡΠΊΠ°ΡΠ° ΡΡΠΊ ΡΡΡΠΎ Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π° β ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΎΡ βΠ²ΠΈΡΡΡΠΈΡΠ΅β ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠΎ Π°ΠΊΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ Ρ ΠΈΠ±ΡΠΈΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ OLAP ΠΈ OLTP, ΡΠΎ Π²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΊΡΠ°ΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΄ΡΠ»Π³ΠΎΡΡΠ°ΠΉΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΡΡΠ΅Ρ. Π ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ Π΅ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠΌΠΈΡΠ»ΠΈ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±Π°Π·ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΠΎ-ΡΠΈΠ½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π²ΡΡΠΊΠ° ΠΎΡ ΡΡΡ .
ΠΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ β Π΄ΠΎΡΠΈ Π°ΠΊΠΎ ΠΏΡΠΎΡΠΈΠ»ΡΡ Π΅ Ρ ΠΎΠΌΠΎΠ³Π΅Π½Π΅Π½, Π½ΠΎ ΠΠ Π΅ ΠΏΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΠΎΠΊΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, Π΄ΠΎΡΠΈ ΠΈ Π½Π°ΠΉ-Π°Π³ΡΠ΅ΡΠΈΠ²Π½ΠΈΡΡ AUTOVACUUM ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΡΠΏΠ΅Π΅ ΠΈ bloat ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅. ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠ°Π½Π΅ (Π²Π΅ΡΡΠΈΠΊΠ°Π»Π½ΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ) β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Π² ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π°ΡΠΎ AUTOVACUUM Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½, Π½ΠΎ bloat ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠ°ΡΡΠ΅.
ΠΠΎΠΌΠ°Π½Π΄Π° VACUUM FULL ΠΏΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΈ ΠΎΡΡΠ°Π²Ρ ΡΠ°ΠΌΠΎ Π°ΠΊΡΡΠ°Π»Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π² ΡΡΡ . ΠΠ° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° bloat ΡΡ ΡΠ°Π±ΠΎΡΠΈ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ, Π½ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ Π²Π·Π΅ΠΌΠ° Π΅ΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° (AccessExclusiveLock), ΠΊΠΎΡΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ°, Π΄ΠΎΡΠΈ select-ΠΎΠ²Π΅. ΠΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π²Π°ΡΠΈΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΈΠ»ΠΈ ΡΠ°ΡΡ ΠΎΡ Π½Π΅Π³ΠΎ Π·Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ (ΠΎΡ Π΄Π΅ΡΠ΅ΡΠΊΠΈ ΠΌΠΈΠ½ΡΡΠΈ Π΄ΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΠ ΠΈ Π²Π°ΡΠ΅ΡΠΎ ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅), ΡΠΎ ΡΠΎΠ·ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ. ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, Π½Π΅ ΡΡΠΏΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ VACUUM FULL Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°, Π·Π°ΡΠΎΠ²Π° ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠΆΠ΄Π°.
ΠΠΎΠΌΠ°Π½Π΄Π° CLUSTER ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ VACUUM FULL, ΠΊΠ°ΡΠΎ ΠΏΡΠΈ ΡΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ, ΡΠΏΠΎΡΠ΅Π΄ ΠΊΠΎΠΉΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ° (Π½ΠΎ Π² Π±ΡΠ΄Π΅ΡΠ΅ Π·Π° Π½ΠΎΠ²ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΡΠ΅Π΄Π±Π°ΡΠ° Π½Π΅ Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π°). Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠ±ΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π·Π° ΡΠ΅Π΄ΠΈΡΠ° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ β Ρ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·Π°ΠΏΠΈΡΠ° ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΠΊΡΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π΅ ΡΡΡΠΈΡΡ, ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠΈ VACUUM FULL β ΡΡ Π±Π»ΠΎΠΊΠΈΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°.
ΠΠΎΠΌΠ°Π½Π΄Π° REINDEX Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° Π΄Π²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ, Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ»ΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈΡΠ΅ ΡΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ»Π°Π±ΠΈ: ShareLock Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° (ΠΏΡΠ΅ΡΠΈ Π½Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° select) ΠΈ AccessExclusiveLock Π½Π° ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ (Π±Π»ΠΎΠΊΠΈΡΠ° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ ΡΠΎΠ·ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ). ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° Π² 12-ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Postgres ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ , ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π±Π΅Π· Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠΈ.
Π ΠΏΠΎ-ΡΠ°Π½Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Postgres ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΡΡ ΠΎΠ΄Π΅Π½ Ρ REINDEX CONCURRENTLY, Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° . Π’ΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ Π±Π΅Π· ΡΡΡΠΎΠ³Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° (ShareUpdateExclusiveLock, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΏΡΠ΅ΡΠΈ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ Ρ Π½ΠΎΠ²ΠΈΡ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ bloat Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠ°Π²Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΏΡΠΈ ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠΌΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ΠΎΡΡ Π½Π° Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π°ΠΊΠΎ Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΈΠΌΠ° Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° bloat βΠ½Π° Π³ΠΎΡΠ΅ΡΠΎβ, ΡΠΎ Π·Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Π½ΡΠΌΠ°. Π’ΡΠΊ Π²Π»ΠΈΠ·Π°Ρ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΡΠ½ΡΠ½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ: (ΠΏΠΎ-ΡΠ°Π½ΠΎ pg_reorg), , ΠΈ Π΄ΡΡΠ³ΠΈ. Π ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π½ΡΠΌΠ° Π΄Π° Π³ΠΈ ΡΡΠ°Π²Π½ΡΠ²Π°ΠΌ ΠΈ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ Π·Π° pg_repack, ΠΊΠΎΠ΅ΡΠΎ ΡΠ»Π΅Π΄ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ Π½Π°Ρ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ pg_repack

ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° β Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ, Π·Π° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, Ρ bloat. ΠΡΡΠ²Π°ΡΠ° ΡΡΡΠΏΠΊΠ° Π½Π° pg_repack Π΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°, Π·Π° Π΄Π° ΡΡΡ
ΡΠ°Π½ΡΠ²Π° Π΄Π°Π½Π½ΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°. Π’ΡΠΈΠ³Π³Π΅ΡΡΡ ΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ° ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ insert, update ΠΈ delete. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΡΠ°Π±Π»ΠΈΡΠ°, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° Π½Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° ΠΏΠΎ ΡΡΡΡΠΊΡΡΡΠ°, Π½ΠΎ Π±Π΅Π· ΠΈΠ½Π΄Π΅ΠΊΡΠΈ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π±Π°Π²Ρ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π²ΠΌΡΠΊΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ.
Π‘Π»Π΅Π΄Π²Π° pg_repack Π΄Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΡΡΠ°ΡΠ°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Π² Π½ΠΎΠ²Π°, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠΈΠ»ΡΡΠΈΡΠ°ΠΉΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ Π½Π΅Π°ΠΊΡΡΠ°Π»Π½ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ·Π΄Π°Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π·Π° Π½ΠΎΠ²Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°. ΠΡΠ΅Π· Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΡΠ΅ Π½Π°ΡΡΡΠΏΠ²Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ.
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π½ΠΎΠ²Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°. ΠΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π² Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, ΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π² Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΎΡΡΠ°Π½Π°Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ 20 Π·Π°ΠΏΠΈΡΠ°, pg_repack Ρ Π²Π°ΡΠ° ΡΡΡΠΎΠ³Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°, ΠΏΡΠ΅Ρ Π²ΡΡΠ»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΈ Π·Π°ΠΌΠ΅Π½Ρ ΡΡΠ°ΡΠ°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π½ΠΎΠ²Π°ΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ Π½Π° Postgres. Π’ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΡΠ°ΡΡΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ, Π² ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ°ΡΠ°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Ρ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ²Π°Ρ ΠΈ Π² ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π° ΠΌΡΡΡΠΎ. ΠΡΠΎΡΠ΅ΡΡΡ Π΅ Π·Π°Π²ΡΡΡΠ΅Π½.
Π ΡΠ΅ΠΎΡΠΈΡ Π²ΡΠΈΡΠΊΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΡΠ»ΠΈΡΠ½ΠΎ, ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Π°ΡΠ΅ Π΅ Π² ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΡΠ°? Π’Π΅ΡΡΠ²Π°Π»ΠΈ ΡΠΌΠ΅ pg_repack Π±Π΅Π· Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΈ ΠΏΠΎΠ΄ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, ΠΏΡΠΎΠ²Π΅ΡΠΈΡ ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΌΡ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΏΡΠ΅Π΄ΡΡΠΎΡΠ½ΠΎ ΡΠΏΠΈΡΠ°Π½Π΅ (ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Ρ Ctrl+C). ΠΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π±ΡΡ Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ.
ΠΡΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΡΠ΅ ΠΊΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ β ΠΈ ΡΡΠΊ Π²ΡΠΈΡΠΊΠΎ ΡΡΡΠ³Π½Π° Π½Π΅ ΠΊΠ°ΠΊΡΠΎ ΠΎΡΠ°ΠΊΠ²Π°Ρ ΠΌΠ΅.
ΠΡΡΠ²ΠΈΡΡ Π±Π»ΠΈΠ½ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ
ΠΠ° ΠΏΡΡΠ²ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π·Π° Π½Π°ΡΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅:
$ ./pg_repack -t tablename -o id
INFO: ΡΠ΅ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° "tablename"
ERROR: Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π½Π΅ ΡΡΠΏΡ:
ERROR: Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΊΠ»ΡΡΠ° Π½Π°ΡΡΡΠ°Π²Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ "index_16508"
DETAIL: ΠΠ»ΡΡ (id, index)=(100500, 42) Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°.
Π’ΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ°ΡΠ΅ Π°Π²ΡΠΎΡΠ³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ index_16508 β ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ Π΅ ΠΎΡ pg_repack. ΠΠΎ Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅, Π²Ρ ΠΎΠ΄ΡΡΠΈ Π² Π½Π΅Π³ΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ ΠΌΠ΅ βΠ½Π°ΡΠ΅ΡΠΎβ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΌΡ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ ΡΠ΅ ΡΡΡΡΠΎΠ΅ΡΠ΅ Π² ΡΠΎΠ²Π°, ΡΠ΅ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΡΠ²ΡΠ΅ΠΌ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ (), Ρ.Π΅. ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° ΠΌΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ SQL ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ.
ΠΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: Π·Π°ΡΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ
ΠΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ½ΠΈ ΡΠ°Π·ΡΡΠ½Π΅Π½ΠΈΡ Π·Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΎΡΡ ΠΏΡΠΈΠΌΠ΅Ρ: ΠΈΠΌΠ°ΠΌΠ΅ ΡΠΏΡΠ°Π²ΠΎΡΠ½Π° ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Ρ Π΄Π²Π° Π°ΡΡΠΈΠ±ΡΡΠ° β Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π΄ Π½Π° Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π° Π² ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠ°.

create table cars
(
name text constraint pk_cars primary key,
ord integer not null constraint uk_cars unique
);
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΡΠ²ΠΈΡ ΠΈ Π²ΡΠΎΡΠΈΡ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ» ΠΌΠ΅ΡΡΠ°ΡΠ°. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ βΠ² Π»ΠΎΠ±β Π΅ Π΄Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΡΠ²Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° Π²ΡΠΎΡΠ°ΡΠ°, Π° Π²ΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΡΠ²Π°ΡΠ°:
begin;
update cars set ord = 2 where name = 'audi';
update cars set ord = 1 where name = 'bmw';
commit;
ΠΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ, Π·Π°ΡΠΎΡΠΎ ΡΠ΅Π΄ΡΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½.
[23305] ΠΠ ΠΠ¨ΠΠ: Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΊΠ»ΡΡΠ° Π½Π°ΡΡΡΠ°Π²Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ βuk_carsβ
ΠΠ΅ΡΠ°ΠΉΠ»ΠΈ: ΠΠ»ΡΡ (ord)=(2) Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°.
ΠΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½? ΠΡΡΠ²ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ: Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π·Π° Π·Π°ΠΌΡΠ½Π° Π½Π° ΡΠ΅Π΄Π°, ΠΊΠΎΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½ΠΎ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ β-1β. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ Π½Π°ΡΠΈΡΠ° βΡΠ°Π·ΠΌΡΠ½Π° Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° Π΄Π²Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΡΠ΅Π· ΡΡΠ΅ΡΠ°β. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠΏΠ΄Π΅ΠΉΡ.
ΠΡΠΎΡΠΈ Π²Π°ΡΠΈΠ°Π½Ρ: ΠΏΡΠ΅ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΈΠΏ Π΄Π°Π½Π½ΠΈ Ρ ΠΏΠ»Π°Π²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ Π·Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅Π΄Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°. Π’ΠΎΠ³Π°Π²Π° ΠΏΡΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΎΡ 1, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° 2.5, ΠΏΡΡΠ²ΠΈΡΡ Π·Π°ΠΏΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ βΡΠ΅ ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ°β ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠΎΡΠΈΡ ΠΈ ΡΡΠ΅ΡΠΈΡ. Π’ΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠΈ, Π½ΠΎ ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΡΡΠ²ΠΎ, Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ, Π°ΠΊΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½ΡΠΊΡΠ΄Π΅ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ° Π²ΡΠΎΡΠΎ ΠΌΡΡΡΠΎ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π±ΡΠΎΠΉ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ.
Π’ΡΠ΅ΡΠΈ Π²Π°ΡΠΈΠ°Π½Ρ: Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠ°:
create table cars
(
name text constraint pk_cars primary key,
ord integer not null constraint uk_cars unique deferrable initially deferred
);Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° Π½Π°ΡΠ°ΡΠ° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΊΠΎΠΌΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΠ° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈ, ΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΡΠΈΠΌΠ΅ΡΡΡ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅Π½, Π½ΠΎ ΡΠ°Π·ΠΊΡΠΈΠ²Π° ΠΈΠ΄Π΅ΡΡΠ°. Π Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ ΠΏΡΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Ρ ΠΎΠ±ΡΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ-ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ²Π΅ Π½Π° Π΄ΡΡΠΊΠ°ΡΠ°. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ½ΠΈΡ ΠΊΠΎΠ΄ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΏΡΠΎΡΡ.
Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΈΠΏΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π² Postgres, ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΡΠΈ Π½ΠΈΠ²Π° Π½Π° Π³ΡΠ°Π½ΡΠ»Π°ΡΠ½ΠΎΡΡ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅: Π½ΠΈΠ²ΠΎ Π½Π° ΡΠ΅Π΄, ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈ ΠΈΠ·ΡΠ°Π·.

ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ:
CHECK ΠΈ NOT NULL ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π²ΠΈΠ½Π°Π³ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΅Π΄, Π·Π° ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ Π΅ Π²ΠΈΠ΄Π½ΠΎ ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΈΠΌΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ. ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ΅ .
ΠΠΊΠΎ ΠΎΠ±ΠΎΠ±ΡΠΈΠΌ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ, ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² ΡΠ΅Π΄ΠΈΡΠ° ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΠΎ-ΡΡΠ΅Π½ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π·Π° ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠ»Π°ΡΠ° Ρ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π΅Π±ΡΠ³ ΠΏΡΠΎΡΠ΅ΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΡΡ Π½Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΡΡ, Π² ΠΊΠΎΠΉΡΠΎ Π½Π°ΡΡΠ°Π²Π°ΡΠ΅ Π·Π° Π½Π΅Ρ, ΡΠ° ΡΠ°Π·Π΄Π°Π»Π΅ΡΠ΅Π½ΠΈ Π²ΡΠ² Π²ΡΠ΅ΠΌΠ΅ΡΠΎ. ΠΡΠ΅ Π΅Π΄ΠΈΠ½ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅, ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡΡ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΡΡΠ°Π²ΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»Π΅Π½ ΠΏΠ»Π°Π½, Π°ΠΊΠΎ Π² Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΡΠ°ΡΡΠ²Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ pg_repack
Π Π°Π·Π±ΡΠ°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ? ΠΠ΅ΠΊΠ° ΡΠΈ ΡΠΏΠΎΠΌΠ½ΠΈΠΌ Π³ΡΠ΅ΡΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ:
$ ./pg_repack -t tablename -o id
INFO: ΡΠ΅ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° "tablename"
ERROR: Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π½Π΅ ΡΡΠΏΡ:
ERROR: Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΊΠ»ΡΡΠ° Π½Π°ΡΡΡΠ°Π²Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ "index_16508"
DETAIL: ΠΠ»ΡΡ (id, index)=(100500, 42) Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°.Π’Ρ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² Π½ΠΎΠ²Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°. Π’ΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡΡΠ°Π½Π½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ Π² Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΡΠ΅ ΠΊΠΎΠΌΠΈΡΠΈΡΠ°Ρ Π·Π°Π΅Π΄Π½ΠΎ Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°. ΠΠΊΠΎ ΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°, ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π½Π°ΡΡΡΠ°Π²Π°Ρ ΡΡΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² Π½ΠΎΠ²Π°ΡΠ°?
ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΠΊΠΎΡΠ΅Π½ΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΅ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ Π΅ΡΠ°ΠΏ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° pg_repack, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΡΠ°ΠΌΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ, Π½ΠΎ Π½Π΅ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: Π² ΡΡΠ°ΡΠ°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠΌΠ°ΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π° Π² Π½ΠΎΠ²Π°ΡΠ° Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡ.

ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π°ΠΊΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, Π° Π½Π΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ, ΡΠΎ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡ Π΅ ΡΠ°Π²Π΅Π½ Π½Π° ΡΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² Postgres ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΡΠ΅Π· ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΠΎ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ Π΅ ΡΡΡΠΎΡΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ ΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° sql-ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, ΡΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΅ Π² βΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΡΠ°β Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ°: Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΡΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΊΠΎΠΌΠΈΡΠ°, Π° Π² Π½ΠΎΠ²Π°ΡΠ° β Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° sql-ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°. ΠΠ½Π°ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΊΠ°, ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ Π² Π΄Π²Π°ΡΠ° ΡΠ»ΡΡΠ°Ρ: ΠΈΠ»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ, ΠΈΠ»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π²Π΅Π΄Π½Π°Π³Π°.
Π ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΈ ΠΈΠ΄Π΅ΠΈ ΠΈΠΌΠ°Ρ ΠΌΠ΅.
ΠΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π½Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½.
ΠΡΡΠ²Π°ΡΠ° ΠΈΠ΄Π΅Ρ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΈ Π΄Π²Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ immediate. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ false positive ΡΡΠ°Π±ΠΎΡΠ²Π°Π½ΠΈΡ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ°, Π½ΠΎ Π°ΠΊΠΎ ΡΠ΅ ΡΠ° ΠΌΠ°Π»ΠΊΠΎ, ΡΠΎ Π½Π΅ Π±ΠΈ ΡΡΡΠ±Π²Π°Π»ΠΎ Π΄Π° ΠΏΠΎΠ²Π»ΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π·Π° ΡΡΡ ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ ΡΠ° Π½ΠΎΡΠΌΠ°Π»Π½Π° ΡΠΈΡΡΠ°ΡΠΈΡ. Π’Π΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π°Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π²Π°ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Ρ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π½Π° Π²ΡΠΎΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½Π΅ ΡΡΠΏΡΠ²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡΡ Π²Π΅ΡΠ΅ Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ Π·Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ ΠΎΡ ΠΏΡΡΠ²ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π». Π ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ ΡΡΡΠ²ΡΡΡΡ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° Π²ΡΠΎΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Ρ ΠΎΡΠΊΠ°Π·, Π° Π½Π΅Π³ΠΎΠ²ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΠ°ΡΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ Π±Π»ΠΎΠΊΠΈΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΡΠ²ΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π·Π°Π²ΡΡΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ°, Π²ΡΠΎΡΠΈΡΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡΡ Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ ΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²ΡΠΎΡΠΈ ΡΠ²ΠΎΠ΅ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.

ΠΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ Π² Π½Π΅ΠΎΡΠ»ΠΎΠΆΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ, ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ Π½ΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡΠΎ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅:
CREATE UNIQUE INDEX CONCURRENTLY uk_tablename__immediate ON tablename (id, index);
-- run pg_repack
DROP INDEX CONCURRENTLY uk_tablename__immediate;Π ΡΠ΅ΡΡΠΎΠ²Π°ΡΠ° ΡΡΠ΅Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ. Π£ΡΠΏΠ΅Ρ ! ΠΡΠ½ΠΎΠ²ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΌΠ΅ pg_repack Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ 5 Π³ΡΠ΅ΡΠΊΠΈ Π½Π° ΠΏΡΡΠ²ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Π·Π° ΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° Π½Π° Π²ΡΠΎΡΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Π±ΡΠΎΡΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ ΠΈ Π½ΠΈ ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΠΏΡΠ΅ΠΌ pg_repack.
ΠΠ°ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠΈ ΡΠ°ΠΊΠ°? ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡΠ° ΠΎΡ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ°Π±ΠΎΡΡΡ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΈ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Ρ Π΄Π°Π½Π½ΠΈΡΠ΅, ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½ΠΈ Π½Π° ΠΏΡΡΠ²ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ, Π΅ ΠΈΠΌΠ°Π»ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π½Π° ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅, Ρ.Π΅. ΠΏΡΠΎΡΡΠΎ ΡΠΌΠ΅ ΠΈΠΌΠ°Π»ΠΈ βΠΊΡΡΠΌΠ΅Ρβ.
ΠΠ΄Π΅ΡΡΠ° Π½Π΅ ΡΡΠ°Π±ΠΎΡΠΈ. Π ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΈΠ΄ΡΡ ΠΌΠ΅ Π΄Π²Π° Π΄ΡΡΠ³ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: Π΄Π° ΠΏΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π½Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄, Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π° βΠ½Π°ΡΡΠΈΠΌβ pg_repack Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΡΡ . ΠΠ·Π±ΡΠ°Ρ ΠΌΠ΅ Π²ΡΠΎΡΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ.
ΠΠ° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π² Π½ΠΎΠ²Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°
Π¦Π΅Π»ΡΠ° Π½Π° Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π±Π΅ΡΠ΅ ΡΡΠ½Π° β Π°ΠΊΠΎ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠΌΠ° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠΎ Π·Π° Π½ΠΎΠ²Π°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΡΠ°ΠΊΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ.
ΠΠ° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΠΈΡΠ°Ρ ΠΌΠ΅ ΠΏΡΠΎΡΡ ΡΠ΅ΡΡ:
- ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π΄Π½Π° Π·Π°ΠΏΠΈΡ;
- Π²ΠΌΡΠΊΠ²Π°ΠΌΠ΅ Π² ΡΠΈΠΊΡΠ» Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ²Π°Ρ Ρ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡ Π·Π°ΠΏΠΈΡ;
- ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β Π΄Π°Π½Π½ΠΈΡΠ΅ Π²Π΅ΡΠ΅ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ²Π°Ρ;
- ΠΊΠΎΠΌΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
create table test_table
(
id serial,
val int,
constraint uk_test_table__val unique (val) deferrable initially deferred
);
INSERT INTO test_table (val) VALUES (0);
FOR i IN 1..10000 LOOP
BEGIN
INSERT INTO test_table VALUES (0) RETURNING id INTO v_id;
UPDATE test_table set val = i where id = v_id;
COMMIT;
END;
END LOOP;ΠΡΡ ΠΎΠ΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ pg_repack Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠ°Π΄Π°ΡΠ΅ ΠΏΡΠΈ ΠΏΡΡΠ²ΠΈΡ insert, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ Π±Π΅Π· Π³ΡΠ΅ΡΠΊΠΈ. ΠΡΠ»ΠΈΡΠ½ΠΎ.
ΠΡΠΈΠ²Π°ΠΌΠ΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π² ΡΡΡΠ°ΡΠ° ΡΠ°Π·Π° Π½Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² Π½ΠΎΠ²Π°ΡΠ°:
$ ./pg_repack -t tablename -o id
INFO: ΡΠ΅ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° "tablename"
ERROR: Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π½Π΅ ΡΡΠΏΡ:
ERROR: Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΊΠ»ΡΡΠ° Π½Π°ΡΡΡΠ°Π²Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ "index_16508"
DETAIL: ΠΠ»ΡΡ (id, index)=(100500, 42) Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°.ΠΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠ° ΡΠΈΡΡΠ°ΡΠΈΡ: Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ, Π° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° β Π½Π΅?!
APPLY_COUNT ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π΄Π²Π° ΠΏΠ°ΠΊΠ΅ΡΠ°
ΠΠ°ΠΏΠΎΡΠ½Π°Ρ ΠΌΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΡΠ΅Π΄ ΠΏΠΎ ΡΠ΅Π΄ ΠΈ ΠΎΡΠΊΡΠΈΡ ΠΌΠ΅ Π²Π°ΠΆΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ: ΠΏΡΠ΅Π»ΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² Π½ΠΎΠ²Π°ΡΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΡΠ° APPLY_COUNT ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°:
for (;;)
{
num = apply_log(connection, table, APPLY_COUNT);
if (num > MIN_TUPLES_BEFORE_SWITCH)
continue;
/* Π²ΡΠ΅ ΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠΈ, ΠΏΠΎΠ²ΡΠΎΡΠΈ. */
...
}ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ³Π°Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ Π΄Π° Π½Π°ΡΡΡΠ°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΏΡΠΈ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΎΠΊΠ°ΠΆΠ°Ρ Π½Π° ΡΡΠ±Π° Π½Π° Π΄Π²Π° ΠΏΠ°ΠΊΠ΅ΡΠ° β ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΠΊΠΎΠΌΠΈΡΠ½Π΅Π½ΠΈ Π² ΠΏΡΡΠ²ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ, Π° Π΄ΡΡΠ³Π°ΡΠ° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° β Π²ΡΠ² Π²ΡΠΎΡΠΈΡ. Π ΡΡΠΊ ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ ΡΡΠ°Π½Π΅: Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π² ΠΏΡΡΠ²ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ Π½Π΅ Π½Π°ΡΡΡΠ°Π²Π°Ρ Π½ΠΈΡΠΎ, Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, Π° Π°ΠΊΠΎ Π½Π°ΡΡΡΠ°Π²Π°Ρ β Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π³ΡΠ΅ΡΠΊΠ°.
APPLY_COUNT Π΅ 1000 Π·Π°ΠΏΠΈΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠ²Π° Π·Π°ΡΠΎ Π½Π°ΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΌΠΈΠ½Π°Π²Π°Ρ Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ β ΡΠ΅ Π½Π΅ ΠΏΠΎΠΊΡΠΈΠ²Π°Ρ Π° ΡΠ»ΡΡΠ°Ρ βΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅β. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ β insert ΠΈ update, Π·Π°ΡΠΎΠ²Π° ΡΠΎΡΠ½ΠΎ 500 ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Ρ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Ρ Π° Π² ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ Π½Π΅ ΡΡΠ΅ΡΠ°Ρ ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π‘Π»Π΅Π΄ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π²ΡΠΎΡΠΈ update Π½Π°ΡΠ΅ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΏΡΡ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ:
FOR i IN 1..10000 LOOP
BEGIN
INSERT INTO test_table VALUES (1) RETURNING id INTO v_id;
UPDATE test_table set val = i where id = v_id;
UPDATE test_table set val = i where id = v_id; -- ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ update
COMMIT;
END;
END LOOP;Π ΡΠ°ΠΊΠ°, ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΊΠ°, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈ Π² Π΅Π΄Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ Π² Π½ΠΎΠ²Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΡΠΎ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ.
ΠΡΠΊΠ°Π· ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅
Π ΠΏΡΠΈ Π½Π°Ρ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΈΠΌΠ°ΡΠ΅ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΡΠ²ΠΈΡΡ: Π΄Π° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ΅ΠΌ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π±Π°ΡΡΠΎΠ²Π΅ ΠΈ Π΄Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ Ρ Π΅Π΄Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ. Π ΠΏΠΎΠ»Π·Π° Π½Π° ΡΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±Π΅ΡΠ΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠΎΡΡΠΎΡΠ° β Π½ΡΠΆΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° Π±ΡΡ Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ (ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, Π² ΠΏΠΎ-ΡΡΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΠΎΠ³Π°Π²Π° pg_reorg ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠ°). ΠΠΎ ΠΈΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ β ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΄ΡΠ»Π³Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π° ΡΠΎΠ²Π°, ΠΊΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ, Π΅ Π·Π°ΠΏΠ»Π°Ρ Π° ΠΎΡ Π½ΠΎΠ²ΠΎ bloat.
ΠΡΠΎΡΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΈ ΠΏΠΎ-ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ: Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π² Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΊΠΎΠ»ΠΎΠ½Π° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. Π’ΠΎΠ³Π°Π²Π° ΠΏΡΠΈ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΈ Π³ΡΡΠΏΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π°ΡΡΠΈΠ±ΡΡ ΠΈ Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. ΠΠ°ΡΡΡΡ ΡΠ΅ ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ° ΠΎΡ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ (ΠΈΠ»ΠΈ Π΅Π΄Π½Π° Π³ΠΎΠ»ΡΠΌΠ°) ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅ Π²Π°ΡΠΈΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π°, ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈ Π² ΡΠ΅Π·ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Ρ Π² Π»ΠΎΠ³-ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΡΠ΅Π΄, Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, ΠΊΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ. seqscan ΠΏΡΠΈ Π²ΡΡΠΊΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Ρ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ tx_id Π΅ ΡΠ²ΡΡΠ΄Π΅ ΡΠΊΡΠΏΠΎ, Π½ΡΠΆΠ΅Π½ Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ, Π½ΠΎ ΠΈ ΡΠΎΠΉ ΡΠ΅ Π·Π°Π±Π°Π²ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. ΠΠ±ΡΠΎ Π²Π·Π΅ΡΠΎ, ΠΊΠ°ΠΊΡΠΎ Π²ΠΈΠ½Π°Π³ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΆΠ΅ΡΡΠ²Π°ΠΌΠ΅ Π½Π΅ΡΠΎ.
Π ΡΠ°ΠΊΠ°, ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΠΏΡΡΠ²ΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΅ ΠΏΠΎ-ΠΏΡΠΎΡΡ. ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π΄Π°Π»ΠΈ Π΄ΡΠ»Π³Π°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ΅Π°Π»Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΡΠ°ΡΠ°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Π² Π½ΠΎΠ²Π°ΡΠ° ΡΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π² Π΅Π΄Π½Π° Π΄ΡΠ»Π³Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π²ΡΠΏΡΠΎΡΡΡ ΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ° Π² βΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ ΡΠ°Π·ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ?β ΠΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΡΠ²Π°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π·Π°Π²ΠΈΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. ΠΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π½ΠΎΠ²Π°ΡΠ° β ΠΎΡ ΡΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ΅ ΡΠ΅ Π½Π°ΡΡΡΠΏΠ°Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠ΅Π»ΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ, Ρ.Π΅. ΠΎΡ ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ. pg_repack Π±Π΅ΡΠ΅ ΠΏΡΡΠ½Π°Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, Π° ΠΎΠ±Π΅ΠΌΡΡ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π±Π΅ΡΠ΅ Π½Π΅ΡΡΠ°Π²Π½ΠΈΠΌΠΎ ΠΌΠ°Π»ΡΠΊ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. Π Π΅ΡΠΈΡ ΠΌΠ΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅Π½Π΅Π±ΡΠ΅Π³Π½Π΅ΠΌ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π½ΠΎΠ²Π°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ (ΡΡΠ΅Π΄Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΅ 1Ρ ΠΈ 2-3 ΠΌΠΈΠ½ΡΡΠΈ Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅).
ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ Π±ΡΡ Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ. ΠΡΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΡΠ½ ΡΡΡΠΎ. ΠΠ° ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡ β ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π΅Π΄Π½Π° ΠΎΡ Π±Π°Π·ΠΈΡΠ΅ ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ:

Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ²Π° Π½Π°ΠΏΡΠ»Π½ΠΎ, Π½Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ
ΠΌΠ΅ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΎΡΠΎΡΠΎ, Π½ΠΎ ΠΎΠ±ΠΌΠΈΡΠ»ΡΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° Π³ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ°ΡΠ°ΡΠ° ΡΠ΅ΠΊΡΡΠ° Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ°, Π·Π° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π³ΠΎΡΠΎΠ²Π° Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ΡΠΈΡ
ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΌΠΎ Ρ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈΡΠ΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π° Π·Π° ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π΅Π½ ΠΏΠ°Ρ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠΈΠΏΠΎΠ²Π΅. ΠΠ°Π΄ΡΠ²Π°ΠΌΠ΅ ΡΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π² Π±ΡΠ΄Π΅ΡΠ΅.
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°Π»ΠΈ Π·Π°ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠΎ ΡΠ΅ Π²ΠΏΡΡΠ½Π°Ρ ΠΌΠ΅ Π² ΡΠ°Π·ΠΈ ΠΈΡΡΠΎΡΠΈΡ Ρ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° pg_repack, Π° Π½Π΅ ΡΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π°Π½Π°Π»ΠΎΠ·ΠΈ? Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈ Π½ΠΈΠ΅ ΠΌΠΈΡΠ»Π΅Ρ ΠΌΠ΅ Π·Π° ΡΠΎΠ²Π°, Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈΡΡ ΠΎΠΏΠΈΡ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΠΌΡ ΡΠΏΠΎΡΡΠ΅Π±Π° Π²ΡΡΡ Ρ ΡΠ°Π±Π»ΠΈΡΠΈ Π±Π΅Π· ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½ΠΈ ΠΌΠΎΡΠΈΠ²ΠΈΡΠ° Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ ΠΏΡΡΠ²ΠΎ Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² Π½Π΅Π³ΠΎ ΠΈ Π°ΠΊΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ, ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π² ΡΠ°Π·ΡΠΌΠ΅Π½ ΡΡΠΎΠΊ, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΠΎΠ±ΠΌΠΈΡΠ»ΡΠΌΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅.
ΠΠ·Π²ΠΎΠ΄ΠΈ
ΠΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ°ΠΌΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ ΡΠΈ ΠΎΠΏΠΈΡ:
- Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π·Π° Π²Π°ΡΠΈΡ bloat. ΠΠ° Π±Π°Π·Π°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ autovacuum.
- ΠΠ°ΡΡΡΠΎΠΉΠ²Π°ΠΉΡΠ΅ AUTOVACUUM, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ bloat Π½Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ Π½ΠΈΠ²ΠΎ.
- ΠΠΊΠΎ bloat Π²ΡΠ΅ ΠΏΠ°ΠΊ Π½Π°ΡΠ°ΡΡΠ²Π° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ΅Π΄ΡΡΠ²Π°ΡΠ° "ΠΈΠ·Π²ΡΠ½ ΠΊΡΡΠΈΡΡΠ°", Π½Π΅ ΡΠ΅ ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π²ΡΠ½ΡΠ½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΆΠ½ΠΎΡΠΎ Π΅ Π²ΡΠΈΡΠΊΠΎ Π΄Π° Π±ΡΠ΄Π΅ Π΄ΠΎΠ±ΡΠ΅ ΡΠ΅ΡΡΠ²Π°Π½ΠΎ.
- ΠΠ΅ ΡΠ΅ ΡΡΡΠ°Ρ ΡΠ²Π°ΠΉΡΠ΅ Π΄Π° Π΄ΠΎΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ Π²ΡΠ½ΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΏΠΎΡΠ΅Π΄ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ Π½ΡΠΆΠ΄ΠΈ β ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ Π²ΠΈ ΠΊΠΎΠ΄.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
