
ΠΡΠ΅ΠΊΡΡΡ Π½Π° Π½Π°Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ (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-ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΊΠ°, ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ Π² Π΄Π²Π°ΡΠ° ΡΠ»ΡΡΠ°Ρ: ΠΈΠ»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ, ΠΈΠ»ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π²Π΅Π΄Π½Π°Π³Π°.
Π ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΈ ΠΈΠ΄Π΅ΠΈ ΠΈΠΌΠ°Ρ ΠΌΠ΅.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π½Π° deferred
ΠΡΡΠ²Π°ΡΠ° ΠΈΠ΄Π΅Ρ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΈ Π΄Π²Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎΡΡ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π»ΡΠΈΠ²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ°, Π½ΠΎ Π°ΠΊΠΎ ΡΠ΅ ΡΠ° ΠΌΠ°Π»ΠΊΠΎ, Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π²Π»ΠΈΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°ΠΊΠΈΠ²Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ ΡΠ° Π½ΠΎΡΠΌΠ°Π»Π½Π° ΡΠΈΡΡΠ°ΡΠΈΡ Π·Π° ΡΡΡ . Π’Π΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π°Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π²Π°ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Ρ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π½Π° Π²ΡΠΎΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½Π΅ ΡΡΠΏΡΠ²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡΡ Π²Π΅ΡΠ΅ Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ Π·Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ ΠΎΡ ΠΏΡΡΠ²ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π». Π ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ ΡΡΡΠ²ΡΡΡΡ ΠΎΡΠΊΠ°Π·Π²Π° Π½Π° Π²ΡΠΎΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π° Π½Π΅Π³ΠΎΠ²ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ Π±Π»ΠΎΠΊΠΈΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΡΠ²ΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π·Π°Π²ΡΡΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ°, Π²ΡΠΎΡΠΈΡΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡΡ Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ ΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²ΡΠΎΡΠΈ ΡΠ²ΠΎΠ΅ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.

ΠΠ° Π΄Π° ΠΌΠΎΠ³Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ Π² ΡΠΏΠ΅ΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ, ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ Π½ΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡΠΎ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅:
CREATE UNIQUE INDEX CONCURRENTLY uk_tablename__immediate ON tablename (id, index);
-- ΠΈΠ·ΠΏΡΠ»Π½ΠΈ pg_repack
DROP INDEX CONCURRENTLY uk_tablename__immediate;Π ΡΠ΅ΡΡΠΎΠ²Π°ΡΠ° ΡΡΠ΅Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ. Π£ΡΠΏΠ΅Ρ ! ΠΡΠ½ΠΎΠ²ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΌΠ΅ pg_repack Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ 5 Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΡΠ²ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Π·Π° Π΅Π΄ΠΈΠ½ ΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π²ΡΠΎΡΠ°ΡΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ° Π½Π°ΡΠ°ΡΠ½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈ Π½ΠΈ ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΠΏΡΠ΅ΠΌ pg_repack.
ΠΠ°ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠΈ ΡΠΎΠ²Π°? ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡΠ° Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ Π³ΡΠ΅ΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ°Π±ΠΎΡΡΡ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΈ. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Ρ Π΄Π°Π½Π½ΠΈΡΠ΅, ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½ΠΈ Π² ΠΏΡΡΠ²ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ, Π΅ ΠΈΠΌΠ°Π»ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π² ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅, Ρ.Π΅. ΠΏΡΠΎΡΡΠΎ ΡΠΌΠ΅ βΠΈΠΌΠ°Π»ΠΈ ΠΊΡΡΠΌΠ΅Ρβ.
ΠΠ΄Π΅ΡΡΠ° Π½Π΅ ΡΡΠ°Π±ΠΎΡΠΈ. Π ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΈΠ΄ΡΡ ΠΌΠ΅ Π΄Π²Π΅ Π΄ΡΡΠ³ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: Π΄Π° ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ ΠΊΠΎΠ΄, Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ Π΄Π° βΠ½Π°ΡΡΠΈΠΌβ pg_repack Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΡΡ . ΠΠ·Π±ΡΠ°Ρ ΠΌΠ΅ Π²ΡΠΎΡΠΎΡΠΎ.
ΠΠ° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π² Π½ΠΎΠ²Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°.
Π¦Π΅Π»ΡΠ° Π½Π° Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π±Π΅ΡΠ΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π° β Π°ΠΊΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠΌΠ° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π·Π° Π½ΠΎΠ²Π°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΡΠ°ΠΊΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ.
ΠΠ° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, Π½Π°ΠΏΠΈΡΠ°Ρ ΠΌΠ΅ ΠΏΡΠΎΡΡ ΡΠ΅ΡΡ:
- ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π΄Π½Π° Π·Π°ΠΏΠΈΡ;
- Π²ΠΌΡΠΊΠ²Π°ΠΌΠ΅ Π² ΡΠΈΠΊΡΠ» Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Ρ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ°ΡΠ° Π·Π°ΠΏΠΈΡ;
- ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β Π΄Π°Π½Π½ΠΈΡΠ΅ Π²Π΅ΡΠ΅ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ²Π°Ρ;
- ΠΊΠΎΠΌΠΈΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° 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 Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠ°Π΄Π½Π° ΠΏΡΠΈ ΠΏΡΡΠ²ΠΎΡΠΎ Π²ΠΌΡΠΊΠ²Π°Π½Π΅, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ Π±Π΅Π· Π³ΡΠ΅ΡΠΊΠΈ. ΠΡΠ»ΠΈΡΠ½ΠΎ.
ΠΡΠΈΠ²Π°ΠΌΠ΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π² ΡΡΡΠ°ΡΠ° ΡΠ°Π·Π° Π½Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ Π»ΠΎΠ³ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² Π½ΠΎΠ²Π°ΡΠ°:
$ ./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; there might be still some tuples, repeat.
...
}ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π½Π°ΡΡΡΠ°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ°, ΠΏΡΠΈ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²Π΅ ΠΏΠ°ΡΡΠΈΠ΄ΠΈ β ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΊΠΎΠΌΠΈΡΠ½Π°ΡΠΈ Π² ΠΏΡΡΠ²Π°ΡΠ° ΠΏΠ°ΡΡΠΈΠ΄Π°, Π° Π΄ΡΡΠ³Π°ΡΠ° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° β Π²ΡΠ² Π²ΡΠΎΡΠ°ΡΠ°. Π ΡΡΠΊ ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ ΡΡΠ°Π½Π΅: Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π² ΠΏΡΡΠ²Π°ΡΠ° ΠΏΠ°ΡΡΠΈΠ΄Π° Π½Π΅ Π½Π°ΡΡΡΠ°Π²Π°Ρ Π½ΠΈΡΠΎ, Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, Π° Π°ΠΊΠΎ Π½Π°ΡΡΡΠ°Π²Π°Ρ β ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π³ΡΠ΅ΡΠΊΠ°.
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
