Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π Π°Π·ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΏΡ€Π΅Π· 2015 Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° АлСксСй ЛСсовски "Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL"

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ отговорност ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°: Π©Π΅ ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ Π΅ Π΄Π°Ρ‚ΠΈΡ€Π°Π½ ΠΎΡ‚ Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ 2015 Π³ΠΎΠ΄ΠΈΠ½Π° β€” ΠΈΠ·ΠΌΠΈΠ½Π°Π»ΠΈ са ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 4 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅. ВСрсията Π½Π° която става Π²ΡŠΠΏΡ€ΠΎΡ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π° 9.4 Π²Π΅Ρ‡Π΅ Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°. ΠŸΡ€Π΅Π· послСднитС 4 Π³ΠΎΠ΄ΠΈΠ½ΠΈ излязоха 5 Π½ΠΎΠ²ΠΈ вСрсии, Π² ΠΊΠΎΠΈΡ‚ΠΎ сС появиха ΠΌΠ½ΠΎΠ³ΠΎ нововъвСдСния, подобрСния ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ относно статистиката ΠΈ част ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΡ‚Π΅ са остарСли ΠΈ Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°Ρ… Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ° Ρ‚Π΅Π·ΠΈ мСста, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π±Π»ΡƒΠΆΠ΄Π°Π²Π°ΠΌ читатСля. НС сС Π·Π°Π΅Ρ… Π΄Π° ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ° Ρ‚Π΅Π·ΠΈ части, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ са ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ‰Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ съвсСм Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π΄ΠΎΠΊΠ»Π°Π΄.

Π‘Π£Π‘Π” PostgreSQL Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΡΡŠΡΡ‚ΠΎΡΡ‰ сС ΠΎΡ‚ мноТСство подсистСми, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅ пряко влияС Π½Π° производитСлността Π½Π° Π‘Π£Π‘Π”. Π’ процСса Π½Π° Сксплоатация сС ΡΡŠΠ±ΠΈΡ€Π° статистика ΠΈ информация Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ СфСктивността Π½Π° PostgreSQL ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ ΠΌΠ΅Ρ€ΠΊΠΈ Π·Π° повишаванС Π½Π° производитСлността. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, информацията Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π΅ прСдставСна Π² доста опростСн Π²ΠΈΠ΄. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ информация ΠΈ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ Ρ‚ΡŠΠ»ΠΊΡƒΠ²Π°Π½Π΅ понякога Π΅ съвсСм Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½Π° Π·Π°Π΄Π°Ρ‡Π°, Π° "Π·ΠΎΠΎΠΏΠ°Ρ€ΠΊΡŠΡ‚" ΠΎΡ‚ инструмСнти ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ лСсно Π±ΠΈ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΠ» Π΄ΠΎΡ€ΠΈ Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π» DBA.
Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски


Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΠΈ Π²ΠΈΠ΄Π΅ΠΎ

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅! Аз съм АлСксСй. ΠšΠ°ΠΊΡ‚ΠΎ ΠΊΠ°Π·Π° Иля, Π°Π· Ρ‰Π΅ говоря Π·Π° статистиката Π½Π° PostgreSQL.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Бтатистика Π½Π° активността Π½Π° PostgreSQL. PostgreSQL ΠΈΠΌΠ° Π΄Π²Π΅ статистики. Бтатистиката Π½Π° активността, Π·Π° която Ρ‰Π΅ става Π΄ΡƒΠΌΠ°. И статистиката Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΠ° относно Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅. Аз Ρ‰Π΅ говоря ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° статистиката Π½Π° активността Π½Π° PostgreSQL, която Π½ΠΈ позволява Π΄Π° оцСнявамС производитСлността ΠΈ ΠΊΠ°ΠΊ Π΄Π° я подобрявамС.

Π©Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ статистиката Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ ΠΈΠ»ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Какво няма Π΄Π° ΠΈΠΌΠ° Π² Π΄ΠΎΠΊΠ»Π°Π΄Π°? Π’ Π΄ΠΎΠΊΠ»Π°Π΄Π° няма Π΄Π° сС обсъТда статистиката Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΠ°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‚Π΄Π΅Π»Π½Π° Ρ‚Π΅ΠΌΠ° Π·Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π΄ΠΎΠΊΠ»Π°Π΄ относно Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² Π±Π°Π·Π°Ρ‚Π° ΠΈ Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° заявкитС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° информация Π·Π° качСствСнитС ΠΈ количСствСнитС характСристики Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

Няма Π΄Π° ΠΈΠΌΠ° ΠΏΡ€Π΅Π³Π»Π΅Π΄ΠΈ Π½Π° инструмСнти, няма Π΄Π° сравнявам Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ с Π΄Ρ€ΡƒΠ³. Никаква Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° няма Π΄Π° ΠΈΠΌΠ°. Π”Π° оставим Ρ‚ΠΎΠ²Π° настрана.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Искам Π΄Π° Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° статистика Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. НС Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ Π΄Π° я ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. НуТно Π΅ само ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ SQL ΠΈ основни познания Π·Π° SQL.

И Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²Π° статистика Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ PostgreSQL ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма стартирамС ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° процСситС, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ "Ρ‡Π΅Ρ€Π½Π° кутия". Π©Π΅ Π²ΠΈΠ΄ΠΈΠΌ някакви процСси, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ правят, ΠΈ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° си прСдставим ΠΊΠ°ΠΊΠ²ΠΎ правят, с ΠΊΠ°ΠΊΠ²ΠΎ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ‚. Но ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ, Ρ‚ΠΎΠ²Π° Π΅ Ρ‡Π΅Ρ€Π½Π° кутия, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π²ΡŠΡ‚Ρ€Π΅.

МоТСм Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° процСсора Π² top, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Ρ‡Ρ€Π΅Π· някои систСмни инструмСнти, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π²ΡŠΡ‚Ρ€Π΅ Π² PostgreSQL. Π—Π° Ρ‚ΠΎΠ²Π° Π½ΠΈ трябват Π΄Ρ€ΡƒΠ³ΠΈ инструмСнти.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

И ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΉΠΊΠΈ, Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° къдС сС Π³ΡƒΠ±ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ. Ако си прСдставим PostgreSQL ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° схСма, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠ° къдС сС Π³ΡƒΠ±ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ. Има Π΄Π²Π΅ Π½Π΅Ρ‰Π°: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° клиСнтскитС заявки ΠΎΡ‚ прилоТСнията ΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ PostgreSQL изпълнява, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° своята работоспособност.

Ако Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡ‚ горния ляв ъгъл, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° прослСдим ΠΊΠ°ΠΊ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ клиСнтскитС заявки. Заявката ΠΈΠ΄Π²Π° ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π° сС отваря клиСнтска сСсия. Заявката сС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Ρ Π² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΠ°. ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΡŠΡ‚ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° ΠΏΠ»Π°Π½ Π·Π° заявката. Π˜Π·ΠΏΡ€Π°Ρ‰Π° Π³ΠΎ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Π·Π° изпълнСниС. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎ-ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΎ дСйствиС, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ индСкситС. НСобходимитС Π΄Π°Π½Π½ΠΈ сС Ρ‡Π΅Ρ‚Π°Ρ‚ ΠΎΡ‚ дисковСтС Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π² спСциална област "shared buffers". Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ заявката, Π°ΠΊΠΎ са Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, изтривания, сС фиксират Π² ΠΆΡƒΡ€Π½Π°Π»Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² WAL. Някаква статистичСска информация ΠΏΠΎΠΏΠ°Π΄Π° Π² Π»ΠΎΠ³ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ Π·Π° статистика. И Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ заявката сС Π²Ρ€ΡŠΡ‰Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈ всичко ΠΎΡ‚Π½ΠΎΠ²ΠΎ с Π½ΠΎΠ²Π° заявка.

Какво ΠΈΠΌΠ°ΠΌΠ΅ с Ρ„ΠΎΠ½ΠΎΠ²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΈΡ‚Π΅ процСси? Има няколко процСса, ΠΊΠΎΠΈΡ‚ΠΎ осигуряват работоспособността ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π² Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ. Π’Π΅Π·ΠΈ процСси ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ засСгнати Π² Π΄ΠΎΠΊΠ»Π°Π΄Π°: autovacuum, checkpointer, процСси, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с рСпликацията, background writer. ВсСки Π΅Π΄ΠΈΠ½ ΠΎΡ‚ тях Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Какви ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠΌΠ° със статистиката?

  • Има ΠΌΠ½ΠΎΠ³ΠΎ информация. PostgreSQL 9.4 прСдоставя 109 ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° статистичСскитС Π΄Π°Π½Π½ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, схСми ΠΈΠ»ΠΈ Π±Π°Π·ΠΈ, всички Ρ‚Π΅Π·ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Ρ‰Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π±Ρ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈΠ»ΠΈ Π±Π°Π·ΠΈ. ВоСст, информацията става ΠΎΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅. И Π΅ ΠΌΠ½ΠΎΠ³ΠΎ лСсно Π΄Π° сС ΠΈΠ·Π³ΡƒΠ±ΠΈΡ‚Π΅ Π² нСя.
  • БлСдващият ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅, Ρ‡Π΅ статистиката Π΅ прСдставСна Ρ‡Ρ€Π΅Π· броячи. Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Ρ‚Π°Π·ΠΈ статистика, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ постоянно нарастващи стойности. И Π°ΠΊΠΎ ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° статистиката Π΅ ΠΌΠΈΠ½Π°Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄ΠΈ стойности. А Ρ‚Π΅ Π½Π΅ Π½ΠΈ ΠΊΠ°Π·Π²Π°Ρ‚ Π½ΠΈΡ‰ΠΎ.
  • Липсва история. Ако ΠΈΠΌΠ°Ρ‚Π΅ някакъв срив, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΡ‚ статистиката, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π±ΠΈΠ»ΠΎ случило 15-30 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Π½Π°Π·Π°Π΄. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.
  • Липсата Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ инструмСнт Π² PostgreSQL Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ядрото Π½Π΅ прСдоставят Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°. Нямат Π½ΠΈΡ‰ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π°. Π’Π΅ просто Π΄Π°Π²Π°Ρ‚ статистиката Π² Π±Π°Π·Π°Ρ‚Π°. ΠŸΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ я, ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅, ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ искатС.
  • Въй ΠΊΠ°Ρ‚ΠΎ няма Π²Π³Ρ€Π°Π΄Π΅Π½ инструмСнт Π² PostgreSQL, Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ външни инструмСнти. Всяка компания с ΠΏΠΎ-ΠΏΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΈ умСния сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° напишС собствСна ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. И Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π² общността ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ инструмСнти, с ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ със статистика. Π’ някои инструмСнти ΠΈΠΌΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, Π² Π΄Ρ€ΡƒΠ³ΠΈ няма, ΠΈΠ»ΠΈ пък ΠΈΠΌΠ° Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΡŠΠ·Π½ΠΈΠΊΠ²Π° ситуация, Π² която сС Π½Π°Π»Π°Π³Π° Π΄Π° ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΄Π²Π΅, Ρ‚Ρ€ΠΈ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ инструмСнта, ΠΊΠΎΠΈΡ‚ΠΎ частично сС ΠΏΡ€ΠΈΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‚ ΠΈ ΠΈΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ нСприятно.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Какво слСдва ΠΎΡ‚ Ρ‚ΠΎΠ²Π°? Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ°Ρ‚Π΅ статистика Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ, Π·Π° Π΄Π° Π½Π΅ зависитС ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅, ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ сами: Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ свои ΠΏΠΎΠ»Π·ΠΈ.

И са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ основни познания ΠΏΠΎ SQL. Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ някакви Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ статистиката, трябва Π΄Π° ΡΡŠΡΡ‚Π°Π²ΠΈΡ‚Π΅ SQL запитвания, тоСст трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΡΡŠΡΡ‚Π°Π²ΡΡ‚Π΅ select, join.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Бтатистиката Π½ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° няколко Π½Π΅Ρ‰Π°. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

  • ΠŸΡŠΡ€Π²Π°Ρ‚Π° катСгория – Ρ‚ΠΎΠ²Π° са ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ сС случват Π² Π±Π°Π·Π°Ρ‚Π°. Π’ΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π² Π±Π°Π·Π°Ρ‚Π° Π½Π°ΡΡ‚ΡŠΠΏΠΈ някоС ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅: заявка, Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π°Π²Ρ‚ΠΎ-Π²Π°ΠΊΡƒΡƒΠΌ, ΠΊΠΎΠΌΠΈΡ‚ΠΈ – всичко Ρ‚ΠΎΠ²Π° са ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Π‘Π²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ с Ρ‚Π΅Π·ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ броячи сС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚. И ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° прослСдим Ρ‚Π΅Π·ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ.
  • Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° катСгория – Ρ‚ΠΎΠ²Π° са свойства Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ Π±Π°Π·ΠΈ. Π’Π΅ ΠΈΠΌΠ°Ρ‚ свойства. Π’ΠΎΠ²Π° Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅. МоТСм Π΄Π° прослСдим растСТа Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, растСТа Π½Π° индСкситС. МоТСм Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°Ρ‚Π°.
  • И Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° катСгория – Ρ‚ΠΎΠ²Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°Π½ΠΎ Π·Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅. Заявката Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅. Вя ΠΈΠΌΠ° своя ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° мярка Π·Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚. Π’ΡƒΠΊ Π·Π°ΠΏΠΎΡ‡Π½Π°, Ρ‚ΡƒΠΊ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ. МоТСм Π΄Π° прослСдим Ρ‚ΠΎΠ²Π°. Или Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π±Π»ΠΎΠΊ ΠΎΡ‚ диска ΠΈΠ»ΠΈ запис. И Ρ‚Π°ΠΊΠΈΠ²Π° Π½Π΅Ρ‰Π° ΡΡŠΡ‰ΠΎ сС прослСдяват.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° статистиката са прСдставСни ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  • Π’ сподСлСната ΠΏΠ°ΠΌΠ΅Ρ‚ (shared buffers) ΠΈΠΌΠ° сСгмСнт Π·Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° статични Π΄Π°Π½Π½ΠΈ, Ρ‚Π°ΠΌ ΠΈΠΌΠ° ΠΈ ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ броячи, ΠΊΠΎΠΈΡ‚ΠΎ постоянно сС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π°ΡΡ‚ΡŠΠΏΡΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΈΠ»ΠΈ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΈ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π±Π°Π·Π°Ρ‚Π°.
  • Всички Ρ‚Π΅Π·ΠΈ броячи Π½Π΅ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° потрСбитСля ΠΈ Π΄ΠΎΡ€ΠΈ Π½Π΅ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° администратора. Π’ΠΎΠ²Π° са нискоуровнСви Π½Π΅Ρ‰Π°. Π—Π° Π΄Π° сС достигнС Π΄ΠΎ тях, PostgreSQL прСдоставя интСрфСйс ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° SQL Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. МоТСм Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ сСлСкти Ρ‡Ρ€Π΅Π· Ρ‚Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ някаква ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° (ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ).
  • ΠžΠ±Π°Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π·Π°Ρ‚ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ слуТат ΠΊΠ°Ρ‚ΠΎ основа Π·Π° прСдставлСния (VIEWs). Π’ΠΎΠ²Π° са Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставят статистика ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° подсистСма ΠΈΠ»ΠΈ ΠΏΠΎ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  • Π’Π΅Π·ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ прСдставлСния (VIEWs) са основният интСрфСйс Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с статистиката. Π’Π΅ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π±Π΅Π· ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° настройка, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, Π΄Π° Π³Π»Π΅Π΄Π°Ρ‚Π΅, Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ информация ΠΎΡ‚ тях. А ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠΌΠ° ΠΈ contrib ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. Contrib ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ са ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС ΠΏΠ°ΠΊΠ΅Ρ‚Π° postgresql-contrib (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, postgresql94-contrib), Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ нСобходимия ΠΌΠΎΠ΄ΡƒΠ» Π² конфигурацията, Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° Π½Π΅Π³ΠΎ, Π΄Π° рСстартиратС PostgreSQL ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅. (Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°. Π’ зависимост ΠΎΡ‚ дистрибутива, Π² послСднитС вСрсии, contrib ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ Π΅ част ΠΎΡ‚ основния ΠΏΠ°ΠΊΠ΅Ρ‚.).
  • Има ΠΈ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈ contrib. Π’Π΅ Π½Π΅ сС доставят Π² стандартната доставка Π½Π° PostgreSQL. Врябва ΠΈΠ»ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ, ΠΈΠ»ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ инсталирани ΠΊΠ°Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ, Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ измислил Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ contrib.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

На Ρ‚ΠΎΠ·ΠΈ слайд са прСдставСни всички VIEWs ΠΈ част ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π² PostgreSQL 9.4. ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‚Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ. И Π΅ доста лСсно Π΄Π° сС ΠΎΠ±ΡŠΡ€ΠΊΠ°Ρ‚Π΅, Π°ΠΊΠΎ сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚Π΅ с Ρ‚ΠΎΠ²Π° Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

ΠžΠ±Π°Ρ‡Π΅, Π°ΠΊΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Как сС ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π² PostgreSQL ΠΈ Π³ΠΎ ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΠΈΠΌ с Ρ‚ΠΎΠ·ΠΈ списък, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ слСдната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°. Всяко VIEW ΠΈΠ»ΠΈ всяка функция ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π΅Π»ΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° статистика, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π° с PostgreSQL. И ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ някаква информация Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° подсистСмата.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅, Π΅ pg_stat_database. ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‚ΠΎΠ²Π° Π΅ VIEW. Π’ Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ информация. Най-Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π° информация. И Ρ‚ΠΎ Π΄Π°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Π½ΠΈΠ΅ Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС случва Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

Какво ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΎΡ‚Ρ‚Π°ΠΌ? НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с Π½Π°ΠΉ-проститС Π½Π΅Ρ‰Π°.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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).

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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 Π΅ доста прост. И ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΡ€ΠΈ сСбС си.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

И Ρ‚ΡƒΠΊ Π²Π΅Π΄Π½Π°Π³Π° са ΠΏΡ€Π°Π³ΠΎΠ²ΠΈΡ‚Π΅ стойности. НиС наблюдавамС ΡΡŠΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ commits ΠΈ rollbacks. Commits – Ρ‚ΠΎΠ²Π° Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° транзакция. Rollbacks – Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚, Ρ‚.Π΅. транзакцията Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠ»Π° някаква Ρ€Π°Π±ΠΎΡ‚Π°, Π΅ Π½Π°ΠΏΡ€Π΅Π³Π½Π°Π»Π° Π±Π°Π·Π°Ρ‚Π°, Π½Π΅Ρ‰ΠΎ Π΅ изчислило, Π° слСд Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΡΡ‚ΡŠΠΏΠΈΠ»Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ транзакцията сС ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΡΡ‚. Π’.Π΅. броят Π½Π° постоянно ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Ρ‰ΠΈΡ‚Π΅ сС rollbacks Π΅ лошо. И трябва Π΄Π° сС избягват ΠΈ Π΄Π° сС поправя ΠΊΠΎΠ΄ΡŠΡ‚, Π·Π° Π΄Π° Π½Π΅ сС случва Ρ‚Π°ΠΊΠ°.

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅ (conflicts) са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с рСпликацията. И Ρ‚Π΅ ΡΡŠΡ‰ΠΎ трябва Π΄Π° сС избягват. Ако ΠΈΠΌΠ°Ρ‚Π΅ някакви заявки, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΈ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ, трябва Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ, Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ сС случва. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅. И Π΄Π° отстраняватС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π½ΠΈ ситуации, Π·Π° Π΄Π° работят заявкитС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ.

Deadlocks – Ρ‚ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΎ лоша ситуация. ΠšΠΎΠ³Π°Ρ‚ΠΎ заявки сС ΡΡŠΡΡ‚Π΅Π·Π°Π²Π°Ρ‚ Π·Π° рСсурси, Π΅Π΄Π½Π°Ρ‚Π° заявка сС ΠΎΠ±ΡŠΡ€Π½Π°Π»Π° към Π΅Π΄ΠΈΠ½ рСсурс ΠΈ Π΅ Π²Π·Π΅Π»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° заявка сС Π΅ ΠΎΠ±ΡŠΡ€Π½Π°Π»Π° към втория рСсурс ΠΈ ΡΡŠΡ‰ΠΎ Π΅ Π²Π·Π΅Π»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π° слСд Ρ‚ΠΎΠ²Π° ΠΈ Π΄Π²Π΅Ρ‚Π΅ заявки сС ΠΎΠ±Π°Π΄ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ Π½Π° Π΄Ρ€ΡƒΠ³ Π·Π° рСсурси ΠΈ са сС Π±Π»ΠΎΠΊΠΈΡ€Π°Π»ΠΈ Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΡΠ΅Π΄ΡΡ‚ Ρ‰Π΅ освободи Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ‚Π°. Π’ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° ситуация. Врябва Π΄Π° сС Ρ€Π΅ΡˆΠ°Π²Π° Π½Π° Π½ΠΈΠ²ΠΎ прСписванС Π½Π° прилоТСния ΠΈ сСриализация Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ рСсурситС. И Π°ΠΊΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Ρ‡Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ deadlocks постоянно нарастват, трябва Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ подробноститС Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅, Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Π»ΠΈΡ‚Π΅ ситуации ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²Π° Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚.

Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (temp_files) – Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ Π΅ лошо. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π½Π° потрСбитСлската заявка Π½Π΅ ѝ достига ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈ, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ, тя създава Ρ„Π°ΠΉΠ» Π½Π° диска. И всички ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π±ΠΈ ΠΌΠΎΠ³Π»Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π² врСмСнния Π±ΡƒΡ„Π΅Ρ€ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π²Π΅Ρ‡Π΅ Π½Π° диска. Π’ΠΎΠ²Π° Π΅ Π±Π°Π²Π½ΠΎ. Π’ΠΎΠ²Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° заявката. И ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚, ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» заявка към PostgreSQL, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-късно. Ако всички Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Postgres Ρ‰Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Ρ‰Π΅ Ρ‡Π°ΠΊΠ° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Pg_stat_bgwriter – Ρ‚ΠΎΠ²Π° прСдставлСниС описва Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π΄Π²Π΅Ρ‚Π΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΈ подсистСми Π½Π° PostgreSQL: Ρ‚ΠΎΠ²Π° Π΅ checkpointer ΠΈ background writer.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

ΠŸΡŠΡ€Π²ΠΎ, Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, Ρ‚.Π½. 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.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° подсистСма Π΅ Ρ„ΠΎΠ½ΡŠΡ‚ писатСл β€” 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-Π° ΠΈ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ производитСлността Π½Π° дисковата подсистСма.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: _БлСдващият тСкст описва статистичСскитС прСдставяния, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с рСпликацията. По-голямата част ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° прСдставяния ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ бяха ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ Π² Postgres 10. Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° прСимСнуванията Π΅ Π΄Π° сС Π·Π°ΠΌΠ΅Π½ΠΈ xlog Π½Π° wal ΠΈ location Π½Π° Π² ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ/прСдставяния ΠΈ Ρ‚.Π½. ЧастСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€, функцията pg_xlog_location_diff() бСшС ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π° Π½Π° pg_wal_lsn_diff() Π’ΡƒΠΊ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‰Π°. Но Ρ‰Π΅ Π½ΠΈ трябват само Ρ‚ΠΎΡ‡ΠΊΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с мСстополоТСниСто.._

Ако Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ всички стойности са Ρ€Π°Π²Π½ΠΈ, Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π΅ идСалният Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π° Π½Π΅ изостава ΠΎΡ‚ мастСра.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π’Π°Π·ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Π΅ΡΠ΅Ρ‚ΠΈΡ‡Π½Π° позиция – Ρ‚ΠΎΠ²Π° Π΅ позиция Π² ΠΆΡƒΡ€Π½Π°Π»Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅. Вя постоянно сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°, Π°ΠΊΠΎ Π² Π±Π°Π·Π°Ρ‚Π° ΠΈΠΌΠ° някаква активност: вставки, изтривания ΠΈ Ρ‚.Π½.

ΠΊΠΎΠ»ΠΊΠΎ Π΅ записано 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());

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Ако Ρ‚Π΅Π·ΠΈ Π½Π΅Ρ‰Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚, Π·Π½Π°Ρ‡ΠΈ ΠΈΠΌΠ° някакво изоставанС. Π˜Π·ΠΎΡΡ‚Π°Π²Π°Π½Π΅Ρ‚ΠΎ – Ρ‚ΠΎΠ²Π° Π΅ забавянСто Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π° спрямо мастСра, Ρ‚.Π΅. Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅.

Има Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π·Π° изоставанС:

Π’ΠΎΠ²Π° Π΅ дисковата подсистСма, която Π½Π΅ успява Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ синхронизацията Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅.

  • Π’ΠΎΠ²Π° са възмоТни ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π΅ успяват Π΄Π° стигнат Π΄ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π° ΠΈ тя Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅.
  • И процСсора. ΠŸΡ€ΠΎΡ†Π΅ΡΠΎΡ€ΡŠΡ‚ – Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€ΡΠ΄ΡŠΠΊ случай. И съм Π²ΠΈΠΆΠ΄Π°Π» Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ ΠΏΡŠΡ‚ΠΈ, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС.
  • И Ρ‚ΡƒΠΊ ΠΈΠΌΠ° Ρ‚Ρ€ΠΈ запитвания, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈ позволяват Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ статистиката. МоТСм Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ, ΠΊΠΎΠ»ΠΊΠΎ Π΅ записано Π² нашия ΠΆΡƒΡ€Π½Π°Π» Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅. Има Ρ‚Π°ΠΊΠ°Π²Π° функция

pg_xlog_location_diff ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ изоставанСто Π½Π° рСпликацията Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅ ΠΈ сСкунди. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ стойността ΠΎΡ‚ Ρ‚ΠΎΠ²Π° прСдставянС (VIEWs). _ВмСсто pg_xlog_location

Π‘Π΅Π»Π΅ΠΆΠΊΠ°: diff() функцията ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π° сС ΠΈΠ·Π²Π°Π΄ΠΈ Π΅Π΄Π½ΠΎ мСстополоТСниС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎ. Π£Π΄ΠΎΠ±Π½ΠΎ Π΅.Π‘ изоставанСто, ΠΊΠΎΠ΅Ρ‚ΠΎ Π² сСкунди, ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Ако Π½Π° мастСра Π½Π΅ сС случва Π½ΠΈΠΊΠ°ΠΊΠ²Π° активност, транзакцията Ρ‚Π°ΠΌ Π΅ Π±ΠΈΠ»Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΈ няма активност, ΠΈ Π°ΠΊΠΎ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Ρ‚ΠΎΠ²Π° изоставанС, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ изоставанС ΠΎΡ‚ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. Π—Π° Ρ‚ΠΎΠ²Π° трябва Π΄Π° сС ΠΏΠΎΠΌΠ½ΠΈ. И Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡŠΡ€ΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ Ρ‚ΠΎΠ²Π° изоставанС.

Π‘ Π»Π°Π³, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π² сСкунди, ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Ако Π½Π° мастСра няма активност, транзакцията Π΅ Π±ΠΈΠ»Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΈ няма активност, ΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Ρ‚ΠΎΠ·ΠΈ Π»Π°Π³ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π°, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π»Π°Π³ ΠΎΡ‚ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. Π’ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅. И ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡŠΡ€ΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Π»Π°Π³.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Pg_stat_all_tables – Π΅Π΄Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ прСдставлСниС. Π’ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° статистика Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, с ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ° някаква активност, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ информация ΠΎΡ‚ Ρ‚ΠΎΠ²Π° прСдставлСниС.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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-запрос, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΠΎΡ†Π΅Π½ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Ρ†ΠΈΡ„Ρ€ΠΈ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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 ΠΈ ΡΡŠΡ‰ΠΎ Π΄Π° сС видят Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ индСкситС.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ сС Π²Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ индСкситС ΠΈΠ»ΠΈ Π±Π΅Π· тях, ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ относно растСТа Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Ρ‚.Π΅. ΠΊΠ°ΠΊ растС, с ΠΊΠ°ΠΊΠ²Π° интСнзивност ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈΠ·Π²ΠΎΠ΄ΠΈ Π·Π° оптимизацията Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Активност Π½Π° запис. Какво прСдставлява Π·Π°ΠΏΠΈΡΡŠΡ‚? НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ опСрацията UPDATE – опСрация Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°. По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ, update – Ρ‚ΠΎΠ²Π° Π΅ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅). Π’ΠΎΠ²Π° Π΅ вмъкванС Π½Π° Π½ΠΎΠ²Π° вСрсия Π½Π° Ρ€Π΅Π΄Π° ΠΈ отбСлязванС Π½Π° старата вСрсия Π½Π° Ρ€Π΅Π΄Π° ΠΊΠ°Ρ‚ΠΎ остаряла. ВпослСдствиС Ρ‰Π΅ Π΄ΠΎΠΉΠ΄Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ Π²Π°ΠΊΡƒΡƒΠΌ ΠΈ Ρ‚Π΅Π·ΠΈ остарСли вСрсии Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ изчистСни ΠΈ мястото Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.

ОсвСн Ρ‚ΠΎΠ²Π°, update – Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ само Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°. Π’ΠΎΠ²Π° Π΅ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° индСкси. Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ индСкси Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, ΠΏΡ€ΠΈ update всички индСкси, Π² ΠΊΠΎΠΈΡ‚ΠΎ участват ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π°, Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π² Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ, ΡΡŠΡ‰ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ. Π’ Ρ‚Π΅Π·ΠΈ индСкси ΡΡŠΡ‰ΠΎ Ρ‰Π΅ ΠΈΠΌΠ° остарСли вСрсии Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изчистСни.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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 ΠΏΡ€Π΅ΠΎΠ±Π»Π°Π΄Π°Π²Π°Ρ‚ ΠΈ рСсурситС ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ ΠΏΠΎ-Π΅Π²Ρ‚ΠΈΠ½ΠΎ ΠΈ всичко Π΅ прСкрасно.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

ALTER TABLE table_name SET (fillfactor = 70);

Как Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ ΠΎΠ±Π΅ΠΌΠ° Π½Π° hot updateΠΈΡ‚Π΅? МоТСм Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ fillfactor. Π’ΠΎΠΉ опрСдСля Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ свободно място ΠΏΡ€ΠΈ попълванС Π½Π° страницата Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с INSERT'ΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π²Π»ΠΈΠ·Π°Ρ‚ inserts, Ρ‚Π΅ напълно Π·Π°ΠΏΡŠΠ»Π²Π°Ρ‚ страницата, Π½Π΅ оставят ΠΏΡ€Π°Π·Π½ΠΎ място Π² нСя. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° сС задСля Π½ΠΎΠ²Π° страница. ΠžΡ‚Π½ΠΎΠ²ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС Π·Π°ΠΏΡŠΠ»Π²Π°Ρ‚. И Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, fillfactor = 100%.

МоТСм Π΄Π° настроим fillfactor Π½Π° 70%. ВоСст, ΠΏΡ€ΠΈ вставки сС прСдСлява Π½ΠΎΠ²Π° страница, Π½ΠΎ запълва само 70% ΠΎΡ‚ нСя. А 30% остават Π·Π° Ρ€Π΅Π·Π΅Ρ€Π². ΠšΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ актуализация, тя с висока вСроятност Ρ‰Π΅ сС случи Π½Π° ΡΡŠΡ‰Π°Ρ‚Π° страница, ΠΈ Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° Ρ€Π΅Π΄Π° Ρ‰Π΅ сС постави Π½Π° ΡΡŠΡ‰Π°Ρ‚Π° страница. Π©Π΅ бъдС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ hot_update. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ сС ΠΎΠ±Π»Π΅ΠΊΡ‡Π°Π²Π° Π·Π°ΠΏΠΈΡΡŠΡ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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" ΠΎΡ‚ всички Ρ€Π΅Π΄ΠΎΠ²Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, поставямС Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π½Π° Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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 (Π»ΠΈΠ½ΠΊΡŠΡ‚ Π½Π° слайда Π΅ Π½Π΅Π²Π°Π»ΠΈΠ΄Π΅Π½ ΠΈ Π΅ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ Π² тСкста).

Π’Π΅ написаха Π·Π° munin plugin, ΠΊΠΎΠΉΡ‚ΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ‚Π΅Π·ΠΈ Π½Π΅Ρ‰Π°. Има дълъг списък Π½Π° Π΄Π²Π° листа. Но Ρ‚ΠΎΠΉ изчислява ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ доста Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ позволява Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ къдС ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΊΡƒΡƒΠΌ Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, Π° къдС – ΠΌΠ°Π»ΠΊΠΎ.

Какво ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ с Ρ‚ΠΎΠ²Π°? Ако ΠΈΠΌΠ°ΠΌΠ΅ голяма опашка ΠΈ автоматичният Π²Π°ΠΊΡƒΡƒΠΌ Π½Π΅ справя, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ броя Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° Π²Π°ΠΊΡƒΡƒΠΌΠ° ΠΈΠ»ΠΈ просто Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π²Π°ΠΊΡƒΡƒΠΌΠ° ΠΏΠΎ-агрСсивСн, Π·Π° Π΄Π° сС Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ΠΈΡ€Π° ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΈ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΏΠ°Ρ€Ρ‡Π΅Π½Ρ†Π°. И Ρ‚Π°ΠΊΠ° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Ρ‰Π΅ сС Π½Π°ΠΌΠ°Π»ΠΈ. β€” ΠžΡΠ½ΠΎΠ²Π½ΠΎΡ‚ΠΎ Ρ‚ΡƒΠΊ Π΅ Π΄Π° сС слСди Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° дисковСтС, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π°ΠΊΡƒΡƒΠΌΡŠΡ‚ Π½Π΅ Π΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π΅Π½, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ с появата Π½Π° SSD/NVMe устройства ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ стана ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Pg_stat_all_indexes – Ρ‚ΠΎΠ²Π° Π΅ статистика Π·Π° индСкситС. Вя Π΅ ΠΌΠ°Π»ΠΊΠ°. И ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ информация Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° индСкситС. НапримСр ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΈ индСкси Π½ΠΈ излишни.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнах, update – Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ само ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, Π° ΡΡŠΡ‰ΠΎ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° индСкситС. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ индСкси Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅, индСкситС Π½Π° индСксиранитС ΠΏΠΎΠ»Π΅Ρ‚Π° ΡΡŠΡ‰ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ΠΈ, ΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ индСкси, ΠΏΠΎ ΠΊΠΎΠΈΡ‚ΠΎ няма индСксни сканирания, Ρ‚Π΅ Π½ΠΈ Ρ‚Π΅ΠΆΠ°Ρ‚ баласт. И трябва Π΄Π° сС ΠΎΡ‚ΡŠΡ€Π²Π΅ΠΌ ΠΎΡ‚ тях. Π—Π° Ρ‚ΠΎΠ²Π° Π½ΠΈ трябва ΠΏΠΎΠ»Π΅ idx_scan. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π³Π»Π΅Π΄Π°ΠΌΠ΅ броя Π½Π° индСкснитС сканирания. Ако индСкситС ΠΈΠΌΠ°Ρ‚ Π½ΡƒΠ»Π° сканирания Π·Π° относитСлно дълъг ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° статистиката (Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 2-3 сСдмици), Π½Π°ΠΉ-вСроятно Ρ‚Π΅Π·ΠΈ индСкси са лоши, трябва Π΄Π° сС ΠΎΡ‚ΡŠΡ€Π²Π΅ΠΌ ΠΎΡ‚ тях.

Π‘Π΅Π»Π΅ΠΆΠΊΠ°: ΠŸΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ индСкси Π² случай Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π° рСпликация Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ всички възли Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ статистиката Π½Π΅ Π΅ Π³Π»ΠΎΠ±Π°Π»Π½Π°, ΠΈ Π°ΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° майстора, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅ (Π°ΠΊΠΎ Ρ‚Π°ΠΌ ΠΈΠΌΠ° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅).

Π”Π²Π° Π»ΠΈΠ½ΠΊΠ°:

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

http://www.databasesoup.com/2014/05/new-finding-unused-indexes-query.html

Π’ΠΎΠ²Π° са ΠΏΠΎ-Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° запитвания ΠΊΠ°ΠΊ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΠΌ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ индСкси.

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° врска Π΅ доста интСрСсСн запрос. Π’ΡƒΠΊΠ° Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° доста Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΡ˜Π°Π»Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°. Ја ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌ Π·Π° запознавањС.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π¨Ρ‚ΠΎ ΡƒΡˆΡ‚Π΅ Π΄Π° сС Ρ€Π΅Π·ΠΈΠΌΠΈΡ€Π° Π·Π° индСкситС?

  • НСискористСнитС индСкси – Ρ‚ΠΎΠ° Π΅ лошо.

  • Π—Π΅ΠΌΠ°Π°Ρ‚ простор.

  • Π—Π°Π΄ΠΎΡ†Π½ΡƒΠ²Π°Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅.

  • Π’ΠΈΡˆΠΎΠΊ Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° Π²Π°ΠΊΡƒΡƒΠΌΠΎΡ‚.

Ако Π³ΠΈ ΠΈΠ·Π±Ρ€ΠΈΡˆΠΈΠΌΠ΅ нСискористСнитС индСкси, само ќС ја ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌΠ΅ Π±Π°Π·Π°Ρ‚Π°.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π‘Π»Π΅Π΄Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π΅Ρ‚ΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π΅ pg_stat_activity. Π’ΠΎΠ° Π΅ Π°Π½Π°Π»ΠΎΠ³ Π½Π° Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° ps, само ΡˆΡ‚ΠΎ Π΅ Π²ΠΎ PostgreSQL. Ако psΠ³Π»Π΅Π΄Π°Ρ‚Π΅ процСситС Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм, Ρ‚ΠΎΠ³Π°Ρˆ pg_stat_activity ќС Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° активноста Π²ΠΎ PostgreSQL.

Π¨Ρ‚ΠΎ корисно ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌΠ΅ ΠΎΠ΄ Ρ‚Π°ΠΌΡƒ?

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

select
count(*)*100/(select current_setting('max_connections')::int)
from pg_stat_activity;

МоТСмС Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π½Π° Ρ†Π΅Π»ΠΎΠΊΡƒΠΏΠ½Π°Ρ‚Π° активност, ΡˆΡ‚ΠΎ сС случува Π²ΠΎ Π±Π°Π·Π°Ρ‚Π°. МоТСмС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Π½ΠΎΠ²Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ˜Π°. Π’ΡƒΠΊΠ° сè Сксплодира, Π½ΠΎΠ²ΠΈ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ° Π½Π΅ сС ΠΏΡ€ΠΈΠΌΠ°Π°Ρ‚, Π³Ρ€Π΅ΡˆΠΊΠΈ Ρ„Ρ€Π»Π°Π°Ρ‚ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

select
client_addr, usename, datname, count(*)
from pg_stat_activity group by 1,2,3 order by 4 desc;

МоТСмС Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ ΠΎΠ²Π°ΠΊΠΎΠ² запрос ΠΈ Π΄Π° ја ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Ρ†Π΅Π»ΠΎΠΊΡƒΠΏΠ½Π°Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΡƒΠ°Π»Π½Π° врска Π²ΠΎ однос Π½Π° максималниот Π»ΠΈΠΌΠΈΡ‚ Π½Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ° ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ кој Π½Π°Ρ˜ΠΌΠ½ΠΎΠ³Ρƒ користи ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ°. И Π²ΠΎ Π΄Π°Π΄Π΅Π½ΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° корисникот cron_role ΠΎΡ‚Π²ΠΎΡ€ΠΈΠ» 508 ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ°. И Π½Π΅ΡˆΡ‚ΠΎ ΠΌΡƒ сС случило. Π’Ρ€Π΅Π±Π° Π΄Π° сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ со Π½Π΅Π³ΠΎ ΠΈ Π΄Π° Π³Π»Π΅Π΄Π°ΠΌΠ΅. И ΠΌΠ½ΠΎΠ³Ρƒ Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠ° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π° Π½Π΅ΠΊΠ°ΠΊΠ²Π° Π°Π½ΠΎΠΌΠ°Π»Π½Π° Π±Ρ€ΠΎΡ˜ΠΊΠ° Π½Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ°.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Ако ΠΈΠΌΠ°ΠΌΠ΅ OLTP ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅, запроситС ΠΌΠΎΡ€Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ Π±Ρ€Π·ΠΎ, ΠΌΠ½ΠΎΠ³Ρƒ Π±Ρ€Π·ΠΎ, ΠΈ Π½Π΅ смСат Π΄Π° ΠΈΠΌΠ° Π΄ΠΎΠ»Π³ΠΈ запроси. Π‘Π΅ΠΏΠ°ΠΊ, Π°ΠΊΠΎ сС ΠΏΠΎΡ˜Π°Π²Π°Ρ‚ Π΄ΠΎΠ»Π³ΠΈ запроси, Π²ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΡ€ΠΎΡ‡Π½Π° пСрспСктива Π½Π΅ΠΌΠ° Π½ΠΈΡˆΡ‚ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Π½ΠΎ Π²ΠΎ долгосрочна пСрспСктива, Π΄ΠΎΠ»Π³ΠΈ запроси нанСсуваат ΡˆΡ‚Π΅Ρ‚Π° Π½Π° Π±Π°Π·Π°Ρ‚Π°, Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°Π°Ρ‚ Π΅Ρ„Π΅ΠΊΡ‚ Π½Π° bloat Π½Π° Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π° Π΄ΠΎΠ°Ρ“Π° Π΄ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅. И ΠΎΠ΄ bloat, ΠΈ ΠΎΠ΄ Π΄ΠΎΠ»Π³ΠΈ запроси, Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ослободимС.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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, Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΏΠ»Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΈ Π½Π΅ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅. Π’Π΅ΠΊΠΎΠ²Π½ΠΈΡ‚Π΅ Π΄ΠΎΠ»Π³ΠΈ запроси Π³ΠΈ одстранувамС ΠΈ ΠΏΠΎΠ½Π°Ρ‚Π°ΠΌΡƒ ΠΆΠΈΠ²Π΅Π΅ΠΌΠ΅.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

Π›ΠΎΡˆΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ – Ρ‚ΠΎΠ° сС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π²ΠΎ ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° idle in transaction ΠΈ idle in transaction (aborted).

Какво ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°? Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΈΠΌΠ°Ρ‚ няколко ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ, ΠΈ Π΅Π΄Π½ΠΎ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅. Π—Π° опрСдСлянС Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡΡ‚Π° ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ state Π² Ρ‚ΠΎΠ²Π° прСдставянС. И Π½ΠΈΠ΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° опрСдСлянС Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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()Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изчислСниС. ЗатварямС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнах, Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ – Ρ‚ΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π²Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ сС борят Π·Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠ° рСсурси. Π—Π° Ρ†Π΅Π»Ρ‚Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΠ»Π΅ waiting с Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ истинно ΠΈΠ»ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎ.

True – Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅, Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ сС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅, Π·Π½Π°Ρ‡ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Π» Ρ‚ΠΎΠ·ΠΈ процСс, ΡΡŠΡ‰ΠΎ Ρ‡Π°ΠΊΠ°. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° сидят ΠΈ ΡΡŠΡ‰ΠΎ Ρ‡Π°ΠΊΠ°.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: _Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ вСрсия Postgres 9.6, ΠΏΠΎΠ»Π΅Ρ‚ΠΎ waiting Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΎ ΠΈ вмСсто Π½Π΅Π³ΠΎ са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄Π²Π΅ ΠΏΠΎ-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° wait_event_type ΠΈ wait_event._

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Какво Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ? Ако Π²ΠΈΠ΄ΠΈΡ‚Π΅ true, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π·Π½Π°Ρ‡ΠΈ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ²Π° заявки трябва Π΄Π° сС ΠΈΠ·Π±Π°Π²ΠΈΡ‚Π΅. ΠŸΡ€ΠΎΡΡ‚ΠΎ затварямС Ρ‚Π°ΠΊΠΈΠ²Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ПишСм Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, Ρ‡Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚, Π·Π° Π΄Π° Π½Π΅ ΠΈΠΌΠ° Π³ΠΎΠ½ΠΊΠ° Π·Π° рСсурситС. И слСд Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π·Π° Π΄Π° Π½Π΅ сС появяват Ρ‚Π°ΠΊΠΈΠ²Π° ситуации.

И послСдният, Π½ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ Π½Π΅ Ρ„Π°Ρ‚Π°Π»Π΅Π½ случай – Ρ‚ΠΎΠ²Π° Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° deadlocks. Π”Π²Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ Π΄Π²Π° рСсурса, слСд Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ сС ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ‚ към тях, Π²Π΅Ρ‡Π΅ към ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΈ рСсурси. PostgreSQL Π² Ρ‚ΠΎΠ·ΠΈ случай Π²Π·Π΅ΠΌΠ° ΠΈ сам затваря транзакцията, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°. Π’ΠΎΠ²Π° Π΅ Π±Π΅Π·ΠΈΠ·Ρ…ΠΎΠ΄Π½Π° ситуация ΠΈ тя сама Π½Π΅ сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°. Π—Π°Ρ‚ΠΎΠ²Π° PostgreSQL Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄Π΅Π½ Π΄Π° Π²Π·Π΅ΠΌΠ° ΠΊΡ€Π°ΠΉΠ½ΠΈ ΠΌΠ΅Ρ€ΠΊΠΈ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/c4_06_show_locked_queries.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_95.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_96.sql

http://big-elephants.com/2013-09/exploring-query-locks-in-postgres/

И Π΅Ρ‚ΠΎ Π΄Π²Π° запитвания, ΠΊΠΎΠΈΡ‚ΠΎ позволяват прослСдяванС Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈΡ‚Π΅. ИзползвамС прСдставлСниС pg_locks, която позволява слСдСнС Π½Π° Ρ‚Π΅ΠΆΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

И ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π²Ρ€ΡŠΠ·ΠΊΠ° - Ρ‚ΠΎΠ²Π° Π΅ самият тСкст Π½Π° заявката. Π’ΠΎΠΉ Π΅ доста дълъг.

И Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Π²Ρ€ΡŠΠ·ΠΊΠ° - Ρ‚ΠΎΠ²Π° Π΅ статия Π·Π° locks. ПолСзно Π΅ Π΄Π° сС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅, тя Π΅ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсна.

И Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅? Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π΄Π²Π΅ заявки. Вранзакция с ALTER TABLE – Ρ‚ΠΎΠ²Π° Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰Π° транзакция. Вя Π΅ стартирала, Π½ΠΎ Π½Π΅ Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈΠ»Π° ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, стартирало Ρ‚Π°Π·ΠΈ транзакция, сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° с Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ. А Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° заявка - update. Вя Ρ‡Π°ΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠΈ alter table, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си.

Π’Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° установим ΠΊΠΎΠΉ ΠΊΠΎΠ³ΠΎ Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ», Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ с Ρ‚ΠΎΠ²Π°.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

БлСдващият ΠΌΠΎΠ΄ΡƒΠ» - Ρ‚ΠΎΠ²Π° Π΅ pg_stat_statements. ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΊΠ°Π·Π°Ρ…, Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠΎΠ΄ΡƒΠ». Π—Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, трябва Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π² конфигурацията, Π΄Π° рСстартиратС PostgreSQL, Π΄Π° инсталиратС ΠΌΠΎΠ΄ΡƒΠ»Π° (с Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°) ΠΈ слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΎΠ²ΠΎ прСдставлСниС.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° 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. Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠΉ обновява ΠΈΠ»ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° Π΄Π°Π½Π½ΠΈ.

И ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° статистика ΠΏΠΎ Ρ‚Π΅Π·ΠΈ заявки.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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

НиС pg_stat_statements ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΈ. НСпосрСдствСно вСднъТ Π½Π° Π΄Π΅Π½ Π½ΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ статистиката. НакопявамС я. ΠŸΡ€Π΅Π΄ΠΈ Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° статистиката Π·Π° слСдващия ΠΏΡŠΡ‚, ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚. Π•Ρ‚ΠΎ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° към ΠΎΡ‚Ρ‡Π΅Ρ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Какво ΠΏΡ€Π°Π²ΠΈΠΌ? Π˜Π·Ρ‡ΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ ΠΎΠ±Ρ‰Π°Ρ‚Π° статистика Π·Π° всички заявки. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π·Π° всяка заявка изчислявамС нСйния ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π΅Π½ принос към Ρ‚Π°Π·ΠΈ ΠΎΠ±Ρ‰Π° статистика.

И ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ? МоТСм Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС Π½Π° всички заявки ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Ρ‚ΠΈΠΏ Π½Π° Ρ„ΠΎΠ½Π° Π½Π° всички останали заявки. МоТСм Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСсурси Π½Π° процСсора ΠΈ Π²Ρ…ΠΎΠ΄-ΠΈΠ·Ρ…ΠΎΠ΄ Π² контСкста Π½Π° ΠΎΠ±Ρ‰Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°. И слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ заявки. Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΠΎΠΏ заявки Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΈ Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ…Ρ€Π°Π½Π° Π·Π° Ρ€Π°Π·ΠΌΠΈΡΡŠΠ» ΠΏΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚Π° ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Какво остана извън ΠΊΠ°Π΄ΡŠΡ€? ΠžΡΡ‚Π°Π½Π° ΠΎΡ‰Π΅ няколко прСдставлСния, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ.

Има pgstattuple – Ρ‚ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΎ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ» ΠΎΡ‚ стандартния ΠΏΠ°ΠΊΠ΅Ρ‚ contribs. Π’ΠΎΠΉ позволява Π΄Π° ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ bloat Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, Ρ‚.Π½. фрагмСнтация Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅. И Π°ΠΊΠΎ фрагмСнтацията Π΅ голяма, трябва Π΄Π° я ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅, Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ инструмСнти. И функцията pgstattuple Ρ€Π°Π±ΠΎΡ‚ΠΈ дълго. И ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈΠΌΠ°, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-дълго Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

БлСдващият contrib – Ρ‚ΠΎΠ²Π° Π΅ pg_buffercache. Π’ΠΎΠΉ позволява ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° инспСкция Π½Π° shared buffers: ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ ΠΈ ΠΏΠΎΠ΄ ΠΊΠΎΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ страницитС Π½Π° Π±ΡƒΡ„Π΅Ρ€Π°. И просто позволява Π΄Π° Π·Π°Π³Π»Π΅Π΄Π°Ρ‚Π΅ Π² shared buffers ΠΈ Π΄Π° ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ сС случва Ρ‚Π°ΠΌ.

БлСдващият ΠΌΠΎΠ΄ΡƒΠ» - Ρ‚ΠΎΠ²Π° Π΅ pgfincore. Π’ΠΎΠΉ позволява ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° нискостоящни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ Ρ‡Ρ€Π΅Π· систСмСн ΠΈΠ·Π²ΠΈΠΊ mincore(), Ρ‚.Π΅. Ρ‚ΠΎΠΉ позволява Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π² ΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈ ΠΈΠ»ΠΈ Π΄Π° я ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅. И позволява освСн всичко Π΄Ρ€ΡƒΠ³ΠΎ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Ρ‚Π΅ инспСкция Π½Π° страничния кСш Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, Ρ‚.Π΅. Π² какъв ΠΎΠ±Π΅ΠΌ Π½Π°ΡˆΠ°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π°Π΅ΠΌΠ° Π² page cache, Π² shared buffers ΠΈ просто позволява Π΄Π° ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ натоварСността Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°.

БлСдващият ΠΌΠΎΠ΄ΡƒΠ» – pg_stat_kcache. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° систСмСн ΠΈΠ·Π²ΠΈΠΊ getrusage(). И Π³ΠΎ изпълнява ΠΏΡ€Π΅Π΄ΠΈ ΠΈ слСд ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° заявката. И Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π°Ρ‚Π° статистика позволява Π΄Π° ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ»ΠΊΠΎ рСсурс Π΅ ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π°Π½ Π·Π° дисков Π²Ρ…ΠΎΠ΄-ΠΈΠ·Ρ…ΠΎΠ΄, Ρ‚.Π΅. ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма ΠΈ Π³Π»Π΅Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° процСсора. Но ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π΅ Π½ΠΎΠ² (ΠΊΡ…Π΅-ΠΊΡ…Π΅) ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си изисква PostgreSQL 9.4 ΠΈ pg_stat_statements, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ… ΠΏΠΎ-Ρ€Π°Π½ΠΎ.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

  • Π£ΠΌΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ статистиката Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. НС Π²ΠΈ трябват външни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅, Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ, Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅.

  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° статистиката Π½Π΅ Π΅ слоТно, Ρ‚ΠΎΠ²Π° Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ SQL. Π‘ΡŠΠ±Ρ€Π°Ρ…Ρ‚Π΅ заявка, ΡΡŠΡΡ‚Π°Π²ΠΈΡ…Ρ‚Π΅, ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ…Ρ‚Π΅, видяхтС.

  • Бтатистиката ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅. Ако ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ‚Π΅ сС към статистиката – Π³Π»Π΅Π΄Π°Ρ‚Π΅, ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΈΠ·Π²ΠΎΠ΄ΠΈ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅.

  • И СкспСримСнтирайтС. ЗаявкитС са ΠΌΠ½ΠΎΠ³ΠΎ, Π΄Π°Π½Π½ΠΈΡ‚Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ. Π’ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ някоя Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π° заявка. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ своя вСрсия Π½Π° заявката, която Π²ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° ΠΈ Π΄Π° я ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅.

Π”ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π½ΠΎ изслСдванС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π’Ρ€ΡŠΠ·ΠΊΠΈ

Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ срСщнах Π² статията, ΠΏΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ бяха Π² Π΄ΠΎΠΊΠ»Π°Π΄Π°.

ΠΠ²Ρ‚ΠΎΡ€ΡŠΡ‚ пишС ΠΎΡ‰Π΅
https://dataegret.com/news-blog (eng)

Π‘ΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅Π» Π½Π° статистика
https://www.postgresql.org/docs/current/monitoring-stats.html

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° систСма Π·Π° администриранС
https://www.postgresql.org/docs/current/functions-admin.html

ΠœΠΎΠ΄ΡƒΠ»ΠΈ contrib
https://www.postgresql.org/docs/current/pgstatstatements.html
https://www.postgresql.org/docs/current/pgstattuple.html
https://www.postgresql.org/docs/current/pgbuffercache.html
https://github.com/klando/pgfincore
https://github.com/dalibo/pg_stat_kcache

SQL полСзности ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΊΠΎΠ΄ SQL
https://github.com/dataegret/pg-utils

Благодаря Π½Π° всички Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ!

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster