Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΎΠΉ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π½Π°Ρ‡Π°Π»Π° 2016 Π³ΠΎΠ΄Π° АндрСя Бальникова "Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql"

Π’ Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ я Ρ€Π°Π·Π±Π΅Ρ€Ρƒ основныС ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π½Π° этапС проСктирования ΠΈ написания ΠΊΠΎΠ΄Π° прилоТСния. И Π²ΠΎΠ·ΡŒΠΌΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² Postgresql. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ вашСй систСмы Π² Ρ†Π΅Π»ΠΎΠΌ, хотя ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… прСдпосылок ΠΊ этому Π½Π΅ Π±Ρ‹Π»ΠΎ Π²ΠΈΠ΄Π½ΠΎ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π Π°Π΄ всСх ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ! Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄ Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ тСхничСский ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΎΡ‚ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ. Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² бэкСнд-систСм Π² основном, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ нас достаточно большоС количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². И всС ΠΎΠ½ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ошибки. О Π½ΠΈΡ… я Π²Π°ΠΌ расскаТу. Объясню ΠΊ Ρ‡Π΅ΠΌΡƒ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈ ΠΏΠ»ΠΎΡ…ΠΎΠΌΡƒ Π²Π΅Π΄ΡƒΡ‚ эти ошибки.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ ошибки? Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ: Π½Π° авось, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊ ΠΏΡ€ΠΎΠΊΠ°Ρ‚ΠΈΡ‚ ΠΈ ΠΎΡ‚ нСзнания ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·ΠΎΠΉ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² самой Π±Π°Π·Π΅.

Π― Π²Π°ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с уТасными ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС стало ΠΏΠ»ΠΎΡ…ΠΎ. Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ расскаТу ΠΎΠ± ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΌ происходит. И ΠΊΠ°ΠΊ с Π½ΠΈΠΌΠΈ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€Π΅Π²Π΅Π½Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для прСдотвращСния ошибок. РасскаТу ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструмСнтах ΠΈ Π΄Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π― использовал Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ Ρƒ мСня Π±Ρ‹Π»ΠΎ Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ. Одна Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° со счСтами ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², другая с опСрациями ΠΏΠΎ этим счСтам. И с ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΌΡ‹ обновляСм остатки Π½Π° этих счСтах.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ: ΠΎΠ½Π° достаточно нСбольшая, 2 MB. ВрСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ Π±Π°Π·Π΅ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅. И достаточно Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° – 2 000 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

И сквозь этот Π΄ΠΎΠΊΠ»Π°Π΄ я Π²Π°ΠΌ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наглядно Π±Ρ‹Π»ΠΎ понятно, Ρ‡Ρ‚ΠΎ происходит. ВсСгда Π±ΡƒΠ΄Π΅Ρ‚ 2 слайда с Π³Ρ€Π°Ρ„ΠΈΠΊΠ°ΠΌΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ слайд – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π½Π° сСрвСрС.

И Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρƒ нас Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ИндСкс нСбольшой Π² 2 MB. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ слСва Π³Ρ€Π°Ρ„ΠΈΠΊ.

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ сСрвСру Ρ‚ΠΎΠΆΠ΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅, нСбольшоС. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ.

Π›Π΅Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ – это самыС Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ быстро Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. И Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ Ρ‚ΡƒΡ‚ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ – это Π±Ρ‹Π» старт-тСст. Π”Π°Π»ΡŒΡˆΠ΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π½Π°ΠΌ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π’Ρ‚ΠΎΡ€ΠΎΠΉ слайд всСгда Π±ΡƒΠ΄Π΅Ρ‚ посвящСн испытуСмой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅. Π’ этой ситуации ΠΌΡ‹ обновляСм постоянно остатки ΠΏΠΎ счСтам Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. И ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ срСднСС врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ обновлСния достаточно Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅, мСньшС миллисСкунды. Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ рСсурсы процСссора (это ΠΏΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ) ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ ΠΈ достаточно нСбольшиС.

ΠŸΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько памяти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈ дисковой ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ Π² поисках нашСй Π½ΡƒΠΆΠ½ΠΎΠΉ строчки, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ. И количСство опСрация ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ – 2 000 Π² сСкунду, ΠΊΠ°ΠΊ ΠΈ Π²Π½Π°Ρ‡Π°Π»Π΅ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ».

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас происходит трагСдия. По ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ длинная забытая транзакция. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ всС Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Π΅:

  • Одна ΠΈΠ· самых распространСнных – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² ΠΊΠΎΠ΄Π΅ прилоТСния Π½Π°Ρ‡Π°Π»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ сСрвису. И этот сСрвис Π½Π°ΠΌ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚. Π’. Π΅. ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, сдСлали ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π±Π°Π·Π΅ ΠΈ пошли ΠΈΠ· прилоТСния ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ сСрвису Π² Ρ€Π°ΠΌΠΊΠ°Ρ… нашСй инфраструктуры, ΠΈ ΠΎΠ½ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π°ΠΌ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚. И Ρƒ нас повисла сСссия Π² состоянии – нСизвСстно, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡΡ.
  • Вторая ситуация, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π² ΠΊΠΎΠ΄Π΅ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» exception. И ΠΌΡ‹ Π² exception Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. И Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ висящая сСссия с ΠΎΡ‚Ρ€Ρ‹Ρ‚ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ.
  • И послСдний – это Ρ‚ΠΎΠΆΠ΅ довольно частый случай. Π­Ρ‚ΠΎ нСкачСствСнный ΠΊΠΎΠ΄. НСкоторыС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Она висит, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρƒ вас висит.

К Ρ‡Π΅ΠΌΡƒ Π²Π΅Π΄ΡƒΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ?

К Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Ρ€Π΅Π·ΠΊΠΎ Ρ€Π°Π·Π΄ΡƒΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ индСксы. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎΡ‚ самый эффСкт bloat. Для Π±Π°Π·Ρ‹ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π·ΠΊΠΎ увСличится врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, увСличится Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° сСрвСр Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. И ΠΊΠ°ΠΊ ΠΈΡ‚ΠΎΠ³ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Π² ΠΊΠΎΠ΄Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΠ»ΠΈ 10 миллисСкунд Π½Π° запрос Π² Π±Π°Π·Ρƒ, 10 миллисСкунд Π½Π° свою Π»ΠΎΠ³ΠΈΠΊΡƒ, Ρ‚ΠΎ Ρƒ вас функция ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π° 20 миллисСкунд. А сСйчас Ρƒ вас ситуация Π±ΡƒΠ΄Π΅Ρ‚ совсСм ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½Π°Ρ.

И Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ происходит. Π›Π΅Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ нас длинная долгая транзакция. И Ссли ΠΌΡ‹ посмотрим Π½Π° Π»Π΅Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ, Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Π΄Π²ΡƒΡ… ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ Ρƒ нас Ρ€Π΅Π·ΠΊΠΎ скакнул Π² 300 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚. ΠŸΡ€ΠΈ этом количСство Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅ измСнилось, Ρ‚. Π΅. Ρ‚Π°ΠΌ достаточно большоС количСство мусора.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠžΠ±Ρ‰Π°Ρ ситуация ΠΏΠΎ срСднСму Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра Ρ‚ΠΎΠΆΠ΅ измСнилось Π½Π° нСсколько порядков. Π’. Π΅. всС запросы ΠΏΠΎ сСрвСру Π½Π°Ρ‡Π°Π»ΠΈ ΠΊΠ°ΠΏΠΈΡ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΠ΅Π΄Π°Ρ‚ΡŒ. И ΠΏΡ€ΠΈ этом Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ процСссы Postgres Π² Π»ΠΈΡ†Π΅ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ рСсурсы.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π§Ρ‚ΠΎ ΠΆΠ΅ с нашСй Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΎΠΉ происходит? Π’ΠΎΠΆΠ΅ самоС. Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ Ρƒ нас скакнуло Π½Π° нСсколько порядков Π²Π²Π΅Ρ€Ρ…. Если ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΠΎ потрСбляСмым рСсурсам, Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ сильно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»Π°ΡΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° процСссор. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ. И ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»Π°ΡΡŒ ΠΎΠ½Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, процСссору приходится ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΡƒΡ‡Ρƒ бСсполСзных строчСк Π² поисках ΠΎΠ΄Π½ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎΠΉ. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ. И ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ – количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² сСкунду Ρƒ нас Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΡΠ°ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ сильно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° Π½Π΅ успСваСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ количСство запросов.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Нам Π½Π°Π΄ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΆΠΈΠ·Π½ΠΈ. Π›Π΅Π·Π΅ΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ приводят ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅. Находим ΠΈ ΡƒΠ±ΠΈΠ²Π°Π΅ΠΌ эту Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. И Ρƒ нас всС становится Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. ВсС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ.

ΠœΡ‹ ΡƒΡΠΏΠΎΠΊΠΎΠΈΠ»ΠΈΡΡŒ, Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π΄ΠΎ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΉ ситуации. Запросы ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС Ρ€Π°Π²Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ сущСствСнно ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. Π’ ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π°-Π΄Π²Π° Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Нагрузка Π½Π° сСрвСр Ρ‚ΠΎΠΆΠ΅ Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ Π±Ρ‹Π»Π° Π΄ΠΎ Π°Π²Π°Ρ€ΠΈΠΈ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

И вопрос: Β«Π§Ρ‚ΠΎ происходит с Π±Π°Π·ΠΎΠΉ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚?Β». А с Π±Π°Π·ΠΎΠΉ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ситуация. На Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ ΠΈ Ρ‚Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Но Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ Π²ΠΎ врСмя Π°Π²Π°Ρ€ΠΈΠΈ Ρƒ нас Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΠΎ выросли. И с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΈΡΡŒ. Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя ΠΏΠΎ Π±Π°Π·Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ. И ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ ходят Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ с ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ для нас ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Автовакуум стал Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ Π½Π°Ρ‡Π°Π» Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΏΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ большСС количСство Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΠΎ испытуСмой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ со счСтами, Π³Π΄Π΅ ΠΌΡ‹ мСняСм остатки: врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ запросу Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΎΡΡŒ Π² Π½ΠΎΡ€ΠΌΡƒ. Но Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ΠΎ Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π° Π²Ρ‹ΡˆΠ΅.

И ΠΏΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π° процСссор ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° процСссор Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ»Π°ΡΡŒ Π² Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Π΄ΠΎ Π°Π²Π°Ρ€ΠΈΠΈ. И ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ‚Π°ΠΌ ΠΊΡ€ΠΎΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ€Π°Π· Π² ΠΏΡ€Π°Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ происходит ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ количСства памяти. Π’. Π΅. для поиска Π½ΡƒΠΆΠ½ΠΎΠΉ строчки ΠΌΡ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ рСсурсы сСрвСра Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΊΠ΅ бСсполСзных Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² сСкунду ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ ситуация Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ Π±Ρ‹Π»Π°. Явная дСградация Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ слСдствиС нашСго прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с этой Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

И Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ происходит, Ссли Π²Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π΄ΠΎΠΊΠ»Π°Π΄Π΅, Ρ‚ΠΎ сСйчас Π½Π΅ΠΌΠ½ΠΎΠΆΠ΅Ρ‡ΠΊΠΎ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ. ВСория ΠΎ процСссС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ. Π—Π°Ρ‡Π΅ΠΌ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚?

Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ для понимания. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρƒ нас находятся строчки. Π­Ρ‚ΠΈ строчки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅, ΠΆΠΈΠ²Ρ‹Π΅, Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ сСйчас. На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ. И Π΅ΡΡ‚ΡŒ строчки ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹, ΠΏΠΎ Π½ΠΈΠΌ появились Π½ΠΎΠ²Ρ‹Π΅ записи. И ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π½Π΅ интСрСсны Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Но Π»Π΅ΠΆΠ°Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ·-Π·Π° особСнности Postgres.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ? Автовакуум Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚, обращаСтся ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅: Β«Π”Π°ΠΉ ΠΌΠ½Π΅, поТалуйста, id самой старой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…Β». Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ этот id. И Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ строчки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. И Ссли Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ строчки Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ транзакциями ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ старыми, Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ ΠΈΡ… ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ строчки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, записав Ρ‚ΡƒΠ΄Π° Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс.

ΠœΡ‹ Π² это врСмя ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ измСнСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. И Π½Π° эти строчки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, записываСм Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. И Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρƒ нас получаСтся ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‚, Ρ‚. Π΅. всС врСмя Ρ‚Π°ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ старыС строки, вмСсто Π½ΠΈΡ… ΠΌΡ‹ записываСм Π½ΠΎΠ²Ρ‹Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹. И это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ состояниС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ PostgreSQL.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π²ΠΎ врСмя Π°Π²Π°Ρ€ΠΈΠΈ? Как Ρ‚Π°ΠΌ происходил этот процСсс?

ΠœΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ состоянии, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΆΠΈΠ²Ρ‹Π΅, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ строчки. ΠŸΡ€ΠΈΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ. Он спросил Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Ρ‚ΠΎΠΌ, какая Ρƒ нас самая давняя транзакция, ΠΊΠ°ΠΊΠΎΠΉ Ρƒ Π½Π΅Π΅ id. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ» этот id, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ многочасовой давности, ΠΌΠΎΠΆΠ΅Ρ‚ дСсятиминутной. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько сильная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρƒ вас Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. И пошСл ΠΈΡΠΊΠ°Ρ‚ΡŒ строчки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅. И Π½Π΅ нашСл Ρ‚Π°ΠΊΠΈΡ… строчСк Π² нашСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Но ΠΌΡ‹ Π² это врСмя ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ Π² Π½Π΅ΠΉ, обновляСм, мСняСм Π΄Π°Π½Π½Ρ‹Π΅. А Ρ‡Ρ‚ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² это врСмя Π΄Π΅Π»Π°Ρ‚ΡŒ? Π•ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ остаСтся, ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ строчки Π² ΠΊΠΎΠ½Π΅Ρ† ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. И Ρ‚Π΅ΠΌ самым Ρƒ нас Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π·Π΄ΡƒΠ²Π°Ρ‚ΡŒΡΡ.

РСально Π½Π°ΠΌ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ Π·Π΅Π»Π΅Π½Ρ‹Π΅ строчки. Но Π²ΠΎ врСмя Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρƒ нас получаСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π·Π΅Π»Π΅Π½Ρ‹Ρ… строчСк ΠΊΡ€Π°ΠΉΠ½Π΅ Π½ΠΈΠ·ΠΎΠΊ Π²ΠΎ всСм объСмС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

А ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ выполняСм запрос, Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… приходится ΠΏΡ€ΠΎΠ±Π΅Π³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ всСм строчкам: ΠΈ красным, ΠΈ Π·Π΅Π»Π΅Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½ΡƒΡŽ строчку. И эффСкт раздутия Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ бСсполСзными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ называСтся Β«bloatΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Π΅ ΠΈ ΠΆΡ€Π΅Ρ‚ нашС дисковоС пространство. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Π±Ρ‹Π»ΠΎ 2 MB, стало 300 MB? А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ помСняйтС ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Ρ‹ Π½Π° Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Ρ‹ ΠΈ Π²Ρ‹ Ρ‚Π°ΠΊ достаточно быстро Π»ΠΈΡˆΠΈΡ‚Π΅ΡΡŒ всСх запасов своих дисковых рСсурсов.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

КакиС послСдствия ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ для нас?

  • Π’ ΠΌΠΎΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ индСкс выросли Π² 150 Ρ€Π°Π·. Π£ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΡˆΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π±Ρ‹Π²Π°Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ случаи, ΠΊΠΎΠ³Π΄Π° просто мСсто Π½Π° дискС Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΎΡΡŒ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ.
  • Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ† сам ΠΏΠΎ сСбС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ. Автовакуум Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ€Π΅Π·Π°Ρ‚ΡŒ хвостик Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ссли Ρ‚Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ строчки. Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ происходит постоянная ротация, ΠΎΠ΄Π½Π° зСлСная строчка ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Π·Π°Π²ΠΈΡΠ½ΡƒΡ‚ΡŒ ΠΈ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π³Π΄Π΅-Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ. Но это Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ маловСроятноС событиС, Ρ‡Ρ‚ΠΎ Ρƒ вас сама ΠΏΠΎ сСбС Ρ‚Π°Π±Π»ΠΈΡ†Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ…, Ρ‡Ρ‚ΠΎ Π½Π΅ стоит Π½Π° это Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ.
  • Π‘Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всю ΠΊΠΈΠΏΡƒ бСсполСзных строчСк. И ΠΌΡ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ дисковыС рСсурсы, Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ рСсурсы процСссора ΠΈ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΡΠ½Π΅Ρ€Π³ΠΈΡŽ.
  • И это нСпосрСдствСнно влияСт Π½Π° нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΌΡ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΠ»ΠΈ 10 миллисСкунд Π½Π° запрос, 10 миллисСкунд Π½Π° наш ΠΊΠΎΠ΄, Ρ‚ΠΎ Π²ΠΎ врСмя Π°Π²Π°Ρ€ΠΈΠΈ ΠΌΡ‹ стали Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ сСкунду Π½Π° запрос ΠΈ 10 миллисСкунд Π½Π° ΠΊΠΎΠ΄, Ρ‚. Π΅. Π½Π° порядок ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния снизилась. И ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π°Π²Π°Ρ€ΠΈΡŽ Ρƒ нас стало тратится 20 миллисСкунд Π½Π° запрос, 10 миллисСкунд Π½Π° ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ всС Ρ€Π°Π²Π½ΠΎ просСли Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π° ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. И это всС ΠΈΠ·-Π·Π° ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая подвисла, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎ нашСй Π²ΠΈΠ½Π΅.
  • И вопрос: «Как всС Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π°Π·Π°Π΄?Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ нас стало всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈ запросы Π·Π°Π±Π΅Π³Π°Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ быстро, ΠΊΠ°ΠΊ Π΄ΠΎ Π°Π²Π°Ρ€ΠΈΠΈ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Для этого Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Ρ€Π°Π±ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ проводится.

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π΄ΡƒΠ»ΠΈΡΡŒ. ΠœΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ запись ΠΈΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. И для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ pgstattuple. Установив это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π΄ΡƒΠ»ΠΈΡΡŒ достаточно сильно.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ нашли эти Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΆΠ°Ρ‚ΡŒ. Для этого Π΅ΡΡ‚ΡŒ ΡƒΠΆΠ΅ инструмСнты. Π’ нашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Ρ€ΠΈ инструмСнта. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ – встроСнный VACUUM FULL. Он ТСстокий, суровый ΠΈ бСспощадный, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½. Pg_repack ΠΈ pgcompacttable – это сторонниС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для сТатия Ρ‚Π°Π±Π»ΠΈΡ†. И ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Ρ€Π΅ΠΆΠ½ΠΎ относятся ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. Но ΠΎΠ± этом я расскаТу Π² самом ΠΊΠΎΠ½Ρ†Π΅. Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ инструмСнта. Π•ΡΡ‚ΡŒ ΠΈΠ· Ρ‡Π΅Π³ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ всС ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ»ΠΈ, ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ всС стало Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ:

  • ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ΡΡ ΠΎΠ½Π° достаточно Π»Π΅Π³ΠΊΠΎ. НуТно ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ сСссий Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€-сСрвСрС. ОсобСнно опасныС сСссии Π² состоянии idle in transaction. Π­Ρ‚ΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ сдСлали ΠΈ ΡƒΡˆΠ»ΠΈ ΠΈΠ»ΠΈ просто повисли, ΠΏΠΎΡ‚Π΅Ρ€ΡΠ»ΠΈΡΡŒ Π² ΠΊΠΎΠ΄Π΅.
  • И для вас, ΠΊΠ°ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π²Π°ΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ возникновСния Π΄Π°Π½Π½Ρ‹Ρ… ситуаций. Π­Ρ‚ΠΎ Π½Π΅ слоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ полСзная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. Π’Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠΈΡ‚Π΅ большоС количСство «дСтских» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ транзакциями.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

На этих Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ… я Π²Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ измСнилась Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я ΠΏΡ€ΠΎΡˆΠ΅Π» Π² Π΄Π°Π½Π½ΠΎΠΌ случаС VACUUM FULL’ом ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅. Π­Ρ‚ΠΎ Ρƒ мСня Π½Π΅ production.

Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ вСрнулся сразу Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ состояниС Π² ΠΏΠ°Ρ€Ρƒ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚. На срСднСС врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ сСрвСру это Π½Π΅ сильно повлияло.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Но ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΠΎ нашСй испытуСмой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅, Π³Π΄Π΅ ΠΌΡ‹ обновляли остатки Π½Π° счСтах, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ срСднСС врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ запросу обновлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ Π΄ΠΎΠ°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ уровня. РСсурсы, потрСбляСмыС процСссором Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого запроса, Ρ‚ΠΎΠΆΠ΅ ΡƒΠΏΠ°Π»ΠΈ Π΄ΠΎ Π΄ΠΎΠ°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ уровня. И ΠΏΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сСйчас ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Ρƒ строчку, которая Π½ΡƒΠΆΠ½Π° Π½Π°ΠΌ сразу, Π½Π΅ пСрСбирая скоп ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Ρ… строчСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎ сТатия Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. И срСднСС врСмя запросов ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ. Но Ρ‚ΡƒΡ‚ Ρƒ мСня, скорСС, ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΅Π³ΠΎ ΠΆΠ΅Π»Π΅Π·Π°.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

На этом пСрвая история Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ. Она самая распространСнная. И случаСтся Ρƒ всСх, нСзависимо ΠΎΡ‚ ΠΎΠΏΡ‹Ρ‚Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, насколько Ρ‚Π°ΠΌ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ программисты. Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ это происходит.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ вторая, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ распрСдСляСм Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ сСрвСрныС рСсурсы

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

  • ΠœΡ‹ ΡƒΠΆΠ΅ выросли ΠΈ стали ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌΠΈ рСбятами. И ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ Π½Π°ΠΌ ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ: ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€, Π° с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. И ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ эта ситуация Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ ETL. И бизнСс этому ΠΎΡ‡Π΅Π½ΡŒ радуСтся. Он ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² с ΠΊΡƒΡ‡Π΅ΠΉ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ слоТной.
  • ΠžΡ‚Ρ‡Π΅Ρ‚Ρ‹ многочасовыС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΡƒ Π½Π΅ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Π΅ΡˆΡŒ Π·Π° миллисСкунды. ΠœΡ‹, ΠΊΠ°ΠΊ Π±Ρ€Π°Π²Ρ‹Π΅ рСбята, пишСм ΠΊΠΎΠ΄. Π”Π΅Π»Π°Π΅ΠΌ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ вставки, Ρ‡Ρ‚ΠΎ запись ΠΌΡ‹ Π²Π΅Π΄Π΅ΠΌ Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€, ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ выполняСм Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅.
  • РаспрСдСляСм Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.
  • ВсС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ. ΠœΡ‹ ΠΌΠΎΠ»ΠΎΠ΄Ρ†Ρ‹.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

И ΠΊΠ°ΠΊ это ситуация выглядит? ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π° этих Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ… я Π΅Ρ‰Π΅ для Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ относятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠœΠ°ΡΡ‚Π΅Ρ€-сСрвСру.

Π’Π°Π±Π»ΠΈΡ‡ΠΊΠ° с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Ρƒ мСня подросла. Π˜Ρ… стало большС. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ срСднСС врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ транзакция, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 2 часа. Π’ΠΈΠ΄ΠΈΠΌ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ строчки. И всС Ρƒ нас Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΠΎ испытуСмой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ‚Π°ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ остатки Π½Π° счСтах. И Ρƒ нас Ρ‚ΠΎΠΆΠ΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ запросу, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов. ВсС Ρƒ нас Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ВсС Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΠΊΠ° Ρƒ нас эти ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΎΡ‚ΡΡ‚Ρ€Π΅Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρƒ с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ. И ΠΎΡ‚ΡΡ‚Ρ€Π΅Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ с постоянной ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠœΡ‹ Π»Π΅Π·Π΅ΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это происходит. И Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ – ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΎΡ‚Ρ‡Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 3 часа. Π‘Ρ‚Π°Π²ΠΈΠΌ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ – 3 часа. ЗапускаСм всС, Π½ΠΎ Ρƒ нас всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡ‚ΡΡ‚Ρ€Π΅Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ нас всС Π±Ρ‹Π»ΠΎ идСально. Π›Π΅Π·Π΅ΠΌ дальшС. И Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΊΠ»Π°ΡΡΠ½ΡƒΡŽ настройку – hot_standby_feedback. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π΅Π³ΠΎ. Hot_standby_feedback позволяСт Π½Π°ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌΠ° Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€Π΅. Π’Π΅ΠΌ самым ΠΌΡ‹ совсСм избавляСмся ΠΎΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. И нас всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

А Ρ‡Ρ‚ΠΎ Π² это врСмя Ρƒ нас происходит с ΠœΠ°ΡΡ‚Π΅Ρ€-сСрвСром? А с ΠœΠ°ΡΡ‚Π΅Ρ€-сСрвСром Ρƒ нас происходит Ρ‚ΠΎΡ‚Π°Π»ΡŒΠ½Π°Ρ Π±Π΅Π΄Π°. БСйчас ΠΌΡ‹ наблюдаСм Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° я Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ» ΠΎΠ±Π΅ эти настройки. И ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ сСссия Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅ Ρƒ нас ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ стала Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€-сСрвСрС. Она Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ влияСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° приостановила Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Ρ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ строки. Π£ нас Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ снова скакнул Π² нСбСса. Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя выполнСния запросов ΠΏΠΎ всСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠΆΠ΅ скакнуло Π² нСбСса. Автовакуумы Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄Π½Π°ΠΏΡ€ΡΠ³Π»ΠΈΡΡŒ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΠΎ нашСй Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ Π½Π΅ΠΉ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠΆΠ΅ скакнуло Π² нСбСса. ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов процСссора Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ сильно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ. ΠœΡ‹ снова ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ большоС количСство ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Ρ… бСсполСзных строчСк. И врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ этой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅, количСство Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΡƒΠΏΠ°Π»ΠΎ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Как это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, Ссли ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΎ Ρ‡Π΅ΠΌ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Π΄ΠΎ этого?

  • ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Если ΠΌΡ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ части, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ Π»Π΅Π·Π΅ΠΌ Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρƒ нас Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€Π΅. ΠšΠΎΠ»Π±Π°ΡΠΈΡ‚ Π΅Π³ΠΎ. Он грССтся, Ρƒ Π½Π΅Π³ΠΎ Load Average ΠΏΠΎΠ΄ ΡΠΎΡ‚Π½ΡŽ.
  • Запросы Ρ‚Π°ΠΌ тормозят, Π½ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΌ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. И Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Π² Ρ‡Π΅ΠΌ Π΄Π΅Π»ΠΎ. НС ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ сСрвСрноС ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρƒ нас развалился raid. ΠœΠΎΠΆΠ΅Ρ‚ Ρƒ нас сгорСла ΠΏΠ»Π°Π½ΠΊΠ° памяти. Π”Π° Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ. Но Π½Π΅Ρ‚, сСрвСра Π½ΠΎΠ²Ρ‹Π΅, всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ.
  • Π‘Π΅Π³Π°ΡŽΡ‚ всС: администраторы, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€. НичСго Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚.
  • И Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ всС Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ само Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

На Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅ Ρƒ нас Π² это врСмя запрос ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ ΡƒΡˆΠ΅Π». ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚. БизнСс всС Π΅Ρ‰Π΅ Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ. Как Π²ΠΈΠ΄ΠΈΠΌ, Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° Ρƒ нас выросла снова ΠΈ Π½Π΅ собираСтся ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ. На Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ с сСссиями я оставил кусочСк Π²ΠΎΡ‚ этой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, насколько Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚, ΠΏΠΎΠΊΠ° ситуация стабилизируСтся.

БСссия ΡƒΡˆΠ»Π°. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя сСрвСр ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Π² порядок. И срСднСС врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ запросам Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€-сСрвСрС ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π½ΠΎΡ€ΠΌΡƒ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ, Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡ‰Π°Ρ‚ΡŒ, ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ эти ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ строчки. И ΠΎΠ½ Π½Π°Ρ‡Π°Π» Π΄Π΅Π»Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. И насколько быстро ΠΎΠ½ Π΅Π΅ Π΄Π΅Π»Π°Π΅Ρ‚, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ быстро ΠΌΡ‹ ΠΏΡ€ΠΈΠ΄Π΅ΠΌ Π² порядок.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

По испытуСмой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅, Π³Π΄Π΅ ΠΌΡ‹ обновляСм остатки ΠΏΠΎ счСтам, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя обновлСния счСта Ρ‚ΠΎΠΆΠ΅ нормализуСтся постСпСнно. РСсурсы, потрСбляСмыС процСссором, Ρ‚ΠΎΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ΡΡ. И количСство Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² сСкунду возвращаСтся Π² Π½ΠΎΡ€ΠΌΡƒ. Но снова Π² Π½ΠΎΡ€ΠΌΡƒ Π½Π΅ Π² Ρ‚Π°ΠΊΡƒΡŽ, ΠΊΠ°ΠΊ Π±Ρ‹Π»Π° Ρƒ нас Π΄ΠΎ Π°Π²Π°Ρ€ΠΈΠΈ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠœΡ‹ Π² любом случаС ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ просадку ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π°-Π΄Π²Π° Ρ€Π°Π·Π°, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ большС.

ΠœΡ‹ Π²Ρ€ΠΎΠ΄Π΅ сдСлали всС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. РаспрСдСли Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ простаиваСт. По ΡƒΠΌΡƒ Ρ€Π°Π·Π±ΠΈΠ»ΠΈ запросы, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ всС ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

  • НС Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ hot_standby_feedback? Π”Π°, Π΅Π³ΠΎ Π±Π΅Π· особо ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π½Π΅ рСкомСндуСтся Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ эта ΠΊΡ€ΡƒΡ‚ΠΈΠ»ΠΊΠ° нСпосрСдствСнно влияСт Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€-сСрвСр ΠΈ приостанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌΠ° Ρ‚Π°ΠΌ. Π’ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π΅Π³ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅ ΠΈ Π·Π°Π±Ρ‹Π² ΠΏΡ€ΠΎ это, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±ΠΈΡ‚ΡŒ ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
  • Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ max_standby_streaming_delay? Π”Π°, для ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² – это Ρ‚Π°ΠΊ. Если Ρƒ вас трСхчасовой ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΈ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρƒ вас ΠΏΠ°Π΄Π°Π» ΠΈΠ·-Π·Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Ρ‚ΠΎ просто ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΈ Π² Π±Π°Π·Ρƒ прямо сСйчас. Если ΠΎΠ½ Ρƒ вас трСхчасовой, Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Ρ‹ Π΅Π³ΠΎ запускаСтС Π·Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ старый ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ…. И Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€ΠΈ часа Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΡˆΠ΅ΡΡ‚ΡŒ часов Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ – Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ Π½Π΅ сыграСт, Π½ΠΎ Π·Π°Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΈ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ….
  • ЕстСствСнно, Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сСссии Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ…, особСнно, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ hot_standby_feedback Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π”Π°Π»ΠΈ эту Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ потСстировал запросы. Он написал ΡΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ запрос. Запустил ΠΈ ΡƒΡˆΠ΅Π» ΠΏΠΈΡ‚ΡŒ Ρ‡Π°ΠΉ, Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ слоТившийся ΠœΠ°ΡΡ‚Π΅Ρ€. Или ΠΌΡ‹ Ρ‚ΡƒΠ΄Π° пустили Π½Π΅ Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΈΡ‚ΡƒΠ°Ρ†ΠΈΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅. БСссии Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€Π΅.
  • И Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ быстрыС ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ запросы ΠΏΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ, Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π»ΡƒΡ‡ΡˆΠ΅ для распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΈΡ…. Π­Ρ‚ΠΎ ссылочка ΠΊ streaming_delay. Для быстрых ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ с нСбольшой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Для Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов ΠΎΡ‚Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡ‚Π°Π²Π°Ρ‚ΡŒ Π½Π° 6 часов, Π½Π° сутки. Π­Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ ситуация.

УстраняСм послСдствия всС Ρ‚Π΅ΠΌ ΠΆΠ΅ способом:

  • Находим Ρ€Π°Π·Π΄ΡƒΡ‚Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  • И сТимаСм Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ инструмСнтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ вторая Π½Π° этом Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ истории Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π’ΠΎΠΆΠ΅ довольно обычная для нас, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

  • Π›ΡŽΠ±ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ растСт. ΠœΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ Π½Π΅ΠΌΡƒ трСбования. ΠœΡ‹ Π² любом случаС Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ. И Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ Π°ΠΏΠ΄Π΅ΠΉΡ‚ Π² ΠΏΠ»Π°Π½Π΅ нашСй ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ внСдряСм Π² Ρ€Π°ΠΌΠΊΠ°Ρ… нашСго развития.
  • Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ устраиваСт. Допустим, ΠΌΡ‹ сСйчас обратимся ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅, Π³Π΄Π΅ Ρƒ мСня ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ этим счСтам. И, допустим, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π² рублях, Π° ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΏΠ΅ΠΉΠΊΠ°Ρ…. И для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°ΠΏΠ΄Π΅ΠΉΡ‚: ΠΏΠΎΠ»Π΅ с суммой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° сто.
  • Π’ соврСмСнном ΠΌΠΈΡ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСдства контроля вСрсий Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Допустим, Liquibase. ΠŸΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ Ρ‚ΡƒΠ΄Π° Π½Π°ΡˆΡƒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ. ВСстируСм Π΅Π΅ Π½Π° нашСй тСстовой Π±Π°Π·Π΅. ВсС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ. АпдСйт ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚. Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Π½ΠΎ Π·Π°Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. И ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π° этом. ВсС оттСстировали, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ. ВсС ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΈ.
  • ΠŸΡ€ΠΎΠ²Π΅Π»ΠΈ ΠΏΠ»Π°Π½ΠΎΠ²Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π’ΠΎΡ‚ миграция с Π°ΠΏΠ΄Π΅ΠΉΡ‚ΠΎΠΌ прСдставлСна ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ это Ρƒ мСня ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ счСтам, Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° Π±Ρ‹Π»Π° Π² 15 GB. И Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ обновляСм ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строчку, ΠΌΡ‹ Π°ΠΏΠ΄Π΅ΠΉΡ‚ΠΎΠΌ Ρ€Π°Π·Π΄ΡƒΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΡƒ Π² Π΄Π²Π° Ρ€Π°Π·Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пСрСзаписали ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строчку.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π’ΠΎ врСмя ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ с этой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС запросы ΠΊ Π½Π΅ΠΉ встали Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ ΠΆΠ΄Π°Π»ΠΈ, ΠΏΠΎΠΊΠ° закончится этот Π°ΠΏΠ΄Π΅ΠΉΡ‚. Но Ρ‚ΡƒΡ‚ я Ρ…ΠΎΡ‡Ρƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ†ΠΈΡ„Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ оси. Π’. Π΅. ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ срСднСС врСмя запроса Π΄ΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ€Π°ΠΉΠΎΠ½Π΅ 5 миллисСкунд ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° процСссор, количСство Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ памяти диска мСньшС, Ρ‡Π΅ΠΌ Π² 7,5.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

ΠŸΡ€ΠΎΠ²Π΅Π»ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ снова ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½ΠΎ:

  • Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» стал Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ дольшС.
  • Π’Π°Π±Π»ΠΈΡ†Π° снова выросла Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ….
  • Нагрузка Π½Π° сСрвСр снова стала большС, Ρ‡Π΅ΠΌ Π±Ρ‹Π»Π°.
  • И, СстСствСнно, ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ возимся с Ρ‚Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΌΡ‹ Π΅Π³ΠΎ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΈ.

И это снова bloat, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ снова ΠΏΠΎΡ€Ρ‚ΠΈΡ‚ Тизнь.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Π’ΡƒΡ‚ я Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ, Ρ‡Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… случаях, Π½Π΅ собираСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ. БрСдняя Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠΎ сСрвСру Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ адСкватная.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

А Ссли ΠΌΡ‹ обратимся ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ со счСтами, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ срСднСС врСмя запроса Ρƒ нас выросло Π² Π΄Π²Π° Ρ€Π°Π·Π° ΠΊ этой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅. Нагрузка Π½Π° процСссор ΠΈ количСство ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Ρ… строчСк Π² памяти скакнуло Π²Ρ‹ΡˆΠ΅ 7,5, Π° Π±Ρ‹Π»ΠΎ Π½ΠΈΠΆΠ΅. И скакнуло Π² случаС процСссоров Π² 2 Ρ€Π°Π·Π°, Π² случаС Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² 1,5 Ρ€Π°Π·Π°, Ρ‚. Π΅. ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сСрвСра. И ΠΊΠ°ΠΊ слСдствиС – Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ нашСго прилоТСния. ΠŸΡ€ΠΈ этом количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

И Ρ‚ΡƒΡ‚ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ. А ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ. ΠœΡ‹ довольно постоянно Π΄Π΅Π»Π°Π΅ΠΌ эти ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.

  • Π’Π°ΠΊΠΈΠ΅ большиС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ автоматичСски. Они всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅.
  • НСобходим ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ со стороны Π·Π½Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Если Ρƒ вас Π΅ΡΡ‚ΡŒ DBA Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Ρ‚ΠΎ пускай это Π΄Π΅Π»Π°Π΅Ρ‚ DBA. Π­Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°. Если Π½Π΅Ρ‚, Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΡƒΡΡ‚ΡŒ это Π΄Π΅Π»Π°Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • Новая схСма Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π°ΠΆΠ΅ Π² случаС, Ссли ΠΌΡ‹ обновляСм ΠΎΠ΄ΠΈΠ½ столбСц, ΠΌΡ‹ всСгда ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ этапами, Ρ‚. Π΅. Π·Π°Ρ€Π°Π½Π΅Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ выкатится новая вСрсия прилоТСния:
  • Π”ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ поля, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.
  • ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· старого поля Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ нСбольшими частями. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ это Π΄Π΅Π»Π°Π΅ΠΌ? Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ всСгда ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌ процСсс этого процСсса. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пСрСнСсли ΡƒΠΆΠ΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‚ΠΎ Π±Π°Ρ‚Ρ‡Π΅ΠΉ ΠΈ Π½Π°ΠΌ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‚ΠΎ.
  • А Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ эффСкт Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ‚Π°ΠΊΠΈΠΌ Π±Π°Ρ‚Ρ‡Π΅ΠΌ ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΈ это Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌΡƒ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅, ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ строчки ΠΊ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ.
  • Для строчСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния (Ρƒ нас Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ староС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) добавляСм Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСт Π½ΠΎΠ²Ρ‹Π΅ значСния Π² Π½ΠΎΠ²Ρ‹Π΅ поля. Π’ нашСм случаС – это ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΈΠ΅ Π½Π° сто старого значСния.
  • Если ΠΌΡ‹ совсСм ΡƒΠΏΠ΅Ρ€Ρ‚Ρ‹Π΅ ΠΈ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΏΠΎΠ»Π΅, Ρ‚ΠΎ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ всСх ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΊΠ°Ρ‚ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ вСрсии прилоТСния, ΠΌΡ‹ просто ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ поля. Π‘Ρ‚Π°Ρ€Ρ‹Π΅ Π² ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π° Π½ΠΎΠ²Ρ‹Π΅ поля ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ Π² старыС.
  • И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого запускаСм Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ прилоТСния.

И ΠΏΡ€ΠΈ этом ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ bloat ΠΈ Π½Π΅ просядСм ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

На этом Ρ‚Ρ€Π΅Ρ‚ΡŒΡ история Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat.sql

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat_approx.sql

И сСйчас Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± инструмСнтах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Π² самой ΠΏΠ΅Ρ€Π²ΠΎΠΉ истории.

Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°Ρ‚ΡŒ bloat, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ pgstattuple.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ запросы, ΠΌΡ‹ Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ ΡƒΠΆΠ΅ написали эти запросы. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΡƒΡ‚ прСдставлСно Π΄Π²Π° запросы.

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ довольно Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Π·Π°Ρ‚ΠΎ ΠΎΠ½ Π²Π°ΠΌ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ значСния bloat ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ побыстрСС ΠΈ ΠΎΡ‡Π΅Π½ΡŒ эффСктивСн, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ быстро ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ – Π΅ΡΡ‚ΡŒ bloat ΠΈΠ»ΠΈ Π½Π΅Ρ‚ bloat ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. И Π΅Ρ‰Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ bloat Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Postgres Π΅ΡΡ‚ΡŒ всСгда. Π­Ρ‚ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ MVCC.
  • И 20 % bloat – это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ для Ρ‚Π°Π±Π»ΠΈΡ† Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв. Π’. Π΅. Π²Π°ΠΌ Π½Π΅ стоит ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

Как Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ нас распухли, ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° распухли бСсполСзными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ bloat:

  • Если Ρƒ нас нСбольшая Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ диски, Ρ‚. Π΅. Π½Π° Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ Π΄ΠΎ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ VACUUM FULL. Π’ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ ΠΎΠ½ Ρƒ вас Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π½Π° нСсколько сСкунд ΠΈ Π»Π°Π΄Π½ΠΎ, Π·Π°Ρ‚ΠΎ быстро ΠΈ ТСстко всС сдСлаСт. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ VACUUM FULL? Он Π±Π΅Ρ€Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΈΠ· старых Ρ‚Π°Π±Π»ΠΈΡ† пСрСписываСт ΠΆΠΈΠ²Ρ‹Π΅ строки Π² Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. И Π² ΠΊΠΎΠ½Ρ†Π΅ подмСняСт ΠΈΡ… мСстами. Π‘Ρ‚Π°Ρ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ удаляСт, Π½ΠΎΠ²Ρ‹Π΅ подставляСт вмСсто старых. Но Π½Π° врСмя своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ½ Π±Π΅Ρ€Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ с этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ смоТСтС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ: Π½ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π΅Π΅, Π½ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π½Π΅Π΅, Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅. И VACUUM FULL Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ мСсто Π½Π° дискС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.
  • Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ инструмСнт pg_repack. По своСму ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° VACUUM FULL, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ пСрСписываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· старых Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π½ΠΎΠ²Ρ‹Π΅ ΠΈ подмСняСт ΠΈΡ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Но ΠΏΡ€ΠΈ этом Π½Π΅ Π±Π΅Ρ€Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² самого Π½Π°Ρ‡Π°Π»Π° своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Π±Π΅Ρ€Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Ρƒ Π½Π΅Π³ΠΎ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΈΠΊΠΈ. ВрСбования ΠΏΠΎ дисковым рСсурсам Ρƒ Π½Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ°ΠΊ Ρƒ VACUUM FULL. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ мСсто Π½Π° дискС, Π° это ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ, Ссли Ρƒ вас Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. И ΠΎΠ½ довольно ΠΏΡ€ΠΎΠΆΠΎΡ€Π»ΠΈΠ² ΠΏΠΎ процСссору, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Π΅Π΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ.
  • Π’Ρ€Π΅Ρ‚ΡŒΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° – это pgcompacttable. Она Π±ΠΎΠ»Π΅Π΅ Π±Π΅Ρ€Π΅ΠΆΠ½ΠΎ относится ΠΊ рСсурсам, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ. Основная ΡΡƒΡ‚ΡŒ Ρƒ pgcompacttable Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°ΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ пСрСносит всС ΠΆΠΈΠ²Ρ‹Π΅ строки Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. И ΠΏΠΎΡ‚ΠΎΠΌ запускаСт Π²Π°ΠΊΡƒΡƒΠΌ ΠΏΠΎ этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΆΠΈΠ²Ρ‹Π΅, Π° Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ строки. И Π²Π°ΠΊΡƒΡƒΠΌ ΡƒΠΆΠ΅ сам ΠΎΡ‚Ρ€Π΅Π·Π°Π΅Ρ‚ этот хвостик, Ρ‚. Π΅. Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ дискового пространства ΠΎΠ½ Π½Π΅ сильно Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚. И ΠΏΡ€ΠΈ этом Π΅Π³ΠΎ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ рСсурсам ΡƒΠΆΠΈΠΌΠ°Ρ‚ΡŒ.

Π‘ инструмСнтами всС.

Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ bloat Π² postgresql. АндрСй Бальников

Если Π²Π°ΠΌ Ρ‚Π΅ΠΌΠ° с bloat покаТСтся интСрСсной Π² ΠΏΠ»Π°Π½Π΅ ΠΏΠΎΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ дальшС Π²ΠΎΠ²Π½ΡƒΡ‚Ρ€ΡŒ, Ρ‚ΠΎ Π²ΠΎΡ‚ Π²Π°ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки:

  • https://www.slideshare.net/alexius2Mb/where-is-the-space-postgres – это Π΄ΠΎΠΊΠ»Π°Π΄ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ. Он ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΡƒΠ΄Π° дСваСтся мСсто Ρƒ Postgres Π² процСссС Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΆΠΈΠ·Π½ΠΈ. И Ρ‚Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ большой ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ кусок тСхничСский для администраторов Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ bloat.
  • https://github.com/dataegret/pg-utils – это ссылка Π½Π° наш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π³Π΄Π΅ ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ ΠΊΡƒΡ‡Ρƒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… скриптов Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ состояния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ скрипты ΠΏΠΎ поиску bloat.
  • Π’Ρ€Π΅Ρ‚ΡŒΡ ΠΈ чСтвСртая ссылки Π½Π° инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΆΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ.
  • http://blog.dataegret.com/2Mb018/03/postgresql-bloatbusters.html – это пост ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ. Π’Π°ΠΌ ΠΎΠ½ довольно ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ тСхничСски Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ bloat ΠΈΠΌΠ΅Π½Π½ΠΎ ΡƒΠΆΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π»ΠΈΠ·ΠΊΠΎΠΌΡƒ ΠΊ администраторам.

Π― Ρ‚ΡƒΡ‚ большС постарался ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°ΡˆΠΈΠ»ΠΊΡƒ для Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ€ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСпосрСдствСнными нашими ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊ Ρ‡Π΅ΠΌΡƒ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ дСйствия Π²Π΅Π΄ΡƒΡ‚. НадСюсь Ρƒ мСня это ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!

Вопросы

Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! Π’Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. А ΠΊΠ°ΠΊ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ? Π’. Π΅. Ρƒ мСня Π±Ρ‹Π»Π° ситуация, ΠΊΠΎΠ³Π΄Π° запросы висСли Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ внСшним сСрвисам. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ просто ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄ΠΈΠΊΠΈΠ΅ joins. Π‘Ρ‹Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ малюсСнькиС запросы Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сутки висСли, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΅Ρ€ΡƒΠ½Π΄Ρƒ. Π’. Π΅. ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ описываСтС. Как это ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ? Π‘ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ постоянно ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ запрос завис? Как ΠΌΠΎΠΆΠ½ΠΎ это ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ?

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС – это Π·Π°Π΄Π°Ρ‡Π° для администраторов вашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для DBA.

Π― администратор.

Π’ PostgreSQL Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ прСдставлСниС, ΠΊΠ°ΠΊ pg_stat_activity, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ висящиС запросы. И Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, насколько Π΄ΠΎΠ»Π³ΠΎ ΠΎΠ½ Ρ‚Π°ΠΌ висит.

Π― Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 5 ΠΌΠΈΠ½ΡƒΡ‚ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ?

НастройтС cron ΠΈ провСряйтС. Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос, ΠΏΠΈΡˆΠΈΡ‚Π΅ письмо ΠΈ всС. Π’. Π΅. Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π³Π»Π°Π·Π°ΠΌΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, это ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π°ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ письмо, Π²Ρ‹ Π½Π° Π½Π΅Π³ΠΎ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚Π΅. А ΠΌΠΎΠΆΠ΅Ρ‚Π΅ автоматичСски ΠΎΡ‚ΡΡ‚Ρ€Π΅Π»ΠΈΠ²Π°Ρ‚ΡŒ.

Π•ΡΡ‚ΡŒ явныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это происходит?

Π― Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСчислил. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. И Ρ‚Π°ΠΌ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ Π½Π°Π΄ΠΎΠ»Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ.

Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! ΠŸΡ€ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ pg_repack Ρ…ΠΎΡ‚Π΅Π» ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ. Если ΠΎΠ½Π° Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, то…

Она Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ.

… Ρ‚ΠΎ я ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. МоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² это врСмя?

НСт, ΠΎΠ½ΠΎ спокойно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, Ρ‚. Π΅. pg_repack пСрСносит сначала всС ΠΆΠΈΠ²Ρ‹Π΅ строчки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ. ЕстСствСнно, Ρ‚Π°ΠΌ какая-Ρ‚ΠΎ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ происходит. Он просто этот хвостик Π΄ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚.

Π’. Π΅. ΠΎΠ½ Π² ΠΊΠΎΠ½Ρ†Π΅ всС-Ρ‚Π°ΠΊΠΈ Π΄Π΅Π»Π°Π΅Ρ‚?

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΎΠ½ Π±Π΅Ρ€Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами эти Ρ„Π°ΠΉΠ»Ρ‹.

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ VACUUM FULL?

VACUUM FULL, ΠΊΠ°ΠΊ стартанул, сразу взял ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. И ΠΏΠΎΠΊΠ° ΠΎΠ½ всС Π½Π΅ сдСлаСт, ΠΎΠ½ Π΅Π΅ Π½Π΅ отпустит. А pg_repack Π±Π΅Ρ€Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ Ρ‚ΡƒΠ΄Π° Π½Π΅ Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅, Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ, всС Π±ΡƒΠ΄Π΅Ρ‚ Π² порядкС.

ЗдравствуйтС! Π’Ρ‹ рассказывали ΠΏΡ€ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌΠ°. Π’Π°ΠΌ Π±Ρ‹Π» Π³Ρ€Π°Ρ„ΠΈΠΊ с красными, ΠΆΠ΅Π»Ρ‚Ρ‹ΠΌΠΈ ΠΈ Π·Π΅Π»Π΅Π½Ρ‹ΠΌΠΈ ячСйками записи. Π’. Π΅. ΠΆΠ΅Π»Ρ‚Ρ‹Π΅ – ΠΎΠ½ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ» ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅. И Π² слСдствиС Π² Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅?

Π”Π°. Postgres Π½Π΅ удаляСт строчки. Π£ Π½Π΅Π³ΠΎ такая спСцифика. Если ΠΌΡ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ строчку, ΠΌΡ‹ ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ. Π’Π°ΠΌ встаСт id Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» эту строчку, ΠΈ записываСм Π½ΠΎΠ²ΡƒΡŽ строчку. И Ρƒ нас Π΅ΡΡ‚ΡŒ сСссии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡ… Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ совсСм старыми становятся. И ΡΡƒΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ пробСгаСтся ΠΏΠΎ этим строчкам ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅. И Ρ‚ΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π― понял. Но вопрос Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ Π½Π΅ ΠΎΠ± этом. Π― Π½Π΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ». ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π°. Π’ Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ поля ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. И Ссли я ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΡΡ‚Π°Ρ€ΡƒΡŽ ячСйку просто Π½Π΅ Π²Π»Π΅Π·Ρ‚ΡŒ.

НСт, Ρ‚Π°ΠΌ Π² любом случаС вся строчка обновляСтся. Π’ Postgres Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ хранСния Π΄Π°Π½Π½Ρ‹Ρ…. Он Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Π•ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся нСпосрСдствСнно Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π° Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ tos-Π΄Π°Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ большиС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: тСкст, json. Они хранятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ°Ρ…. И ΠΏΠΎ этим Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ°ΠΌ происходит Ρ‚Π° ΠΆΠ΅ история с bloat, Ρ‚. Π΅. всС Ρ‚ΠΎΠΆΠ΅ самоС. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΈ вынСсСны.

Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! Насколько ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ограничСния Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросы statement timeout?

ΠžΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. ΠœΡ‹ Π²Π΅Π·Π΄Π΅ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ. И Ρ‚. ΠΊ. Ρƒ нас своих сСрвисов Π½Π΅Ρ‚, ΠΌΡ‹ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Ρ‚ΠΎ довольно Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π΅ΡΡ‚ΡŒ. И всСх Π²ΠΏΠΎΠ»Π½Π΅ удовлСтворяСт это. Π’. Π΅. Ρƒ нас Π΅ΡΡ‚ΡŒ задания Π² cron, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚. ΠŸΡ€ΠΎΡΡ‚ΠΎ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ оговариваСтся Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСссий, Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΈΠ±ΠΈΠ²Π°Π΅ΠΌ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚Π°, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 10 ΠΌΠΈΠ½ΡƒΡ‚. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π±Π°Π·Ρƒ ΠΈ Π΅Π΅ Ρ†Π΅Π»ΠΈ. Но Ρƒ всСх ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ pg_stat_activity.

Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! ΠŸΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ваш Π΄ΠΎΠΊΠ»Π°Π΄ ΠΊ своим прилоТСниям. И Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΌΡ‹ Π²Π΅Π·Π΄Π΅ стартуСм Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Π²Π΅Π·Π΄Π΅ явно Π΅Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ. Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ exception, Ρ‚ΠΎ всС Ρ€Π°Π²Π½ΠΎ rollback происходит. И Ρ‚ΡƒΡ‚ я задумался. Π’Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ транзакция ΡΡ‚Π°Ρ€Ρ‚Π°Π½ΡƒΡ‚ΡŒ Π½Π΅ явно. Π­Ρ‚ΠΎ подсказка Π΄Π΅Π²ΡƒΡˆΠΊΠ΅, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅. Если я просто дСлаю ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ записи, транзакция стартанСт Π² PostgreSQL ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΎΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ соСдинСния?

Если Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ сСйчас ΠΎΠ± ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния, Ρ‚ΠΎ это зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ORM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π’Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ настроСк. Если Ρƒ вас Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ auto commit on, Ρ‚ΠΎ Ρ‚Π°ΠΌ стартуСт транзакция, Ρ‚ΡƒΡ‚ ΠΆΠ΅ закрываСтся.

Π’. Π΅. закрываСтся ΠΎΠ½Π° сразу послС Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°?

Π­Ρ‚ΠΎ зависит ΠΎΡ‚ настроСк. ΠžΠ΄Π½Ρƒ настройку я Π½Π°Π·Π²Π°Π». Π­Ρ‚ΠΎ auto commit on. Она довольно распространСнная. Если ΠΎΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π°ΡΡŒ-Π·Π°ΠΊΡ€Ρ‹Π»Π°ΡΡŒ транзакция. Если Π²Ρ‹ явно Π½Π΅ сказали Β«start transactionΒ» ΠΈ Β«end transactionΒ», Π° просто запустили Π² сСссию запрос.

ЗдравствуйтС! Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π±Π°Π·Π°, которая ΠΏΡƒΡ…Π½Π΅Ρ‚-ΠΏΡƒΡ…Π½Π΅Ρ‚ ΠΈ Ρ‚ΡƒΡ‚ Π½Π° сСрвСрС кончаСтся мСсто. Π•ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ инструмСнты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ?

ΠœΠ΅ΡΡ‚ΠΎ Π½Π° сСрвСрС ΠΏΠΎ-Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ.

НапримСр, DBA пошСл ΠΏΠΈΡ‚ΡŒ Ρ‡Π°ΠΉ, Π±Ρ‹Π» Π½Π° ΠΊΡƒΡ€ΠΎΡ€Ρ‚Π΅ ΠΈ Ρ‚. Π΄.

Когда создаСтся файловая систСма, Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ мСсто создаСтся, ΠΊΡƒΠ΄Π° Π½Π΅ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅.

А Ссли совсСм под ноль?

Π’Π°ΠΌ Ρ‚Π°ΠΊ ΠΈ называСтся reserved space, Ρ‚. Π΅. Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько большим Π΅Π³ΠΎ создали, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ свободноС мСсто. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ я Π½Π΅ знаю, сколько Ρ‚Π°ΠΌ. А Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС – Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ диски, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ вас Π±Ρ‹Π»ΠΎ мСсто провСсти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ. МоТно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, которая Π²Π°ΠΌ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Π°.

Π”Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов Π½Π΅Ρ‚?

Π­Ρ‚ΠΎ всСгда ручная Ρ€Π°Π±ΠΎΡ‚Π°. И ΠΏΠΎ мСсту выявляСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅, Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅. И для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΈ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ с Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, это зависит ΠΎΡ‚ бизнСса. ВсСгда ΠΏΠΎ мСсту Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ.

Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! Π£ мСня Π΄Π²Π° вопроса. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ дСмонстрировали слайды, Π³Π΄Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π² случаС Π·Π°Π²ΠΈΡΡˆΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ растСт ΠΊΠ°ΠΊ ΠΈ объСм Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ пространства, Ρ‚Π°ΠΊ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ индСкса. И дальшС ΠΏΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Ρƒ Π±Ρ‹Π»Π° ΠΊΡƒΡ‡Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°ΠΊΡƒΡŽΡ‚ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΡƒ. А Ρ‡Ρ‚ΠΎ с индСксом?

Они Ρ‚ΠΎΠΆΠ΅ ΠΏΠ°ΠΊΡƒΡŽΡ‚ ΠΈΡ….

Но Π²Π°ΠΊΡƒΡƒΠΌ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ индСкс?

НСкоторыС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с индСксом. НапримСр, pg_rapack, pgcompacttable. Π’Π°ΠΊΡƒΡƒΠΌ пСрСсоздаСт индСксы, Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ…. Π£ VACUUM FULL ΡΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‚. Π΅. ΠΎΠ½ со всСми Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

И Π²Ρ‚ΠΎΡ€ΠΎΠΉ вопрос. Π― Π½Π΅ понял, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ… Ρ‚Π°ΠΊ сильно зависят ΠΎΡ‚ самой Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. МнС казалось, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ – это Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π° рСпликация – это запись.

Π’ Ρ‡Π΅ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ? Π£ нас Π΅ΡΡ‚ΡŒ ΠœΠ°ΡΡ‚Π΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходят процСссы. Π£ нас происходит Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ. Автовакуум ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚? Он Π²Ρ‹ΠΏΠΈΠ»ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ старыС строчки. Если Ρƒ нас Π² это врСмя Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅ ΠΈΠ΄Π΅Ρ‚ запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ эти старыС строчки, Π° Π½Π° ΠœΠ°ΡΡ‚Π΅Ρ€Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ситуация, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ» эти строчки ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ для пСрСзаписи, Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡ… пСрСзаписали. И Ρƒ нас ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π΅ строчки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ запросу Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅, Ρ‚ΠΎ процСсс Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ‚Π°ΠΉΠΌ Π°ΡƒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ настроили. И ΠΏΠΎΡ‚ΠΎΠΌ PostgreSQL Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½Π΅Π΅ для Π½Π΅Π³ΠΎ. А рСпликация для Π½Π΅Π³ΠΎ Π²Π°ΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ запрос ΠΈ ΠΎΠ½ отстрСлит запрос, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эти измСнСния Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅.

АндрСй, Π΅ΡΡ‚ΡŒ вопрос. Π’ΠΎΡ‚ эти Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π²ΠΎ врСмя ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ вашСй ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹? Π§Π΅ΠΌ строили Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ?

Π­Ρ‚ΠΎ сСрвис Okmeter.

Π­Ρ‚ΠΎ коммСрчСский ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚?

Π”Π°. Π­Ρ‚ΠΎ коммСрчСский ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com