Π Π°Π·ΡΠΈΡΡΠΎΠ²ΠΊΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ 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 ΠΌΠΈΠ½ΡΡΠΈ, Π½ΡΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΡΡΠ°Π½Π°Π»ΠΎ ΠΏΡΠ΅Π΄ΠΈ 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 ΠΈ Π³ΠΎ ΡΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌ Ρ ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°ΠΊΠ°Π²Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°. ΠΡΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (VIEWs) ΠΈΠ»ΠΈ Π²ΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π»ΠΈ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ PostgreSQL. Π ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π²Π΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.

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

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;ΠΠ°ΠΊΠ²ΠΎ Π΄ΡΡΠ³ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ ΠΎΡ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅? ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°Ρ Π² Π±Π°Π·Π°ΡΠ°. ΠΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΡΠΊ? Π’ΡΠΊ ΠΈΠΌΠ° commits, rollbacks, ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ΅Ρ Π½ΠΈΡΡ ΠΎΠ±Π΅ΠΌ, deadlocks ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ.
ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ Π·Π°ΡΠ²ΠΊΠ°. Π’ΠΎΠ·ΠΈ SQL Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡ. Π ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Ρ Π½Π°Ρ.

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

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

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

Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Π΅ ΡΠΎΠ½ΠΎΠ²Π° ΠΏΠΈΡΠ°ΡΠΊΠ° β background writer. ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈ ΡΡ? Π Π°Π±ΠΎΡΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π² Π±Π΅Π·ΠΊΡΠ°Π΅Π½ ΡΠΈΠΊΡΠ». Π‘ΠΊΠ°Π½ΡΠΈΡΠ° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π² 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 ΠΈ ΡΠΎΠ²Π° Π·Π°Π±Π°Π²Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π°,, Ρ.Π΅. ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±ΠΈ ΠΌΠΎΠ³ΡΠ». ΠΠΊΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ ΡΠΎΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΠΎΡ Π½ΡΠ»Π°, ΡΠΎ ΡΠΎΠ²Π° Π²Π΅ΡΠ΅ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΡΠΎΠ½ΠΎΠ²Π°ΡΠ° ΠΏΠΈΡΠ°ΡΠΊΠ° ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°.

ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: _Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠΈΡΠ²Π° ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ°. ΠΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡΡΠ° ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π±ΡΡ
Π° ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈ Π² Postgres 10. Π‘ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅ ΡΠ²Π΅ΠΆΠ΄Π° Π΄ΠΎ ΠΏΠΎΠ΄ΠΌΡΠ½Π° xlog Π½Π° wal ΠΈ location Π½Π° lsn Π² ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅/ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡΡΠ° ΠΈ Ρ.Π½. Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡΡΠ° 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)
from pg_stat_replication;
Π»Π°Π³ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄ΠΈ
$ select
extract(epoch ΠΎΡ now() - pg_last_xact_replay_timestamp());ΠΠΊΠΎ ΡΠ΅Π·ΠΈ Π½Π΅ΡΠ° ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ, Π·Π½Π°ΡΠΈ ΠΈΠΌΠ° Π½ΡΠΊΠ°ΠΊΡΠ² Π»Π°Π³. ΠΠ°Π³ β ΡΠΎΠ²Π° Π΅ ΠΎΡΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΡΡΠ²ΡΡ, Ρ.Π΅. Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ²ΡΡΠΈΡΠ΅.
ΠΠΌΠ° ΡΡΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π·Π° ΠΎΡΡΡΠ°Π²Π°Π½Π΅:
- Π’ΠΎΠ²Π° Π΅ Π΄ΠΈΡΠΊΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ Π½Π΅ ΡΠ΅ ΡΠΏΡΠ°Π²Ρ Ρ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
- Π’ΠΎΠ²Π° ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ ΡΡΠΏΡΠ²Π°Ρ Π΄Π° Π΄ΠΎΡΡΠΈΠ³Π½Π°Ρ Π΄ΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° ΠΈ ΡΠΎΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅.
- Π ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΡ. ΠΡΠΎΡΠ΅ΡΠΎΡΡΡ β ΡΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ΄ΡΠΊ ΡΠ»ΡΡΠ°ΠΉ. ΠΠ· ΡΡΠΌ Π²ΠΈΠΆΠ΄Π°Π» ΡΠ°ΠΊΠΎΠ²Π° ΡΠ°ΠΌΠΎ Π΄Π²Π° ΠΈΠ»ΠΈ ΡΡΠΈ ΠΏΡΡΠΈ, Π½ΠΎ ΠΈ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ»ΡΡΠΈ.
Π Π΅ΡΠΎ ΡΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΆΡΡΠ½Π°Π»Π° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅. ΠΠΌΠ° ΡΠ°ΠΊΠ°Π²Π° ΡΡΠ½ΠΊΡΠΈΡ pg_xlog_location_diff ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ Π»Π°Π³Π° Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π² Π±Π°ΠΉΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠ° ΡΠΎΠ²Π° ΡΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΎΡ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ (VIEWs).
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: _ΠΠΌΠ΅ΡΡΠΎ pg_xlog_locationdiff() ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡΡ Π·Π° ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π°Π΄ΠΈ Π΅Π΄Π½ΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΎ. Π£Π΄ΠΎΠ±Π½ΠΎ Π΅.
Π‘ Π»Π°Π³Π°, ΠΊΠΎΠΉΡΠΎ Π΅ Π² ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠΊΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΡΡΠ²ΡΡ Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ, ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ° Π΅ Π±ΠΈΠ»Π° Π½ΡΠΊΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΈ 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 Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΡΠ°ΡΡΠ²Π°Ρ ΠΏΠΎΠ»Π΅ΡΠ°, ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½ΠΈ Π² Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ, ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ΠΈ. Π ΡΠ΅Π·ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ ΡΡΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΡΠΈΡΡΠ΅Π½ΠΈ.

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 β ΡΠΎΠ²Π° Π΅ ΡΠ΅ΠΆΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. ΠΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±Π»Π΅ΠΊΡΠΈ. ΠΠΌΠ° Π³ΠΎΡΠ΅ΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. Π’Π΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΡ
Π° Π² PostgreSQL Π²Π΅ΡΡΠΈΡ 8.3. Π ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΡΠΎΠ²Π°? Π’ΠΎΠ²Π° Π΅ Π»Π΅ΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. Π’ΠΎΠ΅ΡΡ, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ
ΠΌΠ΅ Π·Π°ΠΏΠΈΡΠ°, Π½ΠΎ ΠΏΡΠΈ ΡΠΎΠ²Π° ΠΎΠ±Π½ΠΎΠ²Π΅Π½Π° ΡΠ°ΠΌΠΎ Π·Π°ΠΏΠΈΡΠΊΠ°ΡΠ° Π² ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° (ΠΊΠΎΡΡΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°), Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠΎΡΠ°Ρ ΠΊΡΠΌ ΡΡΡΠΈΡ Π·Π°ΠΏΠΈΡ Π² ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°. ΠΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΈΠΌ, ΠΊΠΎΠ³Π°ΡΠΎ Π΄ΠΎΠΉΠ΄Π΅ Π²Π°ΠΊΡΡΠΌ, ΡΠΎΠΉ ΡΠ΅Π·ΠΈ Π²ΡΡΠ·ΠΊΠΈ Π³ΠΎΡΠ΅ΡΠΈ ΠΏΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ° ΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π±Π΅Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅, ΠΈ ΡΡΠ°Π²Π° Π²ΡΠΈΡΠΊΠΎ Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠ°Π·Ρ
ΠΎΠ΄ Π½Π° ΡΠ΅ΡΡΡΡΠΈ.
Π ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΡΠ΅ n_tup_hot_upd Π³ΠΎΠ»ΡΠΌΠΎ, ΡΠΎ ΡΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π»Π΅ΠΊΠΈΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°Π²Π°Ρ ΠΈ ΡΠΎΠ²Π° Π΅ ΠΏΠΎ-Π΅Π²ΡΠΈΠ½ΠΎ Π·Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΈ Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ.

ALTER TABLE table_name SET (fillfactor = 70);ΠΠ°ΠΊ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ ΠΎΠ±Π΅ΠΌΠ° Π½Π° Π³ΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ fillfactor. Π’ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° INSERT-ΠΎΠ²Π΅. ΠΠΎΠ³Π°ΡΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΡΠ΅ ΠΏΡΠ°Π²ΡΡ Π²ΠΌΡΠΊΠ²Π°Π½ΠΈΡ, ΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π·Π°ΠΏΡΠ»Π²Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, Π½Π΅ ΠΎΡΡΠ°Π²ΡΡ Π² Π½Π΅Ρ ΠΏΡΠ°Π·Π½ΠΎ ΠΌΡΡΡΠΎ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²ΡΠ΄Π΅Π»Ρ Π½ΠΎΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΡΠ½ΠΎΠ²ΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ Π·Π°ΠΏΡΠ»Π²Π°Ρ. Π ΡΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅, 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 β ΡΠΎΠ²Π° Π΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. Π’Ρ Π΅ ΠΌΠ°Π»ΠΊΠ°. Π ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅. Π Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ ΡΠ° ΠΈΠ·Π»ΠΈΡΠ½ΠΈ.

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

ΠΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ 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 ΠΈΠ»ΠΈ false.
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(), Ρ.Π΅. ΡΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° Π² shared buffers ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠΎΡΠΈ. Π ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΎΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΡ ΠΊΠ΅Ρ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Ρ.Π΅. Π² ΠΊΠ°ΠΊΡΠ² ΠΎΠ±Π΅ΠΌ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² page cache, Π² shared buffers ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ» β pg_stat_kcache. Π’ΠΎΠΉ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ getrusage(). Π Π³ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠ΅Π΄ΠΈ ΠΈ ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ. Π Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ ΠΊΠΎΠ»ΠΊΠΎ Π΄ΠΈΡΠΊΡΡ Π΅ ΠΈΠ·ΡΠ°Π·Ρ
ΠΎΠ΄Π²Π°Π½ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²Ρ
ΠΎΠ΄-ΠΈΠ·Ρ
ΠΎΠ΄, Ρ.Π΅. ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ Π΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π½ΠΎΠ² (ΠΊΡ
Π΅-ΠΊΡ
Π΅) ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π° PostgreSQL 9.4 ΠΈ pg_stat_statements, Π·Π° ΠΊΠΎΠΈΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ
ΠΏΠΎ-ΡΠ°Π½ΠΎ.

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

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