Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

ЀилософскоС вступлСниС

Как извСстно, сущСствуСт всСго Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡:

  1. ΠœΠ΅Ρ‚ΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Π΅Π΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊ частному.
  2. ΠœΠ΅Ρ‚ΠΎΠ΄ синтСза ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΎΡ‚ частного ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€œΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ данных” это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Анализ β€” Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ части ΠΈ Ρ€Π΅ΡˆΠ°Ρ ΠΈΡ… пытаСмся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†Π΅Π»ΠΎΠΌ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π°Π½Π°Π»ΠΈΠ· выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

  • Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° (ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ)
  • Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ ΡΡ‚Π°Ρ‚ΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π˜Ρ‰Π΅ΠΌ ΡƒΠ·ΠΊΠΈΠ΅ мСста(bottlenecks)
  • РСшаСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΡƒΠ·ΠΊΠΈΡ… мСст

Π£Π·ΠΊΠΈΠ΅ мСста Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… β€” инфраструктура (CPU, Memory, Disks, Network, OS), настройки(postgresql.conf), запросы:

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°: возмоТности влияния ΠΈ измСнСния для ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° β€” ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅.

Настройки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…: возмоТности для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‡ΡƒΡ‚ΡŒ большС Ρ‡Π΅ΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ случаС, Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ всС -Ρ‚Π°ΠΊΠΈ довольно Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹, особСнно Π² ΠΎΠ±Π»Π°ΠΊΠ°Ρ….

Запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…: СдинствСнная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ для ΠΌΠ°Π½Π΅Π²Ρ€ΠΎΠ².

Π‘ΠΈΠ½Ρ‚Π΅Π· β€” ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй, оТидая, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡΡ.

ЛиричСскоС вступлСниС ΠΈΠ»ΠΈ Π·Π°Ρ‡Π΅ΠΌ всС это Π½Π°Π΄ΠΎ

Как происходит процСсс Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ссли ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ мониторится:

Π—Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ -”у нас всС ΠΏΠ»ΠΎΡ…ΠΎ, Π΄ΠΎΠ»Π³ΠΎ, сдСлайтС Π½Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎβ€
Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-” ΠΏΠ»ΠΎΡ…ΠΎ это ΠΊΠ°ΠΊ?”
Π—Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ –”вот ΠΊΠ°ΠΊ сСйчас(час Π½Π°Π·Π°Π΄, Π²Ρ‡Π΅Ρ€Π°, Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π΄Π΅Π»Π΅ Π±Ρ‹Π»ΠΎ), мСдлСнно”
Π˜Π½ΠΆΠ΅Π½Π΅Ρ€ – β€œΠ° ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ?”
Π—Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ – β€œΠ½Π΅Π΄Π΅Π»ΡŽ (Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ) Π½Π°Π·Π°Π΄ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ. β€œ(Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ)
Π—Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ – β€œΠ° я Π½Π΅ помню, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ сСйчас ΠΏΠ»ΠΎΡ…ΠΎ β€œ(ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚)

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся классичСская ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°:

Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

ΠšΡ‚ΠΎ Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚ ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

На ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ вопроса ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π»Π΅Π³Ρ‡Π΅ всСго β€” Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚ всСгда ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ DBA.

На Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ слишком слоТно β€” Π½ΡƒΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ систСму ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вопрос β€” Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ?

ΠŸΡƒΡ‚ΡŒ 1. Π‘ΡƒΠ΄Π΅ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ ВБЁ

Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ CPU, количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ дискового чтСния/записи, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти, ΠΈ Π΅Ρ‰Π΅ ΠΌΠ΅Π³Π°Ρ‚ΠΎΠ½Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… счСтчиков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ любая Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ рабочая систСма ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся ΠΊΡƒΡ‡Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ², сводных Ρ‚Π°Π±Π»ΠΈΡ†, ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Π΅ оповСщСния Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈ 100% Π·Π°Π½ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΡƒΡ‡ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΎΠ², Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ со стандартной Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ β€” β€œTemporary issue. No action need”. Π—Π°Ρ‚ΠΎ, всС заняты, ΠΈ всСгда Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΡƒ β€” Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΈΠΏΠΈΡ‚.

ΠŸΡƒΡ‚ΡŒ 2. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Π°, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ

МоТно ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ- Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сущности ΠΈ события:

  • На ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ DBA ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ
  • Для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сущСствуСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСйствий ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ события ΠΈΠ»ΠΈ измСнСния сущности.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого прСдполоТСния ΠΈ вспоминая «ЀилософскоС вступлСниС» с Ρ†Π΅Π»ΡŒΡŽ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ рСгулярного повторСния «ЛиричСскоС вступлСниС ΠΈΠ»ΠΈ Π·Π°Ρ‡Π΅ΠΌ всС это Π½Π°Π΄ΠΎΒ» цСлСсообразно Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов, для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ привСсти ΠΊ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ быстродСйствия всСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Но для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ тяТСлый запрос, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠΉ Π½Π° ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΡƒΠΆΠ½ΠΎ сначала Π΅Π³ΠΎ Π½Π°ΠΉΡ‚ΠΈ.

Π˜Ρ‚Π°ΠΊ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π΄Π²Π° взаимосвязанных вопроса:

  • ΠΊΠ°ΠΊΠΎΠΉ запрос считаСтся тяТСлым
  • ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°Ρ‚ΡŒ тяТСлыС запросы.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, тяТСлый запрос это запрос ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ рСсурсов ОБ для получСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ вопросу β€” ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ тяТСлыС запросы ?

КакиС возмоТности для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° запросов Π΅ΡΡ‚ΡŒ Π² PostgreSQL?

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Oracle, возмоТностСй Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ всС-Ρ‚Π°ΠΊΠΈ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ.

Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

PG_STAT_STATEMENTS

Для поиска ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° тяТСлых запросов Π² PostgreSQL ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ стандартноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ pg_stat_statements.

ПослС установки Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… появляСтся ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠ΅ прСдставлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

Π¦Π΅Π»Π΅Π²Ρ‹Π΅ столбцы pg_stat_statements для построСния систСмы ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°:

  • queryid Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄, вычислСнный ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°
  • max_time МаксимальноС врСмя, ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π² миллисСкундах

Накопив ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ статистику ΠΏΠΎ этим Π΄Π²ΡƒΠΌ столбцам, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ²ΡƒΡŽ систСму.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ pg_stat_statements для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

Для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ:
На сторонС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… β€” прСдставлСниС pg_stat_statements
Π‘ΠΎ стороны сСрвСра ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° β€” Π½Π°Π±ΠΎΡ€ bash-скриптов ΠΈ сСрвисных Ρ‚Π°Π±Π»ΠΈΡ†.

1 этап β€” сбор статистичСских Π΄Π°Π½Π½Ρ‹Ρ…

На хостС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΠΎ ΠΊΡ€ΠΎΠ½Ρƒ рСгулярно запускаСтся скрипт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТаниС прСдставлСния pg_stat_statements с Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ pg_stat_history Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

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

2 этап β€” настройка ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° собранных Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ запросы, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ/Π²Π°ΠΆΠ½ΠΎ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°(прилоТСния). По согласованию с Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠΌ, устанавливаСм значСния ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ поля queryid ΠΈ max_time.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” старт ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

  1. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ²Ρ‹ΠΉ скрипт ΠΏΡ€ΠΈ запускС провСряСт сконфигурированныС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, сравнивая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ max_time ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· прСдставлСния pg_stat_statements Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….
  2. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ – формируСтся ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ (ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ Π² Ρ‚ΠΈΠΊΠ΅Ρ‚Π½ΠΎΠΉ систСмС)

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ 1

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΠ»Π°Π½ΠΎΠ² выполнСния запросов

Для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ измСнСния ΠΏΠ»Π°Π½ΠΎΠ² выполнСния запросов.

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

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ 2

Continuous performance improvement process

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов. Однако ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ запросы для всСх Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Для этого Π½ΡƒΠΆΠ½ΠΎ ввСсти Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  • Π—Π° послСдниС Π΄Π½ΠΈ
  • Π—Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ запросы ΠΈΠ· прСдставлСния pg_stat_statements Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ сравниваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ max_time со срСдним Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ max_time, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Π·Π° послСдниС Π΄Π½ΠΈ ΠΈΠ»ΠΈ Π·Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ(baseline), Π²ΠΎ-Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² случаС Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для любого запроса, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сформировано автоматичСски, Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ².

А ΠΏΡ€ΠΈ Ρ‡Π΅ΠΌ Ρ‚ΡƒΡ‚ синтСз ?

Π’ описанной ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ синтСза β€” ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй систСмы, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅ΠΌ систСму Π² Ρ†Π΅Π»ΠΎΠΌ.

  • Запрос выполняСмый Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… – тСзис
  • Π˜Π·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ запрос – антитСзис
  • ИзмСнСниС состояниС систСмы β€” синтСз

Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ PostgreSQL

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ систСмы

  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ собираСмой статистики Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ истории для систСмного прСдставлСния pg_stat_activity
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ собираСмой статистики Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ истории для статистики ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² запросах
  • Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с систСмой ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π² ΠΎΠ±Π»Π°ΠΊΠ΅ AWS
  • И Π΅Ρ‰Π΅, Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒβ€¦

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