Π Π°Π·ΡΠΈΡΡΠΎΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΏΡΠ΅Π· 2015 Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΠΠ»Π΅ΠΊΡΠ΅ΠΉ ΠΠ΅ΡΠΎΠ²ΡΠΊΠΈ "ΠΡΠ»Π±ΠΎΡΠΈΠ½Π΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π½Π° PostgreSQL"
ΠΡΠΊΠ°Π· ΠΎΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ ΠΎΡ Π°Π²ΡΠΎΡΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°: Π©Π΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°, ΡΠ΅ ΡΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ Π΅ Π΄Π°ΡΠΈΡΠ°Π½ ΠΎΡ Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ 2015 Π³ΠΎΠ΄ΠΈΠ½Π° β ΠΈΠ·ΠΌΠΈΠ½Π°Π»ΠΈ ΡΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 4 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ΅ΡΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΡΡΠΎ ΡΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π° 9.4 Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°. ΠΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 4 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈΠ·Π»ΡΠ·ΠΎΡ Π° 5 Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΡ Π° ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° ΠΈ ΡΠ°ΡΡ ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ ΡΠ° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ ΠΈ Π½Π΅Π°ΠΊΡΡΠ°Π»Π½ΠΈ. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ° ΡΠ΅Π·ΠΈ ΠΌΠ΅ΡΡΠ°, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π±Π»ΡΠΆΠ΄Π°Π²Π°ΠΌ ΡΠΈΡΠ°ΡΠ΅Π»Ρ. ΠΠ΅ ΡΠ΅ Π·Π°Π΅Ρ Π΄Π° ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ° ΡΠ΅Π·ΠΈ ΡΠ°ΡΡΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΡΡΠ²ΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π΄ΠΎΠΊΠ»Π°Π΄.
Π‘Π£ΠΠ PostgreSQL Π΅ ΠΎΠ³ΡΠΎΠΌΠ΅Π½ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ, ΡΡΡΡΠΎΡΡ ΡΠ΅ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ, ΡΠΈΠ΅ΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ ΠΏΡΡΠΊΠΎ Π²Π»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π‘Π£ΠΠ. Π ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠ°ΡΠΈΡ ΡΠ΅ ΡΡΠ±ΠΈΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° PostgreSQL ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ ΠΌΠ΅ΡΠΊΠΈ Π·Π° ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° Π² Π΄ΠΎΡΡΠ° ΠΎΠΏΡΠΎΡΡΠ΅Π½ Π²ΠΈΠ΄. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΡΡΠ»ΠΊΡΠ²Π°Π½Π΅ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»Π½Π° Π·Π°Π΄Π°ΡΠ°, Π° "Π·ΠΎΠΎΠΏΠ°ΡΠΊΡΡ" ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΡΠΈ Π»Π΅ΡΠ½ΠΎ Π±ΠΈ Π·Π°ΡΡΡΠ΄Π½ΠΈΠ» Π΄ΠΎΡΠΈ Π½Π°ΠΏΡΠ΅Π΄Π½Π°Π» DBA.


ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅! ΠΠ· ΡΡΠΌ ΠΠ»Π΅ΠΊΡΠ΅ΠΉ. ΠΠ°ΠΊΡΠΎ ΠΊΠ°Π·Π° ΠΠ»Ρ, Π°Π· ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ Π·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° PostgreSQL.

Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° PostgreSQL. PostgreSQL ΠΈΠΌΠ° Π΄Π²Π΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ. Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ°, Π·Π° ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ°Π²Π° Π΄ΡΠΌΠ°. Π ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅. ΠΠ· ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° PostgreSQL, ΠΊΠΎΡΡΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΈ ΠΊΠ°ΠΊ Π΄Π° Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΠΌΠ΅.
Π©Π΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΠΈΠ»ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ.

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

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

ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ PostgreSQL ΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ "ΡΠ΅ΡΠ½Π° ΠΊΡΡΠΈΡ". Π©Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π½ΡΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ΡΠΎ ΠΏΡΠ°Π²ΡΡ, ΠΈ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΡΡ, Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ. ΠΠΎ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ, ΡΠΎΠ²Π° Π΅ ΡΠ΅ΡΠ½Π° ΠΊΡΡΠΈΡ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π²ΡΡΡΠ΅.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° Π² top, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΡΡΠ΅Π· Π½ΡΠΊΠΎΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π²ΡΡΡΠ΅ Π² PostgreSQL. ΠΠ° ΡΠΎΠ²Π° Π½ΠΈ ΡΡΡΠ±Π²Π°Ρ Π΄ΡΡΠ³ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.

Π ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΉΠΊΠΈ, ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΊΡΠ΄Π΅ ΡΠ΅ Π³ΡΠ±ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ. ΠΠΊΠΎ ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ PostgreSQL ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΡ Π΅ΠΌΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π° Π²ΡΠΏΡΠΎΡΠ° ΠΊΡΠ΄Π΅ ΡΠ΅ Π³ΡΠ±ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ. ΠΠΌΠ° Π΄Π²Π΅ Π½Π΅ΡΠ°: ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΈ ΡΠΎΠ½ΠΎΠ²ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΠΈΡΠΎ PostgreSQL ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ²ΠΎΡΡΠ° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
ΠΠΊΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡ Π³ΠΎΡΠ½ΠΈΡ Π»ΡΠ² ΡΠ³ΡΠ», ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ. ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΈΠ΄Π²Π° ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ ΠΎΡΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ° ΡΠ΅ΡΠΈΡ. ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Ρ Π² ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°. ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡΡ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΠΏΠ»Π°Π½ Π·Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΠ·ΠΏΡΠ°ΡΠ° Π³ΠΎ Π½Π°ΡΠ°ΡΡΠΊ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠΎΡΠ΅ΡΡΡ Π²ΠΊΠ»ΡΡΠ²Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎ-ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΠΎΡ Π΄ΠΈΡΠΊΠΎΠ²Π΅ΡΠ΅ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΠΏΠ΅ΡΠΈΠ°Π»Π½Π° ΠΎΠ±Π»Π°ΡΡ "shared buffers". Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, Π°ΠΊΠΎ ΡΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΠ·ΡΡΠΈΠ²Π°Π½ΠΈΡ, ΡΠ΅ ΡΠΈΠΊΡΠΈΡΠ°Ρ Π² ΠΆΡΡΠ½Π°Π»Π° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅ Π² WAL. ΠΡΠΊΠ°ΠΊΠ²Π° ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π° Π² Π»ΠΎΠ³ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡ Π·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°. Π ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π²ΡΡΡΠ° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²ΡΠΎΡΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Ρ Π½ΠΎΠ²Π° Π·Π°ΡΠ²ΠΊΠ°.
ΠΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Ρ ΡΠΎΠ½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΡΠΎΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ? ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π² Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΡΠ°Π±ΠΎΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ. Π’Π΅Π·ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π°: autovacuum, checkpointer, ΠΏΡΠΎΡΠ΅ΡΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ°, background writer. ΠΡΠ΅ΠΊΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΡΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°.

ΠΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠΌΠ° ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°?
- ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. PostgreSQL 9.4 ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ 109 ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΈΡΠΈ, ΡΡ Π΅ΠΌΠΈ ΠΈΠ»ΠΈ Π±Π°Π·ΠΈ, Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠΎ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ Π±ΡΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠΈ ΠΈΠ»ΠΈ Π±Π°Π·ΠΈ. Π’ΠΎΠ΅ΡΡ, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° ΡΡΠ°Π²Π° ΠΎΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅. Π Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ±ΠΈΡΠ΅ Π² Π½Π΅Ρ.
- Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅, ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° ΡΡΠ΅Π· Π±ΡΠΎΡΡΠΈ. ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π½Π°ΡΠ°ΡΡΠ²Π°ΡΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. Π Π°ΠΊΠΎ ΠΎΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π΅ ΠΌΠΈΠ½Π°Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΌΠΈΠ»ΠΈΠ°ΡΠ΄ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. Π ΡΠ΅ Π½Π΅ Π½ΠΈ ΠΊΠ°Π·Π²Π°Ρ Π½ΠΈΡΠΎ.
- ΠΠΈΠΏΡΠ²Π° ΠΈΡΡΠΎΡΠΈΡ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² ΡΡΠΈΠ², Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π±ΠΈΠ»ΠΎ ΡΠ»ΡΡΠΈΠ»ΠΎ 15-30 ΠΌΠΈΠ½ΡΡΠΈ Π½Π°Π·Π°Π΄. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
- ΠΠΈΠΏΡΠ°ΡΠ° Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π² PostgreSQL Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΡΡΠΈΠ»ΠΈΡΠ°. ΠΡΠΌΠ°Ρ Π½ΠΈΡΠΎ ΡΠ°ΠΊΠΎΠ²Π°. Π’Π΅ ΠΏΡΠΎΡΡΠΎ Π΄Π°Π²Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π² Π±Π°Π·Π°ΡΠ°. ΠΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Ρ, ΠΏΡΠ°Π²Π΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅, ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅.
- Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π½ΡΠΌΠ° Π²Π³ΡΠ°Π΄Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π² PostgreSQL, ΡΠΎΠ²Π° Π΅ ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° Π΄ΡΡΠ³ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΡΠ½ΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ. ΠΡΡΠΊΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Ρ ΠΏΠΎ-ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΈ ΡΠΌΠ΅Π½ΠΈΡ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. Π Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π² ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, Ρ ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°. Π Π½ΡΠΊΠΎΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΈΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π² Π΄ΡΡΠ³ΠΈ Π½ΡΠΌΠ°, ΠΈΠ»ΠΈ ΠΏΡΠΊ ΠΈΠΌΠ° Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ·Π½ΠΈΠΊΠ²Π° ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΄Π²Π΅, ΡΡΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΠΈΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ΅ ΠΏΡΠΈΠΏΠΎΠΊΡΠΈΠ²Π°Ρ ΠΈ ΠΈΠΌΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎ.

ΠΠ°ΠΊΠ²ΠΎ ΡΠ»Π΅Π΄Π²Π° ΠΎΡ ΡΠΎΠ²Π°? ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ°ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡΠ΅ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅, ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΡΠ°ΠΌΠΈ: Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ»Π·ΠΈ.
Π ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ ΠΏΠΎ SQL. ΠΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½ΡΠΊΠ°ΠΊΠ²ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΡΡΠ°Π²ΠΈΡΠ΅ SQL Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΡΠΎΠ΅ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΡΡΡΠ°Π²ΡΡΠ΅ select, join.

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

ΠΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
- Π ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ (shared buffers) ΠΈΠΌΠ° ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π·Π° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΠ°ΠΌ ΠΈΠΌΠ° ΠΈ ΡΡΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ Π±ΡΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ΅ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠ°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΡΡΡΠΏΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡΠ±ΠΈΡΠΈΡ ΠΈΠ»ΠΈ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠΈ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ°.
- ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π±ΡΠΎΡΡΠΈ Π½Π΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈ Π΄ΠΎΡΠΈ Π½Π΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°. Π’ΠΎΠ²Π° ΡΠ° Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΈ Π½Π΅ΡΠ°. ΠΠ° Π΄Π° ΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ Π΄ΠΎ ΡΡΡ , PostgreSQL ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° SQL ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ΅Π»Π΅ΠΊΡΠΈ ΡΡΠ΅Π· ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΌΠ΅ΡΡΠΈΠΊΠ° (ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ).
- ΠΠ±Π°ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π·Π°ΡΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΡΠ»ΡΠΆΠ°Ρ ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ (VIEWs). Π’ΠΎΠ²Π° ΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ»ΠΈ ΠΏΠΎ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
- Π’Π΅Π·ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ (VIEWs) ΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°. Π’Π΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π±Π΅Π· ΠΊΠ°ΠΊΠ²Π°ΡΠΎ ΠΈ Π΄Π° Π΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅, Π΄Π° Π³Π»Π΅Π΄Π°ΡΠ΅, Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΡΡΡ . Π ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ° ΠΈ contrib ΠΏΠ°ΠΊΠ΅ΡΠΈ. Contrib ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ° ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° postgresql-contrib (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, postgresql94-contrib), Π΄Π° Π·Π°ΡΠ΅Π΄ΠΈΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΌΠΎΠ΄ΡΠ» Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° Π½Π΅Π³ΠΎ, Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ PostgreSQL ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅. (ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, contrib ΠΏΠ°ΠΊΠ΅ΡΡΡ Π΅ ΡΠ°ΡΡ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ.).
- ΠΠΌΠ° ΠΈ Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈ contrib. Π’Π΅ Π½Π΅ ΡΠ΅ Π΄ΠΎΡΡΠ°Π²ΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° PostgreSQL. Π’ΡΡΠ±Π²Π° ΠΈΠ»ΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ, ΠΈΠ»ΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ°ΡΠΈΠ°Π½ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΈΠ·ΠΌΠΈΡΠ»ΠΈΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π½Π° ΡΠΎΠ·ΠΈ Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»Π΅Π½ contrib.

ΠΠ° ΡΠΎΠ·ΠΈ ΡΠ»Π°ΠΉΠ΄ ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ Π²ΡΠΈΡΠΊΠΈ VIEWs ΠΈ ΡΠ°ΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π² PostgreSQL 9.4. ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ. Π Π΅ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ°ΡΠ΅, Π°ΠΊΠΎ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΡΠ΅ Ρ ΡΠΎΠ²Π° Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ.

ΠΠ±Π°ΡΠ΅, Π°ΠΊΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° ΠΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΡΠ°Π·Ρ
ΠΎΠ΄Π²Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π² PostgreSQL ΠΈ Π³ΠΎ ΡΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌ Ρ ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°. ΠΡΡΠΊΠΎ VIEW ΠΈΠ»ΠΈ Π²ΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π»ΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ° Ρ PostgreSQL. Π ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.

ΠΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅, Π΅ pg_stat_database. ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠΎΠ²Π° Π΅ VIEW. Π Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ°ΠΉ-ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π ΡΠΎ Π΄Π°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Π½ΠΈΠ΅ Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
ΠΠ°ΠΊΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΎΡΡΠ°ΠΌ? ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠΈΡΠ΅ Π½Π΅ΡΠ°.

select
sum(blks_hit)*100/sum(blks_hit+blks_read) as hit_ratio
from pg_stat_database;ΠΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, Π΅ ΠΏΡΠΎΡΠ΅Π½ΡΡΡ Π½Π° ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΡΡΠ° Π² ΠΊΠ΅ΡΠ°. ΠΡΠΎΡΠ΅Π½ΡΡΡ Π½Π° ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΡΡΠ° Π² ΠΊΠ΅ΡΠ° Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°. Π’Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ ΠΊΠ°ΠΊΡΠ² ΠΎΠ±Π΅ΠΌ Π΄Π°Π½Π½ΠΈ ΡΠ΅ Π²Π·ΠΈΠΌΠ° ΠΎΡ ΠΊΠ΅ΡΠ° Π½Π° shared buffers ΠΈ ΠΊΠ°ΠΊΡΠ² ΠΎΠ±Π΅ΠΌ ΡΠ΅ ΡΠ΅ΡΠ΅ ΠΎΡ Π΄ΠΈΡΠΊΠ°.
Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊ Π΅ ΠΏΡΠΎΡΠ΅Π½ΡΡΡ Π½Π° ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΡΡΠ° Π² ΠΊΠ΅ΡΠ°, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅. ΠΡΠ΅Π½ΡΠ²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠ° ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΠ΅Π½Ρ. Π, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΏΡΠΎΡΠ΅Π½ΡΠ½ΠΎΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΡΡΠ° Π² ΠΊΠ΅ΡΠ° Π΅ Π½Π°Π΄ 90 %, ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠ±ΡΠ΅. ΠΠΊΠΎ ΡΠΎΠΉ ΠΏΠ°Π΄Π½Π΅ ΠΏΠΎΠ΄ 90 %, Π·Π½Π°ΡΠΈ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅Π΄ΠΎΡΡΠΈΠ³ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ βΠ³ΠΎΡΠ΅ΡΠ°ΡΠ° Π³Π»Π°Π²Π°β Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°. Π Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, PostgreSQL Π΅ ΠΏΡΠΈΠ½ΡΠ΄Π΅Π½ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΡΠ° ΠΊΡΠΌ Π΄ΠΈΡΠΊΠ° ΠΈ ΡΠΎΠ²Π° Π΅ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π°ΠΊΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΠΎΡ ΠΏΠ°ΠΌΠ΅ΡΡΠ°. Π ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΈΡΠ»ΠΈΠΌ Π·Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°: ΠΈΠ»ΠΈ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ shared buffers, ΠΈΠ»ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠ° ΠΏΠ°ΠΌΠ΅Ρ (RAM).

select
datname,
(xact_commit*100)/(xact_commit+xact_rollback) as c_ratio,
deadlocks, conflicts,
temp_file, pg_size_pretty(temp_bytes) as temp_size
from pg_stat_database;ΠΠ°ΠΊΠ²ΠΎ ΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΎΡ ΡΠΎΠ²Π° VIEW? ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°Ρ Π² Π±Π°Π·Π°ΡΠ°. ΠΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΡΠΊ? ΠΠΌΠ° commits, rollbacks, ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ΅Ρ Π½ΠΈΡ ΠΎΠ±Π΅ΠΌ, deadlocks ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ Π·Π°ΡΠ²ΠΊΠ°. Π’ΠΎΠ·ΠΈ SQL Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡ. Π ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΡΠΈ ΡΠ΅Π±Π΅ ΡΠΈ.

Π ΡΡΠΊ Π²Π΅Π΄Π½Π°Π³Π° ΡΠ° ΠΏΡΠ°Π³ΠΎΠ²ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠΈΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ ΡΡΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ commits ΠΈ rollbacks. Commits β ΡΠΎΠ²Π° Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ. Rollbacks β ΡΠΎΠ²Π° Π΅ ΠΎΡΠΊΠ°Ρ, Ρ.Π΅. ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ° Π΅ ΠΈΠ·Π²ΡΡΡΠΈΠ»Π° Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΠ°Π±ΠΎΡΠ°, Π΅ Π½Π°ΠΏΡΠ΅Π³Π½Π°Π»Π° Π±Π°Π·Π°ΡΠ°, Π½Π΅ΡΠΎ Π΅ ΠΈΠ·ΡΠΈΡΠ»ΠΈΠ»ΠΎ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΅ Π½Π°ΡΡΡΠΏΠΈΠ»Π° Π³ΡΠ΅ΡΠΊΠ° ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ° ΡΠ΅ ΠΎΡΡ Π²ΡΡΠ»ΡΡ. Π’.Π΅. Π±ΡΠΎΡΡ Π½Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°ΡΠΈΡΠ΅ ΡΠ΅ rollbacks Π΅ Π»ΠΎΡΠΎ. Π ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±ΡΠ³Π²Π°Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²Ρ ΠΊΠΎΠ΄ΡΡ, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΡΠ°ΠΊΠ°.
ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈΡΠ΅ (conflicts) ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ°. Π ΡΠ΅ ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±ΡΠ³Π²Π°Ρ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° ΠΈ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ, Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅. Π Π΄Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π±Π΅Π· Π³ΡΠ΅ΡΠΊΠΈ.
Deadlocks β ΡΠΎΠ²Π° Π΅ ΡΡΡΠΎ Π»ΠΎΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ. ΠΠΎΠ³Π°ΡΠΎ Π·Π°ΡΠ²ΠΊΠΈ ΡΠ΅ ΡΡΡΡΠ΅Π·Π°Π²Π°Ρ Π·Π° ΡΠ΅ΡΡΡΡΠΈ, Π΅Π΄Π½Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π°Π»Π° ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ ΡΠ΅ΡΡΡΡ ΠΈ Π΅ Π²Π·Π΅Π»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°, Π° Π²ΡΠΎΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° ΡΠ΅ Π΅ ΠΎΠ±ΡΡΠ½Π°Π»Π° ΠΊΡΠΌ Π²ΡΠΎΡΠΈΡ ΡΠ΅ΡΡΡΡ ΠΈ ΡΡΡΠΎ Π΅ Π²Π·Π΅Π»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈ Π΄Π²Π΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΡΠ΅ ΠΎΠ±Π°Π΄ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ Π½Π° Π΄ΡΡΠ³ Π·Π° ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΡΠ° ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π»ΠΈ Π² ΠΎΡΠ°ΠΊΠ²Π°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ΅Π΄ΡΡ ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΡΠ°. Π’ΠΎΠ²Π° ΡΡΡΠΎ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡ. Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠ΅ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΡΠ΅ΡΡΡΡΠΈΡΠ΅. Π Π°ΠΊΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ Π²Π°ΡΠΈΡΠ΅ deadlocks ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π½Π°ΡΠ°ΡΡΠ²Π°Ρ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ Π² Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅, Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Π»ΠΈΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²Π° Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ.
ΠΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (temp_files) β ΡΠΎΠ²Π° ΡΡΡΠΎ Π΅ Π»ΠΎΡΠΎ. ΠΠΎΠ³Π°ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π½Π΅ Ρ Π΄ΠΎΡΡΠΈΠ³Π° ΠΏΠ°ΠΌΠ΅Ρ Π·Π° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ, Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΡ ΡΡΠ·Π΄Π°Π²Π° ΡΠ°ΠΉΠ» Π½Π° Π΄ΠΈΡΠΊΠ°. Π Π²ΡΠΈΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π±ΠΈ ΠΌΠΎΠ³Π»Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈ Π² Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡ Π±ΡΡΠ΅Ρ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° Π²Π΅ΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ°. Π’ΠΎΠ²Π° Π΅ Π±Π°Π²Π½ΠΎ. Π’ΠΎΠ²Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. Π ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ, ΠΈΠ·ΠΏΡΠ°ΡΠΈΠ» Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ PostgreSQL, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Postgres ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΡΠ΅ ΡΠ°ΠΊΠ° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ.

Pg_stat_bgwriter β ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠΈΡΠ²Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π΄Π²Π΅ΡΠ΅ ΡΠΎΠ½ΠΎΠ²ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° PostgreSQL: ΡΠΎΠ²Π° Π΅ checkpointer ΠΈ background writer.

ΠΡΡΠ²ΠΎ, Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ, Ρ.Π½. checkpoints. ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ? ΠΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ° Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅, ΠΊΠΎΡΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°, ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ°. ΠΡΠΎΡΠ΅ΡΡΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠ½Π΅ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ Π² ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π°
Π·Π°ΠΌΡΡΡΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π² ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ°. ΠΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠΎΡΠΊΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡΠ΅Π· ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ, ΠΌΠ°ΡΠΊΠΈΡΠ° Π·Π°ΠΌΡΡΡΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΠΎΡΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ. Π‘ΡΡΠ°Π½ΠΈΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ°, Π²Π΅ΡΠ΅ ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Ρ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΠΎΡΠΊΠΈ. ΠΠ΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π». Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈ Π΄ΠΎΠ±ΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ° β checkpoint_timed. Π ΠΈΠΌΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΠΈΡΠΊΠ°Π½Π΅ β checkpoint required. Π’Π°Π·ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΈ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ. Π PostgreSQL ΡΠΌΡΡΠ°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-Π±ΡΡΠ·ΠΎ, Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ° ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π½Π°ΠΏΡΠ΅Π΄.
ΠΠΊΠΎ ΡΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π»ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° pg_stat_bgwriter ΠΈ ΡΡΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΠ΅ Π²Π°ΡΠ΅ΡΠΎ checkpoint_req Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ checkpoint_timed, ΡΠΎΠ²Π° Π΅ Π»ΠΎΡΠΎ. ΠΠ°ΡΠΎ Π΅ Π»ΠΎΡΠΎ? Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ PostgreSQL Π΅ Π² ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΡΡΠ΅ΡΠΎΠ²ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ°. ΠΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠΎΡΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΡΡΠ΅ΡΠΎΠ²Π° ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠΏΠΎΡΠ΅Π΄ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊ ΠΈ Π΅ ΡΠ°Π·ΡΡΠ΅Π³Π½Π°ΡΠ° Π²ΡΠ² Π²ΡΠ΅ΠΌΠ΅ΡΠΎ. PostgreSQL ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠ°ΡΠ·ΠΈ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ ΠΈ Π΄Π° Π½Π΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π° Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° PostgreSQL. ΠΠ°ΠΏΠΈΡΠ²Π°Π½ΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠΎΡΠΊΠ°, Π½ΡΠΌΠ° Π΄Π° ΠΈΠ·ΠΏΠΈΡΠ²Π°Ρ ΡΡΡΠ΅Ρ ΠΎΡ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π΅ Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½Π°.
Π Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° checkpoint ΠΈΠΌΠ° ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ°:
checkpoint_segments.checkpoint_timeout.checkpoint_completion_target.
Π’Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΠ΅Π³ΡΠ»ΠΈΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ. ΠΠΎ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΡΠΏΠΈΡΠ°ΠΌ Π½Π° ΡΡΡ . ΠΠ»ΠΈΡΠ½ΠΈΠ΅ΡΠΎ ΠΈΠΌ β ΡΠΎΠ²Π° Π΅ ΠΎΡΠ΄Π΅Π»Π½Π° ΡΠ΅ΠΌΠ°.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠ΅ΡΡΠΈΡΡΠ°, ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π° Π² Π΄ΠΎΠΊΠ»Π°Π΄Π° β 9.4, Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π°ΠΊΡΡΠ°Π»Π½Π°. Π ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° PostgreSQL ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ checkpoint_segments Π΅ Π·Π°ΠΌΠ΅Π½Π΅Π½ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ min_wal_size ΠΈ max_wal_size.

Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Π΅ ΡΠΎΠ½ΡΡ ΠΏΠΈΡΠ°ΡΠ΅Π» β background writer. ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠΎΠΉ? Π Π°Π±ΠΎΡΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π² Π±Π΅Π·ΠΊΡΠ°Π΅Π½ ΡΠΈΠΊΡΠ». Π‘ΠΊΠ°Π½ΠΈΡa ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π² shared buffers ΠΈ Π·Π°ΠΌΡΡΡΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π΅ Π½Π°ΠΌΠ΅ΡΠΈΠ», Π³ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° Π½Π° Π΄ΠΈΡΠΊ. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° checkpointerβΠ° Π΄Π° ΡΠ²ΡΡΡΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ.
ΠΠ° ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡΠ΅ Π΅ Π½ΡΠΆΠ΅Π½? ΠΡΠΈΠ³ΡΡΡΠ²Π° Π½ΡΠΆΠ΄Π°ΡΠ° ΠΎΡ ΡΠΈΡΡΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π² shared buffers, Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ (Π² Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ Π²Π΅Π΄Π½Π°Π³Π°) Π·Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΡΠ΅ Π΅ ΠΏΠΎΡΠ²ΠΈΠ»Π° ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΡΠΈΡΡΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΈ ΡΠ΅ Π²Π΅ΡΠ΅ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π² shared buffers. PostgreSQL ΠΏΡΠΎΡΡΠΎ Π³ΠΈ Π²Π·ΠΈΠΌΠ° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π½Π΅ ΠΌΡ ΡΠ΅ Π½Π°Π»Π°Π³Π° ΡΠ°ΠΌ Π΄Π° ΡΠΈΡΡΠΈ Π½ΠΈΡΠΎ. ΠΠΎ Π°ΠΊΠΎ ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ ΡΠ°ΠΊΠΈΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Π½ΡΠΌΠ°, Π±Π΅ΠΊΠ΅Π½Π΄ΡΡ ΡΠΏΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΈ Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΡΡΡΡΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅, Π·Π° Π΄Π° Π³ΠΈ ΡΠ±ΡΠΎΡΠΈ Π½Π° Π΄ΠΈΡΠΊ ΠΈ Π΄Π° Π³ΠΈ Π²Π·Π΅ΠΌΠ΅ Π·Π° ΡΠ²ΠΎΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ β ΠΊΠΎΠ΅ΡΠΎ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ ΡΠ΅ ΠΎΡΡΠ°Π·ΡΠ²Π° Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅. backend ΠΠΊΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ maxwritten_clean Π΅ Π³ΠΎΠ»ΡΠΌ, ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠΎΠ½ΡΡ ΠΏΠΈΡΠ°ΡΠ΅Π» Π½Π΅ ΡΠ΅ ΡΠΏΡΠ°Π²Ρ ΡΡΡ Π·Π°Π΄ΡΠ»ΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠΈ ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ bgwriter_lru_maxpages , Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΡΠΎΠΉ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ° Π·Π° Π΅Π΄ΠΈΠ½ ΡΠΈΠΊΡΠ», Π΄Π° ΡΠΈΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ.Π Π΄ΡΡΠ³ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π» β ΡΠΎΠ²Π° Π΅
buffers_backend_fsync ΠΠ΅ΠΊΠ΅Π½Π΄ΠΈΡΠ΅ Π½Π΅ ΠΏΡΠ°Π²ΡΡ fsync, Π·Π°ΡΠΎΡΠΎ Π΅ Π±Π°Π²Π½ΠΎ. Π’Π΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ fsync ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΎ Π² IO ΡΡΠ΅ΠΊΠ° Π½Π° checkpointerβΠ°. Checkpointer-ΡΡ ΠΈΠΌΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°, ΡΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° fsync ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ°.. ΠΠΊΠΎ ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π½Π° checkpointer Π΅ Π³ΠΎΠ»ΡΠΌΠ° ΠΈ Π·Π°ΠΏΡΠ»Π½Π΅Π½Π°, Π±Π΅ΠΊΠ΅Π½Π΄ΡΡ Π΅ ΠΏΡΠΈΠ½ΡΠ΄Π΅Π½ ΡΠ°ΠΌ Π΄Π° ΠΏΡΠ°Π²ΠΈ fsync ΠΈ ΡΠΎΠ²Π° Π·Π°Π±Π°Π²Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π°, Ρ.Π΅. ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±ΠΈ ΠΌΠΎΠ³ΡΠ». ΠΠΊΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π²ΠΈ Π΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΠΎΡ Π½ΡΠ»Π°, ΡΠΎ ΡΠΎΠ²Π° Π²Π΅ΡΠ΅ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΡΠΎΠ½ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΈ ΡΡΡΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°., Ρ.Π΅. ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±ΠΈ ΠΌΠΎΠ³ΡΠ». ΠΠΊΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΠΎΡ Π½ΡΠ»Π°, Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° background writer-Π° ΠΈ ΡΡΡΠΎ Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°.

ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: _Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠΈΡΠ²Π° ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ°. ΠΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΡ
Π° ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ Π² Postgres 10. Π‘ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈΡΡΠ° Π΅ Π΄Π° ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈ xlog Π½Π° wal ΠΈ location Π½Π° Π² ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ/ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡ ΠΈ Ρ.Π½. Π§Π°ΡΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡΡΠ° pg_xlog_location_diff() Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π° Π½Π° pg_wal_lsn_diff() Π’ΡΠΊ ΡΡΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ°. ΠΠΎ ΡΠ΅ Π½ΠΈ ΡΡΡΠ±Π²Π°Ρ ΡΠ°ΠΌΠΎ ΡΠΎΡΠΊΠΈΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.._
ΠΠΊΠΎ Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΠ° ΡΠ°Π²Π½ΠΈ, ΡΠΎ ΡΠΎΠ²Π° Π΅ ΠΈΠ΄Π΅Π°Π»Π½ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° Π½Π΅ ΠΈΠ·ΠΎΡΡΠ°Π²Π° ΠΎΡ ΠΌΠ°ΡΡΠ΅ΡΠ°.

Π’Π°Π·ΠΈ ΡΠ΅ΡΡΠ½Π°Π΄Π΅ΡΠ΅ΡΠΈΡΠ½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ β ΡΠΎΠ²Π° Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΠΆΡΡΠ½Π°Π»Π° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅. Π’Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°, Π°ΠΊΠΎ Π² Π±Π°Π·Π°ΡΠ° ΠΈΠΌΠ° Π½ΡΠΊΠ°ΠΊΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ: Π²ΡΡΠ°Π²ΠΊΠΈ, ΠΈΠ·ΡΡΠΈΠ²Π°Π½ΠΈΡ ΠΈ Ρ.Π½.
ΠΊΠΎΠ»ΠΊΠΎ Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ xlog Π² Π±Π°ΠΉΡΠΎΠ²Π΅ $ select pg_xlog_location_diff(pg_current_xlog_location(),'0/00000000'); ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π² Π±Π°ΠΉΡΠΎΠ²Π΅ $ select client_addr, pg_xlog_location_diff(pg_current_xlog_location(), replay_location) ΠΎΡ pg_stat_replication; ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄ΠΈ $ select extract(epoch ΠΎΡ now() - pg_last_xact_replay_timestamp());

ΠΠΊΠΎ ΡΠ΅Π·ΠΈ Π½Π΅ΡΠ° ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ, Π·Π½Π°ΡΠΈ ΠΈΠΌΠ° Π½ΡΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅. ΠΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅ΡΠΎ β ΡΠΎΠ²Π° Π΅ Π·Π°Π±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° ΡΠΏΡΡΠΌΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ°, Ρ.Π΅. Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ²ΡΡΠΈΡΠ΅.ΠΠΌΠ° ΡΡΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π·Π° ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅:
Π’ΠΎΠ²Π° Π΅ Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ Π½Π΅ ΡΡΠΏΡΠ²Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅.
- Π’ΠΎΠ²Π° ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ ΡΡΠΏΡΠ²Π°Ρ Π΄Π° ΡΡΠΈΠ³Π½Π°Ρ Π΄ΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° ΠΈ ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅.
- Π ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΡΠΎΡΠ΅ΡΠΎΡΡΡ β ΡΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ΄ΡΠΊ ΡΠ»ΡΡΠ°ΠΉ. Π ΡΡΠΌ Π²ΠΈΠΆΠ΄Π°Π» ΡΠ°ΠΊΠΎΠ²Π° Π½Π΅ΡΠΎ Π΄Π²Π° ΠΈΠ»ΠΈ ΡΡΠΈ ΠΏΡΡΠΈ, Π½ΠΎ ΡΠ°ΠΊΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅.
- Π ΡΡΠΊ ΠΈΠΌΠ° ΡΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ, ΠΊΠΎΠ»ΠΊΠΎ Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² Π½Π°ΡΠΈΡ ΠΆΡΡΠ½Π°Π» Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅. ΠΠΌΠ° ΡΠ°ΠΊΠ°Π²Π° ΡΡΠ½ΠΊΡΠΈΡ
pg_xlog_location_diff ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π² Π±Π°ΠΉΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, Π·Π° ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΎΡ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ (VIEWs). _ΠΠΌΠ΅ΡΡΠΎ pg_xlog_location
ΠΠ΅Π»Π΅ΠΆΠΊΠ°: diff() ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π·Π° ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π°Π΄ΠΈ Π΅Π΄Π½ΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΎ. Π£Π΄ΠΎΠ±Π½ΠΎ Π΅.Π‘ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π² ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠΊΠΎ Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ° Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ, ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ° ΡΠ°ΠΌ Π΅ Π±ΠΈΠ»Π° ΠΏΡΠ΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 15 ΠΌΠΈΠ½ΡΡΠΈ ΠΈ Π½ΡΠΌΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ, ΠΈ Π°ΠΊΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΡΠΎΠ²Π° ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅ ΠΎΡ 15 ΠΌΠΈΠ½ΡΡΠΈ. ΠΠ° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΌΠ½ΠΈ. Π ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΡΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ ΡΠΎΠ²Π° ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅.
Π‘ Π»Π°Π³, ΠΊΠΎΠΉΡΠΎ Π΅ Π² ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠΊΠΎ Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ° Π½ΡΠΌΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ, ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ° Π΅ Π±ΠΈΠ»Π° ΠΏΡΠ΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 15 ΠΌΠΈΠ½ΡΡΠΈ ΠΈ Π½ΡΠΌΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ, ΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΡΠΎΠ·ΠΈ Π»Π°Π³ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ°, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ Π»Π°Π³ ΠΎΡ 15 ΠΌΠΈΠ½ΡΡΠΈ. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅. Π ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΡΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΡΠΎΠ·ΠΈ Π»Π°Π³.

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

select
relname,
pg_size_pretty(pg_relation_size(relname::regclass)) as size,
seq_scan, seq_tup_read,
seq_scan / seq_tup_read as seq_tup_avg
from pg_stat_user_tables
where seq_tup_read > 0 order by 3,4 desc limit 5;ΠΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠΊΠ°Π½ΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. Π‘Π°ΠΌΠΎΡΠΎ ΡΠΈΡΠ»ΠΎ ΡΠ»Π΅Π΄ ΡΠ΅Π·ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½ΠΈΡ Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π»ΠΎΡΠΎ ΠΈ Π½Π΅ Π΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π», ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ Π½Π΅ΡΠΎ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠΌΠ° Π²ΡΠΎΡΠ° ΠΌΠ΅ΡΡΠΈΠΊΠ° β seq_tup_read. Π’ΠΎΠ²Π° Π΅ Π±ΡΠΎΡΡ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅, Π²ΡΡΠ½Π°ΡΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΠΎ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅. ΠΠΊΠΎ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ ΡΠΈΡΠ»ΠΎ ΠΏΡΠ΅Π²ΠΈΡΠ°Π²Π° 1 000, 10 000, 50 000, 100 000, ΡΠΎ ΡΠΎΠ²Π° Π²Π΅ΡΠ΅ Π΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π», ΡΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΡΡΡΠΎΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ, Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π·Π°ΡΠ²ΠΊΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΈΠ»ΠΈ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΠΊΠ°Π½ΠΈΡΠ°Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ β Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Ρ Π³ΠΎΠ»ΡΠΌ OFFSET ΠΈ LIMIT Π΅ Π² ΡΠΈΠ»Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠ°Π½ΠΈΡΠ°Ρ ΡΠ΅ 100 000 ΡΠ΅Π΄Π° Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ 50 000 Π½ΡΠΆΠ½ΠΈ ΡΠ΅Π΄Π°, Π° ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ ΡΠ΅ ΠΎΡΡ Π²ΡΡΠ»ΡΡ. Π ΡΠΎΠ²Π° ΡΡΡΠΎ Π΅ Π»ΠΎΡ ΡΠ»ΡΡΠ°ΠΉ. Π’Π°ΠΊΠΈΠ²Π° Π·Π°ΡΠ²ΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ. Π’ΡΠΊ ΠΈΠΌΠ° ΠΏΡΠΎΡΡ SQL-Π·Π°ΠΏΡΠΎΡ, Π² ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΠΎΡΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ ΡΠΈΡΡΠΈ.

select
relname,
pg_size_pretty(pg_total_relation_size(relname::regclass)) as
full_size,
pg_size_pretty(pg_relation_size(relname::regclass)) as
table_size,
pg_size_pretty(pg_total_relation_size(relname::regclass) -
pg_relation_size(relname::regclass)) as index_size
from pg_stat_user_tables
order by pg_total_relation_size(relname::regclass) desc limit 10;Π Π°Π·ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΡΡΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ pg_total_relation_size(), pg_relation_size().
ΠΡΠΎΠ±ΡΠ΅, ΠΈΠΌΠ° ΠΌΠ΅ΡΠ°ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ dt ΠΈ di, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² PSQL ΠΈ ΡΡΡΠΎ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅, ΠΊΠ°ΡΠΎ ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΈΠ»ΠΈ Π±Π΅Π· ΡΡΡ , ΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠ°ΡΡΠ΅ΠΆΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Ρ.Π΅. ΠΊΠ°ΠΊ ΡΠ°ΡΡΠ΅, Ρ ΠΊΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎΡΡ ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΈΠ·Π²ΠΎΠ΄ΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠΈΡΠ΅.

ΠΠΊΡΠΈΠ²Π½ΠΎΡΡ Π½Π° Π·Π°ΠΏΠΈΡ. ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Π·Π°ΠΏΠΈΡΡΡ? ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° UPDATE β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ, update β ΡΠΎΠ²Π° Π΅ Π΄Π²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅). Π’ΠΎΠ²Π° Π΅ Π²ΠΌΡΠΊΠ²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΅Π΄Π° ΠΈ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΅Π΄Π° ΠΊΠ°ΡΠΎ ΠΎΡΡΠ°ΡΡΠ»Π°. ΠΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅ Π΄ΠΎΠΉΠ΄Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅Π½ Π²Π°ΠΊΡΡΠΌ ΠΈ ΡΠ΅Π·ΠΈ ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·ΡΠΈΡΡΠ΅Π½ΠΈ ΠΈ ΠΌΡΡΡΠΎΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΡΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, update β ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ°ΠΌΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. Π’ΠΎΠ²Π° Π΅ ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΏΡΠΈ update Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΡΠ°ΡΡΠ²Π°Ρ ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ°, Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ, ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ. Π ΡΠ΅Π·ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ ΡΡΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΡΠΈΡΡΠ΅Π½ΠΈ.

select
s.relname,
pg_size_pretty(pg_relation_size(relid)),
coalesce(n_tup_ins,0) + 2 * coalesce(n_tup_upd,0) -
coalesce(n_tup_hot_upd,0) + coalesce(n_tup_del,0) AS total_writes,
(coalesce(n_tup_hot_upd,0)::float * 100 / (case when n_tup_upd > 0
then n_tup_upd else 1 end)::float)::numeric(10,2) AS hot_rate,
(select v[1] FROM regexp_matches(reloptions::text,E'fillfactor=(\d+)') as
r(v) limit 1) AS fillfactor
from pg_stat_all_tables s
join pg_class c ON c.oid=relid
order by total_writes desc limit 50;Π Π·Π°ΡΠ°Π΄ΠΈ ΡΠ²ΠΎΡ Π΄ΠΈΠ·Π°ΠΉΠ½, UPDATE β ΡΠΎΠ²Π° Π΅ ΡΠ΅ΠΆΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΎΠ±Π»Π΅ΠΊΡΠ°Ρ. ΠΠΌΠ° hot updates. Π’Π΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΡ
Π° Π² PostgreSQL Π²Π΅ΡΡΠΈΡ 8.3. Π ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΡΠΎΠ²Π°? Π’ΠΎΠ²Π° Π΅ Π»Π΅ΠΊ update, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΡΠ΅ costruction Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. Π’.Π΅. Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π·Π°ΠΏΠΈΡΠ°, Π½ΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΡΠ°ΠΌΠΎ Π·Π°ΠΏΠΈΡΠ° Π² ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° (ΠΊΠΎΡΡΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°), Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠΎΡΠ°Ρ ΠΊΡΠΌ ΡΡΡΠΈΡ Π·Π°ΠΏΠΈΡ Π² ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°. Π’Π°ΠΌ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π΄ΠΎΠΉΠ΄Π΅ Π²Π°ΠΊΡΡΠΌΡΡ, ΡΠΎΠΉ ΡΠ΅Π·ΠΈ Π²Π΅ΡΠΈΠ³ΠΈ hot ΠΏΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ° ΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π±Π΅Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅, ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΡΠ°Π²Π° Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠ°Π·Ρ
ΠΎΠ΄ΠΈ Π½Π° ΡΠ΅ΡΡΡΡΠΈ.
Π ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΡΠ΅ n_tup_hot_upd Π³ΠΎΠ»ΡΠΌΠΎ, ΡΠΎ ΡΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π»Π΅ΠΊΠΈΡΠ΅ updates ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°Π²Π°Ρ ΠΈ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΈΠ·Π»ΠΈΠ·Π°Ρ ΠΏΠΎ-Π΅Π²ΡΠΈΠ½ΠΎ ΠΈ Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ.

ALTER TABLE table_name SET (fillfactor = 70);ΠΠ°ΠΊ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ ΠΎΠ±Π΅ΠΌΠ° Π½Π° hot updateΠΈΡΠ΅? ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ fillfactor. Π’ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠ°Π½ΠΎΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΡΡΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Ρ INSERT'ΠΈ. ΠΠΎΠ³Π°ΡΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π²Π»ΠΈΠ·Π°Ρ inserts, ΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π·Π°ΠΏΡΠ»Π²Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, Π½Π΅ ΠΎΡΡΠ°Π²ΡΡ ΠΏΡΠ°Π·Π½ΠΎ ΠΌΡΡΡΠΎ Π² Π½Π΅Ρ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π·Π°Π΄Π΅Π»Ρ Π½ΠΎΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΡΠ½ΠΎΠ²ΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ Π·Π°ΠΏΡΠ»Π²Π°Ρ. Π ΡΠΎΠ²Π° Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, fillfactor = 100%.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ fillfactor Π½Π° 70%. Π’ΠΎΠ΅ΡΡ, ΠΏΡΠΈ Π²ΡΡΠ°Π²ΠΊΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π° Π½ΠΎΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ°, Π½ΠΎ Π·Π°ΠΏΡΠ»Π²Π° ΡΠ°ΠΌΠΎ 70% ΠΎΡ Π½Π΅Ρ. Π 30% ΠΎΡΡΠ°Π²Π°Ρ Π·Π° ΡΠ΅Π·Π΅ΡΠ². ΠΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΡ Ρ Π²ΠΈΡΠΎΠΊΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ Π½Π° ΡΡΡΠ°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΈ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΅Π΄Π° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ Π½Π° ΡΡΡΠ°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°. Π©Π΅ Π±ΡΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ hot_update. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠ΅ ΠΎΠ±Π»Π΅ΠΊΡΠ°Π²Π° Π·Π°ΠΏΠΈΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅.

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));ΠΠΏΠ°ΡΠΊΠ° Π·Π° Π°Π²ΡΠΎΠ²Π°ΠΊΡΡΠΌ. ΠΠ²ΡΠΎΠ²Π°ΠΊΡΡΠΌΡΡ Π΅ ΠΏΠΎΠ΄-ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΊΠΎΡΡΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π² PostgreSQL Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΠ΄Π½Π°. ΠΠΎΠΆΠ΅ΠΌ Π² ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΡΠ°ΠΌΠΎ Π² pg_stat_activity Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠΎΠ»ΠΊΠΎ Π°Π²ΡΠΎΠ²Π°ΠΊΡΡΠΌΠ° ΡΠ΅ΠΊΠ°Ρ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°. ΠΠΎ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π±Π»ΠΈΡΠΈ ΡΠ° Π² ΠΎΠΏΠ°ΡΠΊΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π½ΠΎ.
ΠΠ΅Π»Π΅ΠΆΠΊΠ°: _ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΡ Postgres 10, ΡΠΈΡΡΠ°ΡΠΈΡΡΠ° Ρ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π²ΡΠΎΠ²Π°ΠΊΡΡΠΌΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ β ΠΏΠΎΡΠ²ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ pg_stat_progressvacuum, ΠΊΠΎΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ»Π΅ΡΠ½ΡΠ²Π° Π²ΡΠΏΡΠΎΡΠ° Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π½Π° Π°Π²ΡΠΎΠ²Π°ΠΊΡΡΠΌΠ°.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΎΠΏΡΠΎΡΡΠ΅Π½ Π·Π°ΡΠ²ΠΊΠ°. Π ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠΎΠ³Π° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ Π²Π°ΠΊΡΡΠΌ. ΠΠΎ, ΠΊΠΎΠ³Π° ΠΈ ΠΊΠ°ΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Π²Π°ΠΊΡΡΠΌΠ°? ΠΡΠΎ ΡΠ΅Π·ΠΈ ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅, Π·Π° ΠΊΠΎΠΈΡΠΎ Π³ΠΎΠ²ΠΎΡΠ΅Ρ
ΠΏΡΠ΅Π΄ΠΈ. ΠΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°ΡΡΡΠΏΠΈ, Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΅Π΄Π° Π±Π΅ Π²ΡΡΠ°Π²Π΅Π½Π°. ΠΠΎΡΠ²ΠΈΠ»Π° ΡΠ΅ ΠΎΡΡΠ°ΡΡΠ»Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΅Π΄Π°. Π ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° pg_stat_user_tables ΠΈΠΌΠ° ΡΠ°ΠΊΡΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ n_dead_tup. Π’ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ "ΠΌΡΡΡΠ²ΠΈ" ΡΠ΅Π΄ΠΎΠ²Π΅. Π ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΌΡΡΡΠ²ΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ ΡΡΠ°Π½Π΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΡΠ°Π³, ΠΊΡΠΌ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΡΠ΅ Π΄ΠΎΠΉΠ΄Π΅ Π°Π²ΡΠΎΠ²Π°ΠΊΡΡΠΌ.
ΠΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΠΎΠ·ΠΈ ΠΏΡΠ°Π³? Π’ΠΎΠ²Π° Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅Π½ΡΠ½ΠΎ ΡΡΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΠΈΡ Π±ΡΠΎΠΉ ΡΠ΅Π΄ΠΎΠ²Π΅ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. ΠΠΌΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ autovacuum_vacuum_scale_factor. Π’ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΡΠΎΡΠ΅Π½ΡΠ½ΠΎΡΠΎ ΡΡΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 10% + Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π±Π°Π·ΠΎΠ² ΠΏΡΠ°Π³ ΠΎΡ 50 ΡΠ΅Π΄Π°. Π ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°? ΠΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΡΡΡΠ²ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π½Π°Π΄Π²ΠΈΡΠ°Π²Π°Ρ "10% + 50" ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π½Π° Π°Π²ΡΠΎΠ²Π°ΠΊΡΡΠΌ.

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));ΠΠΎ ΡΡΠΊ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ°Π·ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ°Π³ΠΎΠ²Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ av_base_thresh ΠΈ av_scale_factor ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π½ΠΎ. Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΠΏΡΠ°Π³ΠΎΠ²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ, Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π½ΠΈ Π·Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. ΠΠ°ΡΠΎΠ²Π°, Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ
ΠΈΡΡΠΎΡΡΠΈ ΠΈ ΡΡΠΈΠΊΠΎΠ²Π΅. Π Π°ΠΊΠΎ Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ° Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΎΡ Avito (Π»ΠΈΠ½ΠΊΡΡ Π½Π° ΡΠ»Π°ΠΉΠ΄Π° Π΅ Π½Π΅Π²Π°Π»ΠΈΠ΄Π΅Π½ ΠΈ Π΅ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ Π² ΡΠ΅ΠΊΡΡΠ°).
Π’Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ Π° Π·Π° , ΠΊΠΎΠΉΡΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠ΅Π·ΠΈ Π½Π΅ΡΠ°. ΠΠΌΠ° Π΄ΡΠ»ΡΠ³ ΡΠΏΠΈΡΡΠΊ Π½Π° Π΄Π²Π° Π»ΠΈΡΡΠ°. ΠΠΎ ΡΠΎΠΉ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈ Π΄ΠΎΡΡΠ° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ ΠΊΡΠ΄Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΊΡΡΠΌ Π·Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅, Π° ΠΊΡΠ΄Π΅ β ΠΌΠ°Π»ΠΊΠΎ.
ΠΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Ρ ΡΠΎΠ²Π°? ΠΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΠ»ΡΠΌΠ° ΠΎΠΏΠ°ΡΠΊΠ° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈΡΡ Π²Π°ΠΊΡΡΠΌ Π½Π΅ ΡΠΏΡΠ°Π²Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ Π±ΡΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π·Π° Π²Π°ΠΊΡΡΠΌΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π²Π°ΠΊΡΡΠΌΠ° ΠΏΠΎ-Π°Π³ΡΠ΅ΡΠΈΠ²Π΅Π½, Π·Π° Π΄Π° ΡΠ΅ ΡΡΠΈΠ³Π΅ΡΠΈΡΠ° ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΈ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΏΠ°ΡΡΠ΅Π½ΡΠ°. Π ΡΠ°ΠΊΠ° ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΡΠ΅ ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ. β ΠΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΡΡΠΊ Π΅ Π΄Π° ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠΎΠ²Π΅ΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π°ΠΊΡΡΠΌΡΡ Π½Π΅ Π΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ΅Π½, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Ρ ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° SSD/NVMe ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ ΡΡΠ°Π½Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ.

Pg_stat_all_indexes β ΡΠΎΠ²Π° Π΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. Π’Ρ Π΅ ΠΌΠ°Π»ΠΊΠ°. Π ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½ΠΈ ΠΈΠ·Π»ΠΈΡΠ½ΠΈ.

ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ
, update β ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ°ΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅, Π° ΡΡΡΠΎ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠ° ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ΠΈ, ΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ, ΠΏΠΎ ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈ ΡΠΊΠ°Π½ΠΈΡΠ°Π½ΠΈΡ, ΡΠ΅ Π½ΠΈ ΡΠ΅ΠΆΠ°Ρ Π±Π°Π»Π°ΡΡ. Π ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΡΡΠ²Π΅ΠΌ ΠΎΡ ΡΡΡ
. ΠΠ° ΡΠΎΠ²Π° Π½ΠΈ ΡΡΡΠ±Π²Π° ΠΏΠΎΠ»Π΅ idx_scan. ΠΡΠΎΡΡΠΎ Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π±ΡΠΎΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΡΠΊΠ°Π½ΠΈΡΠ°Π½ΠΈΡ. ΠΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΈΠΌΠ°Ρ Π½ΡΠ»Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½ΠΈΡ Π·Π° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΡΠ»ΡΠ³ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π½Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° (Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ 2-3 ΡΠ΅Π΄ΠΌΠΈΡΠΈ), Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅Π·ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ ΡΠ° Π»ΠΎΡΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΡΡΠ²Π΅ΠΌ ΠΎΡ ΡΡΡ
.
ΠΠ΅Π»Π΅ΠΆΠΊΠ°: ΠΡΠΈ ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π΅ Π΅ Π³Π»ΠΎΠ±Π°Π»Π½Π°, ΠΈ Π°ΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡΡ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° ΠΌΠ°ΠΉΡΡΠΎΡΠ°, ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ (Π°ΠΊΠΎ ΡΠ°ΠΌ ΠΈΠΌΠ° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅).
ΠΠ²Π° Π»ΠΈΠ½ΠΊΠ°:
Π’ΠΎΠ²Π° ΡΠ° ΠΏΠΎ-Π½Π°ΠΏΡΠ΅Π΄Π½Π°Π»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ Π΄Π° ΡΡΡΡΠΈΠΌ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ.
ΠΡΠΎΡΠ°ΡΠ° Π²ΡΡΠΊΠ° Π΅ Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π·Π°ΠΏΡΠΎΡ. Π’ΡΠΊΠ° Π΅ Π²Π³ΡΠ°Π΄Π΅Π½Π° Π΄ΠΎΡΡΠ° Π½Π΅ΡΡΠΈΠ²ΠΈΡΠ°Π»Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°. ΠΠ° ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π·Π° Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅.

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

Π‘Π»Π΅Π΄Π½ΠΎΡΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π΅ pg_stat_activity. Π’ΠΎΠ° Π΅ Π°Π½Π°Π»ΠΎΠ³ Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° ps, ΡΠ°ΠΌΠΎ ΡΡΠΎ Π΅ Π²ΠΎ PostgreSQL. ΠΠΊΠΎ psΠ³Π»Π΅Π΄Π°ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ, ΡΠΎΠ³Π°Ρ pg_stat_activity ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠ° Π²ΠΎ PostgreSQL.
Π¨ΡΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌΠ΅ ΠΎΠ΄ ΡΠ°ΠΌΡ?

select
count(*)*100/(select current_setting('max_connections')::int)
from pg_stat_activity;ΠΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π½Π° ΡΠ΅Π»ΠΎΠΊΡΠΏΠ½Π°ΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ, ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π²ΠΎ Π±Π°Π·Π°ΡΠ°. ΠΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ Π½ΠΎΠ²Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ°. Π’ΡΠΊΠ° ΡΓ¨ Π΅ΠΊΡΠΏΠ»ΠΎΠ΄ΠΈΡΠ°, Π½ΠΎΠ²ΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ° Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ°Π°Ρ, Π³ΡΠ΅ΡΠΊΠΈ ΡΡΠ»Π°Π°Ρ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°.

select
client_addr, usename, datname, count(*)
from pg_stat_activity group by 1,2,3 order by 4 desc;ΠΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ ΠΎΠ²Π°ΠΊΠΎΠ² Π·Π°ΠΏΡΠΎΡ ΠΈ Π΄Π° ΡΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΠ΅Π»ΠΎΠΊΡΠΏΠ½Π°ΡΠ° ΠΏΡΠΎΡΠ΅Π½ΡΡΠ°Π»Π½Π° Π²ΡΡΠΊΠ° Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΠΎΡ Π»ΠΈΠΌΠΈΡ Π½Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ° ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠΎΡ Π½Π°ΡΠΌΠ½ΠΎΠ³Ρ ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ°. Π Π²ΠΎ Π΄Π°Π΄Π΅Π½ΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ cron_role ΠΎΡΠ²ΠΎΡΠΈΠ» 508 ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ°. Π Π½Π΅ΡΡΠΎ ΠΌΡ ΡΠ΅ ΡΠ»ΡΡΠΈΠ»ΠΎ. Π’ΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ ΡΠΎ Π½Π΅Π³ΠΎ ΠΈ Π΄Π° Π³Π»Π΅Π΄Π°ΠΌΠ΅. Π ΠΌΠ½ΠΎΠ³Ρ Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠ° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π·Π° Π½Π΅ΠΊΠ°ΠΊΠ²Π° Π°Π½ΠΎΠΌΠ°Π»Π½Π° Π±ΡΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ°.

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

select
client_addr, usename, datname,
clock_timestamp() - xact_start as xact_age,
clock_timestamp() - query_start as query_age,
query
from pg_stat_activity order by xact_start, query_start;ΠΠ±ΡΠ°ΡΠ΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΡΠΎ Π²Π°ΠΊΠΎΠ² Π·Π°ΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΎΠ΄ΡΠ΅Π΄ΠΈΠΌΠ΅ Π΄ΠΎΠ»Π³ΠΈ Π·Π°ΠΏΡΠΎΡΠΈ ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠΈ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° clock_timestamp() Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ°. ΠΠΎΠ»Π³ΠΈΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΈ ΡΡΠΎ Π³ΠΈ Π½Π°ΡΠ΄ΠΎΠ²ΠΌΠ΅, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ Π·Π°ΠΏΠΎΠΌΠ½Π΅ΠΌΠ΅, Π΄Π° ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ explain, Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΏΠ»Π°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈ Π½Π΅ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅. Π’Π΅ΠΊΠΎΠ²Π½ΠΈΡΠ΅ Π΄ΠΎΠ»Π³ΠΈ Π·Π°ΠΏΡΠΎΡΠΈ Π³ΠΈ ΠΎΠ΄ΡΡΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ ΠΈ ΠΏΠΎΠ½Π°ΡΠ°ΠΌΡ ΠΆΠΈΠ²Π΅Π΅ΠΌΠ΅.

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';ΠΠΎΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ β ΡΠΎΠ° ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π²ΠΎ ΡΠΎΡΡΠΎΡΠ±Π° idle in transaction ΠΈ idle in transaction (aborted).
ΠΠ°ΠΊΠ²ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΠΎΠ²Π°? Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅ ΠΈΠΌΠ°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΡ, ΠΈ Π΅Π΄Π½ΠΎ ΠΎΡ ΡΠ΅Π·ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ΅ ΠΏΠΎ Π²ΡΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΡΡΠ° ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ state Π² ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅. Π Π½ΠΈΠ΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ.

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';Π, ΠΊΠ°ΠΊΡΠΎ ΠΊΠ°Π·Π°Ρ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ΅Π·ΠΈ Π΄Π²Π΅ ΡΡΡΡΠΎΡΠ½ΠΈΡ idle in transaction ΠΈ idle in transaction (aborted) β ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΈ. ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ? Π’ΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΠΎΡΠ²ΠΎΡΠΈΠ»ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, ΠΈΠ·Π²ΡΡΡΠΈΠ»ΠΎ Π΅ Π½ΡΠΊΠ°ΠΊΠ²ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ Π΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠ»ΠΎ Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ. Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ° ΠΎΡΡΠ°Π²Π° ΠΎΡΠ²ΠΎΡΠ΅Π½Π°. Π’Ρ 'Π²ΠΈΡΠΈ', Π² Π½Π΅Ρ Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π½ΠΈΡΠΎ, Π·Π°Π΅ΠΌΠ° Π²ΡΡΠ·ΠΊΠ°, Π±Π»ΠΎΠΊΠΈΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° bloat Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ, Π·Π°ΡΠ°Π΄ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π½Π° Postgres. Π ΡΠ°ΠΊΠΈΠ²Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°ΡΠ²ΠΎΡΠ΅Π½ΠΈ, Π·Π°ΡΠΎΡΠΎ ΡΠ° Π²ΡΠ΅Π΄Π½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠΎ, ΠΏΡΠΈ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΠ²Π°.
ΠΠΊΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 5-10-20 ΠΎΡ ΡΡΡ Π² Π±Π°Π·Π°ΡΠ°, ΡΡΡΠ±Π²Π° Π²Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π½Π΅ΡΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅.
Π’ΡΠΊ ΡΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ clock_timestamp()Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅. ΠΠ°ΡΠ²Π°ΡΡΠΌΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.

ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ
, Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ΡΠΎ β ΡΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π²Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΠ΅ Π±ΠΎΡΡΡ Π·Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠ° ΡΠ΅ΡΡΡΡΠΈ. ΠΠ° ΡΠ΅Π»ΡΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΠ»Π΅ waiting Ρ Π±ΡΠ»Π΅Π²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Π²Π΅ΡΠ½ΠΎ.
True β ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π΅ Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅, Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½Π΅ΡΠΎ. ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ Π΅ Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅, Π·Π½Π°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΠ°Π» ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ, ΡΡΡΠΎ ΡΠ°ΠΊΠ°. ΠΠ»ΠΈΠ΅Π½ΡΡΡ Π² Π±ΡΠ°ΡΠ·ΡΡΠ° ΡΠΈΠ΄ΡΡ ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ°.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: _ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΡ Postgres 9.6, ΠΏΠΎΠ»Π΅ΡΠΎ waiting Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π°ΡΠΎ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄Π²Π΅ ΠΏΠΎ-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ° wait_event_type ΠΈ wait_event._

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

Π Π΅ΡΠΎ Π΄Π²Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈΡΠ΅. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ pg_locks, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ»Π΅Π΄Π΅Π½Π΅ Π½Π° ΡΠ΅ΠΆΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
Π ΠΏΡΡΠ²Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ° - ΡΠΎΠ²Π° Π΅ ΡΠ°ΠΌΠΈΡΡ ΡΠ΅ΠΊΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. Π’ΠΎΠΉ Π΅ Π΄ΠΎΡΡΠ° Π΄ΡΠ»ΡΠ³.
Π Π²ΡΠΎΡΠ°ΡΠ° Π²ΡΡΠ·ΠΊΠ° - ΡΠΎΠ²Π° Π΅ ΡΡΠ°ΡΠΈΡ Π·Π° locks. ΠΠΎΠ»Π΅Π·Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ΅, ΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°.
Π ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅? ΠΠΈΠΆΠ΄Π°ΠΌΠ΅ Π΄Π²Π΅ Π·Π°ΡΠ²ΠΊΠΈ. Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Ρ ALTER TABLE β ΡΠΎΠ²Π° Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ. Π’Ρ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π»Π°, Π½ΠΎ Π½Π΅ Π΅ Π·Π°Π²ΡΡΡΠΈΠ»Π° ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΡΠ°ΡΡΠΈΡΠ°Π»ΠΎ ΡΠ°Π·ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° Ρ Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ. Π Π²ΡΠΎΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° - update. Π’Ρ ΡΠ°ΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π·Π°Π²ΡΡΡΠΈ alter table, Π·Π° Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ.
Π’Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠΉ ΠΊΠΎΠ³ΠΎ Π΅ Π·Π°ΠΊΠ»ΡΡΠΈΠ», Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Ρ ΡΠΎΠ²Π°.

Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ» - ΡΠΎΠ²Π° Π΅ pg_stat_statements. ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΠΊΠ°Π·Π°Ρ
, ΡΠΎΠ²Π° Π΅ ΠΌΠΎΠ΄ΡΠ». ΠΠ° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΡΠ΅Π΄ΠΈΡΠ΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ PostgreSQL, Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π° (Ρ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°) ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΠΎΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.

Π‘ΡΠ΅Π΄Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π·Π°ΡΠ²ΠΊΠ° Π² ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ
$ select (sum(total_time) / sum(calls))::numeric(6,3)
from pg_stat_statements;
ΠΠ°ΠΉ-Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΈΡΠ΅ΡΠΈΡΠ΅ (Π² shared_buffers) Π·Π°ΡΠ²ΠΊΠΈ
$ select query, shared_blks_dirtied
from pg_stat_statements
where shared_blks_dirtied > 0 order by 2 desc;ΠΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΎΡΡΠ°ΠΌ? ΠΠΊΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ Π½Π΅ΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π°ΡΠ°ΡΡΠ²Π°, Π·Π½Π°ΡΠΈ PostgreSQL ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π±Π°Π²Π½ΠΎ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ Π½Π΅ΡΠΎ.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π°ΠΉ-Π°ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ ΠΏΠΈΡΠ΅ΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΠΈ Π² shared buffers. ΠΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠΉ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π° ΠΈΠ»ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΠΈ.
Π ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΏΠΎ ΡΠ΅Π·ΠΈ Π·Π°ΡΠ²ΠΊΠΈ.

ΠΠΈΠ΅ pg_stat_statements ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡΡΠ΅ΡΠΈ. ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½ΠΎ Π²Π΅Π΄Π½ΡΠΆ Π½Π° Π΄Π΅Π½ Π½ΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°. ΠΠ°ΠΊΠΎΠΏΡΠ²Π°ΠΌΠ΅ Ρ. ΠΡΠ΅Π΄ΠΈ Π½ΡΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π·Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΠΏΡΡ, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡΡΠ΅Ρ. ΠΡΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΊΡΠΌ ΠΎΡΡΠ΅ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅.

ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ? ΠΠ·ΡΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ ΠΎΠ±ΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° Π²ΡΠΈΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π·Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ Π½Π΅ΠΉΠ½ΠΈΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π΅Π½ ΠΏΡΠΈΠ½ΠΎΡ ΠΊΡΠΌ ΡΠ°Π·ΠΈ ΠΎΠ±ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°.
Π ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ? ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΡΠΈΠΏ Π½Π° ΡΠΎΠ½Π° Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π·Π°ΡΠ²ΠΊΠΈ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΈ Π²Ρ ΠΎΠ΄-ΠΈΠ·Ρ ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΎΠ±ΡΠ°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π°. Π ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π·ΠΈ Π·Π°ΡΠ²ΠΊΠΈ. ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°ΠΌΠ΅ ΡΠΎΠΏ Π·Π°ΡΠ²ΠΊΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΎΡΡΠ΅Ρ ΠΈ Π²Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Ρ ΡΠ°Π½Π° Π·Π° ΡΠ°Π·ΠΌΠΈΡΡΠ» ΠΏΠΎ ΡΠ΅ΠΌΠ°ΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅.

ΠΠ°ΠΊΠ²ΠΎ ΠΎΡΡΠ°Π½Π° ΠΈΠ·Π²ΡΠ½ ΠΊΠ°Π΄ΡΡ? ΠΡΡΠ°Π½Π° ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ , Π·Π°ΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ.
ΠΠΌΠ° pgstattuple β ΡΠΎΠ²Π° Π΅ ΡΡΡΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΌΠΎΠ΄ΡΠ» ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ contribs. Π’ΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ bloat ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅, Ρ.Π½. ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅. Π Π°ΠΊΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π΅ Π³ΠΎΠ»ΡΠΌΠ°, ΡΡΡΠ±Π²Π° Π΄Π° Ρ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅, Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ. Π ΡΡΠ½ΠΊΡΠΈΡΡΠ° pgstattuple ΡΠ°Π±ΠΎΡΠΈ Π΄ΡΠ»Π³ΠΎ. Π ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ ΠΈΠΌΠ°, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Π΄ΡΠ»Π³ΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ.

Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ contrib β ΡΠΎΠ²Π° Π΅ pg_buffercache. Π’ΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡ Π½Π° shared buffers: ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎ ΠΈ ΠΏΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° Π±ΡΡΠ΅ΡΠ°. Π ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π·Π°Π³Π»Π΅Π΄Π°ΡΠ΅ Π² shared buffers ΠΈ Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΡΠ°ΠΌ.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ» - ΡΠΎΠ²Π° Π΅ pgfincore. Π’ΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π½ΠΈΡΠΊΠΎΡΡΠΎΡΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΡΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΈΠ·Π²ΠΈΠΊ mincore(), Ρ.Π΅. ΡΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π·Π°ΡΠ΅Π΄ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² ΠΎΠ±ΡΠΈΡΠ΅ Π±ΡΡΠ΅ΡΠΈ ΠΈΠ»ΠΈ Π΄Π° Ρ ΠΈΠ·Ρ
Π²ΡΡΠ»ΠΈΡΠ΅. Π ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΎΡΠ²Π΅Π½ Π²ΡΠΈΡΠΊΠΎ Π΄ΡΡΠ³ΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°ΡΠ΅ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΡ ΠΊΠ΅Ρ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Ρ.Π΅. Π² ΠΊΠ°ΠΊΡΠ² ΠΎΠ±Π΅ΠΌ Π½Π°ΡΠ°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Π·Π°Π΅ΠΌΠ° Π² page cache, Π² shared buffers ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ» β pg_stat_kcache. Π’ΠΎΠΉ ΡΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΈΠ·Π²ΠΈΠΊ getrusage(). Π Π³ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠ΅Π΄ΠΈ ΠΈ ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. Π Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΡΡΡΡ Π΅ ΠΈΠ·ΡΠ°Π·Ρ
ΠΎΠ΄Π²Π°Π½ Π·Π° Π΄ΠΈΡΠΊΠΎΠ² Π²Ρ
ΠΎΠ΄-ΠΈΠ·Ρ
ΠΎΠ΄, Ρ.Π΅. ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ Π³Π»Π΅Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ Π΅ Π½ΠΎΠ² (ΠΊΡ
Π΅-ΠΊΡ
Π΅) ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π° PostgreSQL 9.4 ΠΈ pg_stat_statements, Π·Π° ΠΊΠΎΠΉΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ
ΠΏΠΎ-ΡΠ°Π½ΠΎ.

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

ΠΡΡΠ·ΠΊΠΈ
Π‘ΡΡΠ°Ρ ΠΎΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΅ΡΠ½Π°Ρ Π² ΡΡΠ°ΡΠΈΡΡΠ°, ΠΏΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π±ΡΡ Π° Π² Π΄ΠΎΠΊΠ»Π°Π΄Π°.
ΠΠ²ΡΠΎΡΡΡ ΠΏΠΈΡΠ΅ ΠΎΡΠ΅
(eng)
Π‘ΡΠ±ΠΈΡΠ°ΡΠ΅Π» Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
Π€ΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅
ΠΠΎΠ΄ΡΠ»ΠΈ contrib
SQL ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΊΠΎΠ΄ SQL
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ!
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
