Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° 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 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, няма Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΡ‚ статистиката ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ станало ΠΏΡ€Π΅Π΄ΠΈ 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 ΠΈ Π³ΠΎ ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΠΈΠΌ с Ρ‚ΠΎΠ·ΠΈ списък, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π°ΠΊΠ°Π²Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°. Всяко прСдставлСниС (VIEWs) ΠΈΠ»ΠΈ всяка функция ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π΅Π»ΠΈ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° статистика, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ PostgreSQL. И ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π²Π΅Ρ‡Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° информация Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° подсистСмата.

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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

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

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° 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;

Какво Π΄Ρ€ΡƒΠ³ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ ΠΎΡ‚ Ρ‚ΠΎΠ²Π° прСдставлСниС? МоТСм Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС случват Π² Π±Π°Π·Π°Ρ‚Π°. Какво Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ‚ΡƒΠΊ? Π’ΡƒΠΊ ΠΈΠΌΠ° 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. Какво прСдставляват ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ? ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π΅ позиция Π² ΠΆΡƒΡ€Π½Π°Π»Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, която ΡΡŠΠΎΠ±Ρ‰Π°Π²Π°, Ρ‡Π΅ всички ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅, записани Π² ΠΆΡƒΡ€Π½Π°Π»Π°, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ са синхронизирани с Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° диска. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚, Π² зависимост ΠΎΡ‚ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ настройкитС, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС дълъг ΠΈ ΠΏΠΎ-голямата част ΠΎΡ‚ Π½Π΅Π³ΠΎ сС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π²Π° Π² синхронизиранСто Π½Π° ΠΌΡ€ΡŠΡΠ½ΠΈ страници Π² сподСлСнитС Π±ΡƒΡ„Π΅Ρ€ΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° диска. Π—Π° ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ²Π°? Ако 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.

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° подсистСма Π΅ Ρ„ΠΎΠ½ΠΎΠ²Π° писачка β€” 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 ΠΈ Ρ‚ΠΎΠ²Π° забавя Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π°,, Ρ‚.Π΅. ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΏΠΎ-късно, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π±ΠΈ могъл. Ако Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎ-голямо ΠΎΡ‚ Π½ΡƒΠ»Π°, Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ трябва Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° настройкитС Π½Π° Ρ„ΠΎΠ½ΠΎΠ²Π°Ρ‚Π° писачка ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ производитСлността Π½Π° дисковата подсистСма.

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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

Π’ΡƒΠΊ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‰Π°. Но Ρ‰Π΅ са Π½ΠΈ Π½ΡƒΠΆΠ½ΠΈ само Ρ‚ΠΎΡ‡ΠΊΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с мСстополоТСниСто.

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

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

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

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° 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)
from pg_stat_replication;
Π»Π°Π³ Π½Π° рСпликацията Π² сСкунди
$ select
extract(epoch ΠΎΡ‚ now() - pg_last_xact_replay_timestamp());

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

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

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

И Π΅Ρ‚ΠΎ Ρ‚Ρ€ΠΈ запитвания, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈ позволяват Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ статистиката. МоТСм Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ Π΅ записано Π² ΠΆΡƒΡ€Π½Π°Π»Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅. Има Ρ‚Π°ΠΊΠ°Π²Π° функция pg_xlog_location_diff ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ Π»Π°Π³Π° Π½Π° рСпликацията Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅ ΠΈ сСкунди. Π—Π° Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ стойността ΠΎΡ‚ Ρ‚ΠΎΠ²Π° прСдставянС (VIEWs).

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: _ВмСсто pg_xlog_locationdiff() функцията ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π° ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π° сС ΠΈΠ·Π²Π°Π΄ΠΈ Π΅Π΄Π½ΠΎ мСстополоТСниС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎ. Π£Π΄ΠΎΠ±Π½ΠΎ Π΅.

Π‘ Π»Π°Π³Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π² сСкунди, ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Ако Π½Π° основния ΡΡŠΡ€Π²ΡŠΡ€ Π½Π΅ сС случва Π½ΠΈΠΊΠ°ΠΊΠ²Π° активност, транзакцията Π΅ Π±ΠΈΠ»Π° някъдС ΠΏΡ€Π΅Π΄ΠΈ 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 всички индСкси, Π² ΠΊΠΎΠΈΡ‚ΠΎ участват ΠΏΠΎΠ»Π΅Ρ‚Π°, обновявани Π² Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ, ΡΡŠΡ‰ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ΠΈ. Π’ Ρ‚Π΅Π·ΠΈ индСкси ΡΡŠΡ‰ΠΎ Ρ‰Π΅ ΠΈΠΌΠ° остарСли вСрсии Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изчистСни.

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° 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 – Ρ‚ΠΎΠ²Π° Π΅ Ρ‚Π΅ΠΆΠΊΠ° опСрация. Но ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠ±Π»Π΅ΠΊΡ‡ΠΈ. Има Π³ΠΎΡ€Π΅Ρ‰ΠΈ обновлСния. Π’Π΅ сС появиха Π² PostgreSQL вСрсия 8.3. И ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Ρ‚ΠΎΠ²Π°? Π’ΠΎΠ²Π° Π΅ Π»Π΅ΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° рСконструкция Π½Π° индСкситС. ВоСст, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ…ΠΌΠ΅ записа, Π½ΠΎ ΠΏΡ€ΠΈ Ρ‚ΠΎΠ²Π° ΠΎΠ±Π½ΠΎΠ²Π΅Π½Π° само записката Π² страницата (която ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°), Π° индСкситС всС ΠΎΡ‰Π΅ сочат към ΡΡŠΡ‰ΠΈΡ запис Π² страницата. Има ΠΌΠ°Π»ΠΊΠΎ интСрСсна Π»ΠΎΠ³ΠΈΠΊΠ° Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΈΠΌ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄ΠΎΠΉΠ΄Π΅ Π²Π°ΠΊΡƒΡƒΠΌ, Ρ‚ΠΎΠΉ Ρ‚Π΅Π·ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ Π³ΠΎΡ€Π΅Ρ‰ΠΈ прСструктурира ΠΈ всичко ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° индСкситС, ΠΈ става всичко с ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Ρ€Π°Π·Ρ…ΠΎΠ΄ Π½Π° рСсурси.

И ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ n_tup_hot_upd голямо, Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π»Π΅ΠΊΠΈΡ‚Π΅ обновлСния ΠΏΡ€Π΅ΠΎΠ±Π»Π°Π΄Π°Π²Π°Ρ‚ ΠΈ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ-Π΅Π²Ρ‚ΠΈΠ½ΠΎ Π·Π° рСсурситС ΠΈ всичко Π΅ прСкрасно.

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° PostgreSQL. АлСксСй ЛСсовски

ALTER TABLE table_name SET (fillfactor = 70);

Как Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ ΠΎΠ±Π΅ΠΌΠ° Π½Π° Π³ΠΎΡ€Π΅Ρ‰ΠΈΡ‚Π΅ обновлСниямоТСм Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ fillfactor. Π’ΠΎΠΉ опрСдСля Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° рСзСрвирания свободСн пространство ΠΏΡ€ΠΈ запълванС Π½Π° страницата Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° INSERT-ΠΎΠ²Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° сС правят вмъквания, Ρ‚Π΅ напълно Π·Π°ΠΏΡŠΠ»Π²Π°Ρ‚ страницата, Π½Π΅ оставят Π² нСя ΠΏΡ€Π°Π·Π½ΠΎ място. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° сС выдСля Π½ΠΎΠ²Π° страница. ΠžΡ‚Π½ΠΎΠ²ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС Π·Π°ΠΏΡŠΠ»Π²Π°Ρ‚. И Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅, 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. АлСксСй ЛСсовски

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΊΠ°Π·Π°Ρ…, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ Π΅ само Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Π° ΠΈ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° индСкси. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ индСкси Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, индСксиранитС ΠΏΠΎΠ»Π΅Ρ‚Π° ΡΡŠΡ‰ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ, ΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌΠΈ индСкси, ΠΏΠΎ ΠΊΠΎΠΈΡ‚ΠΎ няма индСксни сканирания, Ρ‚Π΅ Π½ΠΈ Ρ‚Π΅ΠΆΠ°Ρ‚ ΠΊΠ°Ρ‚ΠΎ баласт. И трябва Π΄Π° сС ΠΎΡ‚ΡŠΡ€Π²Π΅ΠΌ ΠΎΡ‚ тях. Π—Π° Ρ‚ΠΎΠ²Π° Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π΅ ΠΏΠΎΠ»Π΅Ρ‚ΠΎ 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 Π²Ρ€ΡŠΠ·ΠΊΠΈ. И Π½Π΅Ρ‰ΠΎ Π΅ станало с Π½Π΅Π³ΠΎ. НуТно Π΅ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ. И Π΅ напълно възмоТно, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ Π°Π½ΠΎΠΌΠ°Π»numberΠ½ΠΎ число Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ.

Π—Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° статистика Π½Π° 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 ΠΈΠ»ΠΈ false.

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(), Ρ‚.Π΅. Ρ‚ΠΎΠΉ позволява Π΄Π° сС Π·Π°Ρ€Π΅Π΄ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² shared buffers ΠΈΠ»ΠΈ Π΄Π° сС ΠΈΠ·Ρ‚ΠΎΡ‡ΠΈ. И позволява освСн Ρ‚ΠΎΠ²Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ инспСкция Π½Π° страничния кСш Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, Ρ‚.Π΅. Π² какъв ΠΎΠ±Π΅ΠΌ сС Π½Π°ΠΌΠΈΡ€Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π² 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