ΠΡΠΎΠΏΠΎΠ½ΡΡ ΠΎΠ·Π½Π°ΠΉΠΎΠΌΠΈΡΠΈΡΡ ΡΠ· ΡΠΎΠ·ΡΠΈΡΡΠΎΠ²ΠΊΠΎΡ Π΄ΠΎΠΏΠΎΠ²ΡΠ΄Ρ ΠΠΈΠΊΠΎΠ»ΠΈ Π‘Π°ΠΌΠΎΡ Π²Π°Π»ΠΎΠ²Π° "ΠΡΠΎΠΌΠΈΡΠ»ΠΎΠ²ΠΈΠΉ ΠΏΡΠ΄Ρ ΡΠ΄ Π΄ΠΎ ΡΡΠ½ΡΠ½Π³Ρ PostgreSQL: Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ Π½Π°Π΄ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½ΠΈΡ "
Shared_buffers = 25% β ΡΠ΅ Π±Π°Π³Π°ΡΠΎ ΡΠΈ ΠΌΠ°Π»ΠΎ? ΠΠ±ΠΎ ΡΠΊΡΠ°Π·? Π―ΠΊ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΈ ΠΏΡΠ΄Ρ ΠΎΠ΄ΠΈΡΡ ΡΡ β Π΄ΠΎΡΠΈΡΡ Π·Π°ΡΡΠ°ΡΡΠ»Π° β ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΡΡ Ρ Π²Π°ΡΠΎΠΌΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ Π²ΠΈΠΏΠ°Π΄ΠΊΡ?
ΠΠ°ΡΡΠ°Π² ΡΠ°Ρ ΠΏΡΠ΄ΡΠΉΡΠΈ Π΄ΠΎ ΠΏΠΈΡΠ°Π½Π½Ρ ΠΏΡΠ΄Π±ΠΎΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ² postgresql.conf "ΠΏΠΎ-Π΄ΠΎΡΠΎΡΠ»ΠΎΠΌΡ". ΠΠ΅ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΡΠ»ΡΠΏΠΈΡ "Π°Π²ΡΠΎΡΡΠ½Π΅ΡΡΠ²" Π°Π±ΠΎ Π·Π°ΡΡΠ°ΡΡΠ»ΠΈΡ ΠΏΠΎΡΠ°Π΄ ΡΠ· ΡΡΠ°ΡΠ΅ΠΉ ΡΠ° Π±Π»ΠΎΠ³ΡΠ², Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ:
- ΡΡΡΠΎΠ³ΠΎ Π²ΠΈΠ²ΡΡΠ΅Π½ΠΈΡ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡΠ² Π½Π° ΠΠ, ΡΠΎ Π²ΠΈΡΠΎΠ±Π»ΡΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΎ, Ρ Π²Π΅Π»ΠΈΠΊΠΈΡ ΠΊΡΠ»ΡΠΊΠΎΡΡΡΡ ΡΠ° Π² ΡΠΌΠΎΠ²Π°Ρ , ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π½Π°Π±Π»ΠΈΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ "Π±ΠΎΠΉΠΎΠ²ΠΈΡ ",
- Π³Π»ΠΈΠ±ΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΠ·ΡΠΌΡΠ½Π½Ρ ΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎΡΡΠ΅ΠΉ ΡΠΎΠ±ΠΎΡΠΈ Π‘Π£ΠΠ ΡΠ° ΠΠ‘.
ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΠΈ Nancy CLI (
ΠΡΠΈΠΌΠ΅ΡΡΡΡ ΠΏΡΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ Π½Π°Π΄ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½ΠΈΡ . Π¦Π΅ ΡΡΡΠΎΡΡΡ, ΡΠΊΠ° ΡΡΠΈΠ²Π°Ρ ΡΡΠΎΡ ΠΈ Π±ΡΠ»ΡΡΠ΅ ΠΏΡΠ²ΡΠΎΠΊΡ.
Π’ΡΠΎΡ ΠΈ ΠΏΡΠΎ ΠΌΠ΅Π½Π΅. ΠΠΎΡΠ²ΡΠ΄ ΡΠ· Postgres Π²ΠΆΠ΅ Π±ΡΠ»ΡΡΠ΅ 14 ΡΠΎΠΊΡΠ². Π ΡΠ΄ ΠΊΠΎΠΌΠΏΠ°Π½ΡΠΉ Π·Π°ΡΠ½ΡΠ²Π°Π² ΡΠΎΡΡΠ°Π»ΡΠ½ΠΎ-ΠΌΠ΅ΡΠ΅ΠΆΠ΅Π²ΠΈΡ . Π‘ΠΊΡΡΠ·Ρ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π²ΡΡ Postgres ΡΠ° Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ.
Π’Π°ΠΊΠΎΠΆ Π³ΡΡΡ RuPostgres Π½Π° Meetup, 2-Π΅ ΠΌΡΡΡΠ΅ Ρ ΡΠ²ΡΡΡ. ΠΠ°Π±Π»ΠΈΠΆΠ°ΡΠΌΠΎΡΡ ΠΏΠΎΡΠΈΡ Π΅Π½ΡΠΊΡ Π΄ΠΎ 2 000 ΡΠΎΠ»ΠΎΠ²ΡΠΊ. RuPostgres.org.
Π Π² ΠΠ ΡΡΠ·Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΡΠΉ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈ Highload, Ρ Π²ΡΠ΄ΠΏΠΎΠ²ΡΠ΄Π°Ρ Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½ΠΈΡ , Π·ΠΎΠΊΡΠ΅ΠΌΠ° Postgres Π· ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΠ°ΡΠΊΡ.
Π ΠΎΡΡΠ°Π½Π½Ρ ΠΊΡΠ»ΡΠΊΠ° ΡΠΎΠΊΡΠ² Ρ ΡΠ΅ΡΡΠ°ΡΡΡΠ²Π°Π² ΠΌΠΎΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ ΠΏΠΎ Postgres-ΠΊΠΎΠ½ΡΠ°Π»ΡΠΈΠ½Π³Ρ Π² 11 ΡΠ°ΡΠΎΠ²ΠΈΡ ΠΏΠΎΡΡΠ°Ρ Π²ΡΠ΄ ΡΡΠ΄ΠΈ.
Π ΠΊΠΎΠ»ΠΈ Ρ ΡΠ΅ Π·ΡΠΎΠ±ΠΈΠ² ΠΊΡΠ»ΡΠΊΠ° ΡΠΎΠΊΡΠ² ΡΠΎΠΌΡ, Ρ ΠΌΠ°Π² Π΄Π΅ΡΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠ²Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡ ΡΡΡΠ½ΠΎΡ ΡΠΎΠ±ΠΎΡΠΈ Π· Postgres, Π½Π°ΠΏΠ΅Π²Π½ΠΎ, Π· 2010-Π³ΠΎ ΡΠΎΠΊΡ. Π― Π·Π΄ΠΈΠ²ΡΠ²Π°Π²ΡΡ, Π½Π°ΡΠΊΡΠ»ΡΠΊΠΈ ΠΌΠ°Π»ΠΎ Π·ΠΌΡΠ½ΠΈΠ»ΠΈΡΡ ΡΡΡΠ΄ΠΎΠ²Ρ Π±ΡΠ΄Π½Ρ DBA, Π½Π°ΡΠΊΡΠ»ΡΠΊΠΈ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ Π±Π°Π³Π°ΡΠΎ ΡΡΡΠ½ΠΎΡ ΠΏΡΠ°ΡΡ. Π Ρ Π²ΡΠ΄ΡΠ°Π·Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π², ΡΠΎ ΡΡΡ ΡΠΎΡΡ Π½Π΅ ΡΠ°ΠΊ, ΡΡΠ΅Π±Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΡΠ²Π°ΡΠΈ ΡΠΊΠ½Π°ΠΉΠ±ΡΠ»ΡΡΠ΅.
Π ΡΠ°ΠΊ ΡΠΊ ΡΠ΅ Π²ΡΠ΅ Π±ΡΠ»ΠΎ Π½Π° Π²ΡΠ΄ΡΡΠ°Π½Ρ, ΡΠΎ Π±ΡΠ»ΡΡΡΡΡΡ ΠΊΠ»ΡΡΠ½ΡΡΠ² Π±ΡΠ»ΠΎ Π² Ρ ΠΌΠ°ΡΠ°Ρ . Π Π²ΠΆΠ΅ Π±Π°Π³Π°ΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ. ΠΡΠΎ ΡΠ΅ ΡΡΠΎΡ ΠΈ Π·Π³ΠΎΠ΄ΠΎΠΌ. Π’. Π΅. Π²ΡΠ΅ ΡΠ΅ Π²ΠΈΠ»ΠΈΠ»ΠΎΡΡ Π² ΡΠ΄Π΅Ρ, ΡΠΎ ΠΌΠ°Ρ Π±ΡΡΠΈ ΡΡΠ΄ ΡΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΠ², ΡΠΎΠ±ΡΠΎ ΡΠΊΠ°ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΡΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΡΠ²Π°ΡΠΈΠΌΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ Π²ΡΡ Π΄ΡΡ DBA, ΡΠΎΠ± ΠΌΠΎΠΆΠ½Π° Π±ΡΠ»ΠΎ ΠΊΠ΅ΡΡΠ²Π°ΡΠΈ Π²Π΅Π»ΠΈΠΊΠΎΡ ΠΊΡΠ»ΡΠΊΡΡΡΡ Π±Π°Π·.
Π£ ΡΡΠΉ Π΄ΠΎΠΏΠΎΠ²ΡΠ΄Ρ Π½Π΅ Π±ΡΠ΄Π΅:
- Β«Π‘ΡΡΠ±Π½ΠΈΡ ΠΊΡΠ»ΡΒ» ΡΠ° Π·Π°ΡΠ² ΡΠΈΠΏΡ β ΡΡΠ°Π²ΡΠ΅ 8 GB ΡΠΈ 25 % shared_buffers Ρ Π²Π°ΠΌ Π±ΡΠ΄Π΅ Π΄ΠΎΠ±ΡΠ΅. ΠΡΠΎ shared_buffers Π±ΡΠ΄Π΅ Π½Π΅ ΡΠ°ΠΊ Π±Π°Π³Π°ΡΠΎ.
- Π₯Π°ΡΠ΄ΠΊΠΎΡΠ½ΠΈΡ Β«Π½ΡΡΡΠΎΡΡΠ²Β».
Π ΡΠΎ Π±ΡΠ΄Π΅?
- ΠΡΠ΄ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ ΠΎΠΏΡΠΈΠΌΡΠ·Π°ΡΡΡ, ΡΠΊΡ ΠΌΠΈ Π·Π°ΡΡΠΎΡΠΎΠ²ΡΡΠΌΠΎ ΡΠ° ΡΠΎΠ·Π²ΠΈΠ²Π°ΡΠΌΠΎ. ΠΡΠ΄ΡΡΡ ΡΡΠ·Π½Ρ ΡΠ΄Π΅Ρ, ΡΠΊΡ Π²ΠΈΠ½ΠΈΠΊΠ°ΡΡΡ Ρ Π½Π°Ρ Π½Π° ΡΠ»ΡΡ Ρ Ρ ΡΡΠ·Π½Ρ ΡΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, ΡΠΊΡ ΠΌΠΈ ΡΡΠ²ΠΎΡΡΡΠΌΠΎ Π·Π΄Π΅Π±ΡΠ»ΡΡΠΎΠ³ΠΎ Π² Open Source, ΡΠΎΠ±ΡΠΎ ΠΌΠΈ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠΎΠ±ΠΈΠΌΠΎ Π² Open Source. ΠΡΠ»ΡΡΠ΅ ΡΠΎΠ³ΠΎ, Ρ Π½Π°Ρ ΡΠΈΠΊΠ΅ΡΠΈ, Π²ΡΠ΅ ΡΠΏΡΠ»ΠΊΡΠ²Π°Π½Π½Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ Π² Open Source. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΈΠ²ΠΈΡΠΈΡΡ, ΡΠΎ ΠΌΠΈ Π·Π°ΡΠ°Π· ΡΠΎΠ±ΠΈΠΌΠΎ, ΡΠΎ Π±ΡΠ΄Π΅ Ρ Π½Π°ΡΡΡΠΏΠ½ΠΎΠΌΡ ΡΠ΅Π»ΡΠ·Ρ ΡΠΎΡΠΎ.
- Π ΡΠ°ΠΊΠΎΠΆ Π±ΡΠ΄Π΅ Π΄Π΅ΡΠΊΠΈΠΉ Π΄ΠΎΡΠ²ΡΠ΄ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ ΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡΠ², ΡΠΈΡ ΡΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΠ² Ρ Π½ΠΈΠ·ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΡΠΉ: Π²ΡΠ΄ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠ°ΠΏΡΠ² Π΄ΠΎ Π²Π΅Π»ΠΈΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠ°Π½ΡΠΉ.
Π―ΠΊ ΡΠ΅ Π²ΡΠ΅ ΡΠΎΠ·Π²ΠΈΠ²Π°ΡΡΡΡΡ?
ΠΠΎ-ΠΏΠ΅ΡΡΠ΅, ΠΎΡΠ½ΠΎΠ²Π½Π΅ Π·Π°Π²Π΄Π°Π½Π½Ρ DBA ΠΊΡΡΠΌ Π·Π°Π±Π΅Π·ΠΏΠ΅ΡΠ΅Π½Π½Ρ ΡΡΠ²ΠΎΡΠ΅Π½Π½Ρ instances, ΡΠΎΠ·Π³ΠΎΡΡΠ°Π½Π½Ρ Π±Π΅ΠΊΠ°ΠΏΡΠ² Ρ Ρ. Π΄., - ΡΠ΅ ΠΏΠΎΡΡΠΊ Π²ΡΠ·ΡΠΊΠΈΡ ΠΌΡΡΡΡ ΡΠ° ΠΎΠΏΡΠΈΠΌΡΠ·Π°ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡΡ.
ΠΠ°ΡΠ°Π· ΡΠ΅ Π²Π»Π°ΡΡΠΎΠ²Π°Π½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ. ΠΠΈ Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ ΠΌΠΎΠ½ΡΡΠΎΡΠΈΠ½Π³, ΡΠΎΡΡ Π±Π°ΡΠΈΠΌΠΎ, ΡΠΊΠΈΡ ΠΎΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±ΠΈΡΡ Π½Π°ΠΌ Π½Π΅ Π²ΠΈΡΡΠ°ΡΠ°Ρ. ΠΠΈ ΠΏΠΎΡΠΈΠ½Π°ΡΠΌΠΎ ΠΊΠΎΠΏΠ°ΡΠΈΡΡ ΡΠ²Π°ΠΆΠ½ΡΡΠ΅, Π·Π°Π·Π²ΠΈΡΠ°ΠΉ ΡΡΠΊΠ°ΠΌΠΈ Ρ ΡΠΎΠ·ΡΠΌΡΡΠΌΠΎ, ΡΠΎ Π· ΡΠΈΠΌ ΡΠΎΠ±ΠΈΡΠΈ ΡΠ°ΠΊ ΡΠΈ ΡΠ½Π°ΠΊΡΠ΅.
Π Ρ Π΄Π²Π° ΠΏΡΠ΄Ρ ΠΎΠ΄ΠΈ. Pg_stat_statements β ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π΅ ΡΡΡΠ΅Π½Π½Ρ Π·Π° ΡΠΌΠΎΠ²ΡΠ°Π½Π½ΡΠΌ Π²ΠΈΡΠ²Π»Π΅Π½Π½Ρ ΠΏΠΎΠ²ΡΠ»ΡΠ½ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ². Π Π°Π½Π°Π»ΡΠ· Π»ΠΎΠ³ΡΠ² Postgres Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ pgBadger.
ΠΠΎΠΆΠ΅Π½ ΡΠ· ΠΏΡΠ΄Ρ ΠΎΠ΄ΡΠ² ΠΌΠ°Ρ ΡΠ΅ΡΠΉΠΎΠ·Π½Ρ Π½Π΅Π΄ΠΎΠ»ΡΠΊΠΈ. Π£ ΠΏΠ΅ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΄Ρ ΠΎΠ΄Ρ Ρ Π½Π°Ρ Π²ΠΈΠΊΠΈΠ½ΡΡΠΎ Π²ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. Π ΡΠΊΡΠΎ ΠΌΠΈ Π±Π°ΡΠΈΠΌΠΎ Π³ΡΡΠΏΠΈ SELECT * FROM table where ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° Π΄ΠΎΡΡΠ²Π½ΡΡ Π·Π½Π°ΠΊΡ "?" Π°Π±ΠΎ Β«$Β», ΠΏΠΎΡΠΈΠ½Π°ΡΡΠΈ Π· Π²Π΅ΡΡΡΡ Postgres 10. ΠΠΈ Π½Π΅ Π·Π½Π°ΡΠΌΠΎ β ΡΠ΅ index scan Π°Π±ΠΎ seq scan. ΠΡΠΆΠ΅ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Π»Π΅ΠΆΠΈΡΡ Π²ΡΠ΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠ΄ΡΡΠ°Π²ΠΈΡ ΡΡΠ΄ΠΈ Π·Π½Π°ΡΠ΅Π½Π½Ρ, ΡΠΎ ΡΡΠ΄ΠΊΠΎ Π·ΡΡΡΡΡΡΠ°ΡΡΡΡΡ, Π±ΡΠ΄Π΅ index scan. ΠΡΠ΄ΡΡΠ°Π²ΠΈΡ ΡΡΠ΄ΠΈ Π·Π½Π°ΡΠ΅Π½Π½Ρ, ΡΠΊΠ΅ Π·Π°ΠΉΠΌΠ°Ρ 90% ΡΠ°Π±Π»ΠΈΡΡ, Π±ΡΠ΄Π΅ seq scan ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΈΠΌ, ΡΠΎΠΌΡ ΡΠΎ Postgres Π·Π½Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ. Π ΡΠ΅ Π²Π΅Π»ΠΈΠΊΠΈΠΉ Π½Π΅Π΄ΠΎΠ»ΡΠΊ pg_stat_statements, Ρ ΠΎΡΠ° ΡΠΊΡΡΡ ΡΠΎΠ±ΠΎΡΠΈ Π²Π΅Π΄ΡΡΡΡΡ.
Π£ Π°Π½Π°Π»ΡΠ·ΡΠ² Π»ΠΎΠ³ΡΠ² Π½Π°ΠΉΠ³ΠΎΠ»ΠΎΠ²Π½ΡΡΠΈΠΉ Π½Π΅Π΄ΠΎΠ»ΡΠΊ Ρ ΡΡΠΎΠΌΡ, ΡΠΎ Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ±Ρ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠΈ Β«log_min_duration_statement = 0Β», Π·Π°Π·Π²ΠΈΡΠ°ΠΉ. Π ΠΏΡΠΎ ΡΠ΅ ΠΌΠΈ ΡΠ°ΠΊΠΎΠΆ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ. ΠΡΠ΄ΠΏΠΎΠ²ΡΠ΄Π½ΠΎ, Π²ΠΈ Π±Π°ΡΠΈΡΠ΅ Π½Π΅ Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ. Π ΡΠΊΠΈΠΉΡΡ Π·Π°ΠΏΠΈΡ, ΡΠΊΠΈΠΉ Π΄ΡΠΆΠ΅ ΡΠ²ΠΈΠ΄ΠΊΠΈΠΉ, ΠΌΠΎΠΆΠ΅ ΡΠΏΠΎΠΆΠΈΠ²Π°ΡΠΈ Π²Π΅Π»ΠΈΡΠ΅Π·Π½Ρ ΠΊΡΠ»ΡΠΊΡΡΡΡ ΡΠ΅ΡΡΡΡΡΠ², Π°Π»Π΅ Π²ΠΈ ΠΉΠΎΠ³ΠΎ Π½Π΅ ΠΏΠΎΠ±Π°ΡΠΈΡΠ΅, ΡΠΎΠΌΡ ΡΠΎ Π²ΡΠ½ Π½ΠΈΠΆΡΠΈΠΉ Π·Π° Π²Π°Ρ ΠΏΠΎΡΡΠ³.
Π―ΠΊ DBA Π²ΠΈΡΡΡΡΡ Π·Π½Π°ΠΉΠ΄Π΅Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ?
ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, ΠΌΠΈ Π·Π½Π°ΠΉΡΠ»ΠΈ ΡΠΊΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π©ΠΎ Π·Π°Π·Π²ΠΈΡΠ°ΠΉ ΡΠΎΠ±ΠΈΡΡΡΡ? Π―ΠΊΡΠΎ Π²ΠΈ ΡΠΎΠ·ΡΠΎΠ±Π½ΠΈΠΊ, ΡΠΎ Π²ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΎΡΡ ΡΠΎΠ±ΠΈΡΠΈ Π½Π° ΡΠΊΠΎΠΌΡΡΡ instance, ΡΠΊΠΈΠΉ Π½Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ·ΠΌΡΡΡ. Π―ΠΊΡΠΎ Π²ΠΈ Ρ DBA, ΡΠΎ Ρ Π²Π°Ρ Ρ staging. Π Π²ΡΠ½ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π»ΠΈΡΠ΅ ΠΎΠ΄ΠΈΠ½. Π Π²ΡΠ½ Π²ΡΠ΄ΡΡΠ°Π² Π½Π° ΠΏΡΠ²ΡΠΎΠΊΡ. Π Π²ΠΈ Π΄ΡΠΌΠ°ΡΡΠ΅, ΡΠΎ ΠΏΡΠ΄Π΅ΡΠ΅ Π½Π° Π²ΠΈΡΠΎΠ±Π½ΠΈΡΡΠ²ΠΎ. Π Π½Π°Π²ΡΡΡ Π΄ΠΎΡΠ²ΡΠ΄ΡΠ΅Π½Ρ DBA ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡΡΡ ΠΏΠΎΡΡΠΌ Π½Π° production, Π½Π° ΡΠ΅ΠΏΠ»ΡΡΡ. Π Π±ΡΠ²Π°Ρ, ΡΠΎ ΡΡΠ²ΠΎΡΡΡΡΡ ΡΠΈΠΌΡΠ°ΡΠΎΠ²ΠΈΠΉ ΡΠ½Π΄Π΅ΠΊΡ, ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΡΡ, ΡΠΎ Π²ΡΠ½ Π΄ΠΎΠΏΠΎΠΌΠ°Π³Π°ΡΡΡ, Π΄ΡΠΎΠΏΠ°ΡΡΡ ΠΉΠΎΠ³ΠΎ Ρ Π²ΡΠ΄Π΄Π°ΡΡΡ ΡΠΎΠ·ΡΠΎΠ±Π½ΠΈΠΊΠ°ΠΌ, ΡΠΎΠ± Π²ΠΎΠ½ΠΈ ΠΉΠΎΠ³ΠΎ Π² ΠΌΡΠ³ΡΠ°ΡΡΠΉΠ½Ρ ΡΠ°ΠΉΠ»ΠΈ Π·Π°ΡΡΠ½ΡΠ»ΠΈ. ΠΡΡ ΡΠ°ΠΊΠ΅ ΠΌΠ°ΡΠ΅Π½Π½Ρ Π²ΡΠ΄Π±ΡΠ²Π°ΡΡΡΡΡ Π·Π°ΡΠ°Π·. Π ΡΠ΅ Π±ΡΠ΄Π°.
- Π’ΡΠ½ΠΈΡΠΈ ΠΊΠΎΠ½ΡΡΠ³ΡΡΠ°ΡΡΡ.
- ΠΠΏΡΠΈΠΌΡΠ·ΡΠ²Π°ΡΠΈ Π½Π°Π±ΡΡ ΡΠ½Π΄Π΅ΠΊΡΡΠ².
- ΠΠΌΡΠ½ΡΠ²Π°ΡΠΈ ΡΠ°ΠΌ SQL-Π·Π°ΠΏΠΈΡ (ΡΠ΅ Π½Π°ΠΉΡΠΊΠ»Π°Π΄Π½ΡΡΠΈΠΉ ΡΠΏΠΎΡΡΠ±).
- ΠΠΎΠ΄Π°Π²Π°ΡΠΈ ΠΏΠΎΡΡΠΆΠ½ΠΎΡΡΠ΅ΠΉ (Π½Π°ΠΉΠΏΡΠΎΡΡΡΡΠΈΠΉ ΡΠΏΠΎΡΡΠ± Ρ Π±ΡΠ»ΡΡΠΎΡΡΡ Π²ΠΈΠΏΠ°Π΄ΠΊΡΠ²).
ΠΠ· ΡΠΈΠΌΠΈ ΡΠ΅ΡΠ°ΠΌΠΈ Π΄ΡΠΆΠ΅ Π±Π°Π³Π°ΡΠΎ Π²ΡΡΠΎΠ³ΠΎ. Π’Π°ΠΌ Π±Π°Π³Π°ΡΠΎ ΡΡΡΠΎΠΊ Ρ Postgres. ΠΠΎΡΡΡΠ±Π½ΠΎ Π±Π°Π³Π°ΡΠΎ Π·Π½Π°ΡΠΈ. ΠΠ°Π³Π°ΡΠΎ ΡΠ½Π΄Π΅ΠΊΡΡΠ² Ρ Postgres, Π·Π°Π²Π΄ΡΠΊΠΈ ΡΠΎΠΌΡ ΡΠΎ ΠΎΡΠ³Π°Π½ΡΠ·Π°ΡΠΎΡΠ°ΠΌ ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΡΡ. Π Π²ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π·Π½Π°ΡΠΈ, Ρ ΡΠ°ΠΌΠ΅ ΡΠ΅ Ρ DBA Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ Π²ΡΠ΄ΡΡΡΡΡ, ΡΠΎ DBA Π·Π°ΠΉΠΌΠ°ΡΡΡΡΡ ΡΠΎΡΠ½ΠΎΡ ΠΌΠ°Π³ΡΡΡ. Π’. Π΅. ΠΏΠΎΡΡΡΠ±Π½ΠΎ ΡΠΎΠΊΡΠ² 10 Π·Π°ΠΉΠΌΠ°ΡΠΈΡΡ, ΡΠΎΠ± ΠΏΠΎΡΠ°ΡΠΈ ΡΠΎΠ·ΡΠΌΡΡΠΈ Π²ΡΠ΅ ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ.
Π Ρ β Π±ΠΎΡΠ΅ΡΡ ΡΠ· ΡΡΡΡ ΡΠΎΡΠ½ΠΎΡ ΠΌΠ°Π³ΡΡΡ. Π― Ρ ΠΎΡΡ Π·ΡΠΎΠ±ΠΈΡΠΈ Π²ΡΠ΅ ΡΠ°ΠΊ, ΡΠΎΠ±ΠΈ Π±ΡΠ»Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΡΡ, Π° Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ½ΡΡΡΡΡΡ Ρ Π²ΡΡΠΎΠΌΡ ΡΡΠΎΠΌΡ.
ΠΡΠΈΠΊΠ»Π°Π΄ΠΈ Π· ΠΆΠΈΡΡΡ
Π¦Π΅ Ρ ΡΠΏΠΎΡΡΠ΅ΡΡΠ³Π°Π² ΠΌΡΠ½ΡΠΌΡΠΌ Ρ Π΄Π²ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈ ΡΠ²ΡΠΉ. Π§Π΅ΡΠ³ΠΎΠ²ΠΈΠΉ ΠΏΠΎΡΡ Ρ Π±Π»ΠΎΠ·Ρ ΠΏΠΎΠ²ΡΠ΄ΠΎΠΌΠ»ΡΡ Π½Π°ΠΌ, ΡΠΎ Π·Π½Π°ΡΠ΅Π½Π½Ρ 1 Π΄Π»Ρ default_statistict_target β ΡΠ΅ Π΄ΠΎΠ±ΡΠ΅. ΠΠΎΠ±ΡΠ΅, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΏΡΠΎΠ±ΡΡΠΌΠΎ Ρ production.
Π ΡΡΡ ΠΌΠΈ, Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΠΈ Π½Π°Ρ ΡΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ΅ΡΠ΅Π· Π΄Π²Π° ΡΠΎΠΊΠΈ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡΠ² Π½Π°Π΄ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½ΠΈΡ , ΠΏΡΠΎ ΡΠΊΡ ΡΡΠΎΠ³ΠΎΠ΄Π½Ρ ΠΌΠΎΠ²Π°, ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΡΡΠ²Π½ΡΡΠΈ ΡΠΎ Π±ΡΠ»ΠΎ Ρ ΡΠΎ ΡΡΠ°Π»ΠΎ.
Π Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΎ ΡΡΠ²ΠΎΡΠΈΡΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ. ΠΡΠ½ ΡΠΊΠ»Π°Π΄Π°ΡΡΡΡΡ ΡΠ· ΡΠΎΡΠΈΡΡΠΎΡ ΡΠ°ΡΡΠΈΠ½.
- ΠΠ΅ΡΡΠ° β ΡΠ΅ ΠΎΡΠΎΡΠ΅Π½Π½Ρ. ΠΠ°ΠΌ ΠΏΠΎΡΡΡΠ±Π½Π° Π·Π°Π»ΡΠ·Π½ΠΈΡΡ. Π ΠΊΠΎΠ»ΠΈ Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΆΡ Π² ΡΠΊΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΡΡ Ρ ΡΠΊΠ»Π°Π΄Π°Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ, ΡΠΎ Ρ Π³ΠΎΠ²ΠΎΡΡ, ΡΠΎΠ± ΠΌΠ΅Π½Ρ Π΄Π°Π»ΠΈ ΡΠ°ΠΊΡ ΠΆ Π·Π°Π»ΡΠ·ΠΊΡ ΡΠΊ Π½Π° production. ΠΠ»Ρ ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ Π· Π²Π°ΡΠΈΡ ΠΠ°ΠΉΡΡΡΡΠ² ΠΌΠ΅Π½Ρ ΠΏΠΎΡΡΡΠ±Π½Π° Ρ ΠΎΡΠ° Π± ΠΎΠ΄Π½Π° Π·Π°Π»ΡΠ·Π½ΠΈΡΡ ΡΠ°ΠΊΠ° ΡΠ°ΠΌΠ°. ΠΠ±ΠΎ ΡΠ΅ Π²ΡΡΡΡΠ°Π»ΡΠ½Π° ΠΌΠ°ΡΠΈΠ½Π° instance Π² ΠΠΌΠ°Π·ΠΎΠ½Ρ Π°Π±ΠΎ Google, Π°Π±ΠΎ ΠΌΠ΅Π½Ρ ΡΠ°ΠΌΠ΅ ΡΠ°ΠΊΠ° ΠΆ Π·Π°Π»ΡΠ·Π½ΠΈΡΡ ΠΏΠΎΡΡΡΠ±Π½Π°. Π’. Π΅. Ρ Ρ ΠΎΡΡ Π²ΡΠ΄ΡΠ²ΠΎΡΠΈΡΠΈ ΠΎΡΠΎΡΠ΅Π½Π½Ρ. Π ΠΏΠΎΠ½ΡΡΡΡ ΠΎΡΠΎΡΠ΅Π½Π½Ρ ΠΌΠΈ Π²ΠΊΠ»Π°Π΄Π°ΡΠΌΠΎ ΠΌΠ°ΠΆΠΎΡΠ½Ρ Π²Π΅ΡΡΡΡ Postgres.
- ΠΡΡΠ³Π° ΡΠ°ΡΡΠΈΠ½Π° β ΡΠ΅ ΠΎΠ±'ΡΠΊΡ Π½Π°ΡΠΈΡ Π΄ΠΎΡΠ»ΡΠ΄ΠΆΠ΅Π½Ρ. Π¦Π΅ Π±Π°Π·Π° Π΄Π°Π½ΠΈΡ . ΠΡ ΠΌΠΎΠΆΠ½Π° ΡΡΠ²ΠΎΡΠΈΡΠΈ ΠΊΡΠ»ΡΠΊΠΎΠΌΠ° ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. Π― ΠΏΠΎΠΊΠ°ΠΆΡ ΡΠΊ.
- Π’ΡΠ΅ΡΡ ΡΠ°ΡΡΠΈΠ½Π° β ΡΠ΅ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ. Π¦Π΅ Π½Π°ΠΉΡΠΊΠ»Π°Π΄Π½ΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ.
- Π ΡΠ΅ΡΠ²Π΅ΡΡΠ° ΡΠ°ΡΡΠΈΠ½Π° β ΡΠ΅ ΡΠ΅, ΡΠΎ ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡΠΌΠΎ, ΡΠΎΠ±ΡΠΎ ΡΠΎ ΡΠ· ΡΠΈΠΌ ΠΏΠΎΡΡΠ²Π½ΡΠ²Π°ΡΠΈ Π±ΡΠ΄Π΅ΠΌΠΎ. ΠΠΎΠΏΡΡΡΠΈΠΌΠΎ, ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π² ΠΊΠΎΠ½ΡΡΠ·Ρ Π·ΠΌΡΠ½ΠΈΡΠΈ ΠΎΠ΄ΠΈΠ½ Π°Π±ΠΎ ΠΊΡΠ»ΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ², Π° ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠ½Π΄Π΅ΠΊΡ ΡΡΠ²ΠΎΡΠΈΡΠΈ Ρ Ρ.Π΄.
ΠΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΠΌΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ. ΠΡΡ pg_stat_statements. ΠΡΠ²ΠΎΡΡΡ β ΡΠ΅, ΡΠΎ Π±ΡΠ»ΠΎ. Π‘ΠΏΡΠ°Π²Π° β ΡΠΎ ΡΡΠ°Π»ΠΎ.
ΠΠ»ΡΠ²Π° default_statistics_target = 100, ΠΏΡΠ°Π²ΠΎΡΡΡ = 1. ΠΠΈ Π±Π°ΡΠΈΠΌΠΎ, ΡΠΎ Π½Π°ΠΌ ΡΠ΅ Π΄ΠΎΠΏΠΎΠΌΠΎΠ³Π»ΠΎ. ΠΠ° 000% Π·Π°Π³Π°Π»ΠΎΠΌ ΡΡΠ΅ ΠΊΡΠ°ΡΠ΅ ΡΡΠ°Π»ΠΎ.
ΠΠ»Π΅ ΡΠΊΡΠΎ ΠΌΠΈ ΠΏΡΠΎΠΌΠΎΡΠ°ΡΠΌΠΎ Π²Π½ΠΈΠ·, ΡΠ°ΠΌ Π±ΡΠ΄ΡΡΡ Π³ΡΡΠΏΠΈ Π·Π°ΠΏΠΈΡΡΠ² Π· pgBadger Π°Π±ΠΎ Π· pg_stat_statements. Π’ΡΡ Π΄Π²Π° Π²Π°ΡΡΠ°Π½ΡΠΈ. ΠΠΈ ΠΏΠΎΠ±Π°ΡΠΈΠΌΠΎ, ΡΠΎ ΡΠΊΠΈΠΉΡΡ Π·Π°ΠΏΠΈΡ ΠΏΡΠΎΡΡΠ² Π½Π° 88%. Π ΡΡΡ ΡΠΆΠ΅ ΡΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΈΠΉ ΠΏΡΠ΄Ρ ΡΠ΄. ΠΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π°Π»Ρ ΠΊΠΎΠΏΠ°ΡΠΈ Π²ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ, Π±ΠΎ ΡΡΠΊΠ°Π²ΠΎ, ΡΠΎΠΌΡ Π²ΡΠ½ ΠΏΡΠΎΡΡΠ². ΠΠΎΡΡΡΠ±Π½ΠΎ ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΎ ΡΠ°ΠΌ Π±ΡΠ»ΠΎ Π·Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΎΡ. Π§ΠΎΠΌΡ Π±ΡΠ»ΡΡΠ΅ Π±Π°ΠΊΠ΅ΡΡΠ² Ρ ΡΡΠ°ΡΠΈΡΡΠΈΡΡ ΠΏΡΠΈΠ·Π²ΠΎΠ΄ΡΡΡ Π΄ΠΎ Π½Π°ΠΉΠ³ΡΡΡΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
Π ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π½Π΅ ΠΊΠΎΠΏΠ°ΡΠΈ, Π° Π·ΡΠΎΠ±ΠΈΡΠΈ Β«ALTER TABLEβ¦ ALTER COLUMNΒ» Ρ ΠΉΠΎΠΌΡ Π½Π°Π·Π°Π΄ 100 Π±Π°ΠΊΠ΅ΡΡΠ² ΠΏΠΎΠ²Π΅ΡΠ½Π΅ΠΌΠΎ Π΄ΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. Π Π΄Π°Π»Ρ ΡΠ΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ½Π°ΡΠΈΡΡ, ΡΠΎ ΡΡ Π»Π°ΡΠΊΠ° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³Π»Π°. ΠΡΡ. ΠΡΡ ΡΠ΅ ΡΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΈΠΉ ΠΏΡΠ΄Ρ ΡΠ΄, ΡΠΊΠΈΠΉ Π΄ΠΎΠΏΠΎΠΌΠ°Π³Π°Ρ Π½Π°ΠΌ Π±Π°ΡΠΈΡΠΈ ΠΊΠ°ΡΡΠΈΠ½Ρ ΡΠ° ΠΏΡΠΈΠΉΠΌΠ°ΡΠΈ ΡΡΡΠ΅Π½Π½Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π°Π½ΠΈΡ , Π° Π½Π΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ½ΡΡΡΡΡΡ.
ΠΠ°ΡΠ° ΠΏΡΠΈΠΊΠ»Π°Π΄ΡΠ² Π· ΡΠ½ΡΠΈΡ Π³Π°Π»ΡΠ·Π΅ΠΉ. Π£ ΡΠ΅ΡΡΠ°Ρ Ρ CI ΡΠ΅ΡΡΠΈ Π²ΠΆΠ΅ Π±Π°Π³Π°ΡΠΎ ΡΠΎΠΊΡΠ². Π ΠΆΠΎΠ΄Π΅Π½ ΡΠΆΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π·Π΄ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ Π³Π»ΡΠ·Π΄Ρ Π½Π΅ ΠΆΠΈΡΠΈΠΌΠ΅ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈΡ ΡΠ΅ΡΡΡΠ².
Π ΡΠ½ΡΠΈΡ Π³Π°Π»ΡΠ·ΡΡ : Π² Π°Π²ΡΠ°ΡΡΡ, Π² Π°Π²ΡΠΎΠΌΠΎΠ±ΡΠ»Π΅Π±ΡΠ΄ΡΠ²Π°Π½Π½Ρ, ΠΊΠΎΠ»ΠΈ Π²ΡΠ΄ΡΡΠ²Π°ΡΠΌΠΎ Π°Π΅ΡΠΎΠ΄ΠΈΠ½Π°ΠΌΡΠΊΡ, ΠΌΠΈ ΡΠ°ΠΊΠΎΠΆ ΠΌΠ°ΡΠΌΠΎ ΠΌΠΎΠΆΠ»ΠΈΠ²ΡΡΡΡ ΡΠΎΠ±ΠΈΡΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ. ΠΠΈ Π½Π΅ Π±ΡΠ΄Π΅ΠΌΠΎ ΡΠΎΡΡ ΡΠ· ΠΊΡΠ΅ΡΠ»Π΅Π½Π½Ρ ΠΎΠ΄ΡΠ°Π·Ρ Π² ΠΊΠΎΡΠΌΠΎΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΠΈ ΡΠΈ Π½Π΅ Π±ΡΠ΄Π΅ ΡΠΊΡΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΠ΄ΡΠ°Π·Ρ Π²ΠΈΠ²ΠΎΠ΄ΠΈΡΠΈ Π½Π° ΡΡΠ°ΡΡ. ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, Ρ Π°Π΅ΡΠΎΠ΄ΠΈΠ½Π°ΠΌΡΡΠ½Π° ΡΡΡΠ±Π°.
ΠΡ ΡΠΏΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½Ρ Π·Π° ΡΠ½ΡΠΈΠΌΠΈ Π³Π°Π»ΡΠ·ΡΠΌΠΈ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π·ΡΠΎΠ±ΠΈΡΠΈ Π²ΠΈΡΠ½ΠΎΠ²ΠΊΠΈ.
ΠΠΎ-ΠΏΠ΅ΡΡΠ΅, ΠΌΠΈ ΠΌΠ°ΡΠΌΠΎ ΡΠΏΠ΅ΡΡΠ°Π»ΡΠ½Π΅ ΠΎΡΠΎΡΠ΅Π½Π½Ρ. ΠΠΎΠ½ΠΎ Π±Π»ΠΈΠ·ΡΠΊΠ΅ Π΄ΠΎ production, Π°Π»Π΅ Π½Π΅ Π±Π»ΠΈΠ·ΡΠΊΠΎ. ΠΠΎΠ»ΠΎΠ²Π½Π° ΠΉΠΎΠ³ΠΎ ΠΎΡΠΎΠ±Π»ΠΈΠ²ΡΡΡΡ Ρ ΡΠΎΠΌΡ, ΡΠΎ ΠΌΠ°Ρ Π±ΡΡΠΈ Π΄Π΅ΡΠ΅Π²ΠΎ, ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°Π½ΠΎ ΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. Π ΡΠ΅ ΠΌΠ°ΡΡΡ Π±ΡΡΠΈ ΡΠΏΠ΅ΡΡΠ°Π»ΡΠ½Ρ Π·Π°ΡΠΎΠ±ΠΈ Π΄Π»Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΡΠ·Ρ.
Π¨Π²ΠΈΠ΄ΡΠ΅ Π·Π° Π²ΡΠ΅, ΠΊΠΎΠ»ΠΈ ΠΌΠΈ Π»ΡΡΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ Ρ Π»Π΅ΡΠΈΠΌΠΎ, ΠΌΠΈ ΠΌΠ°ΡΠΌΠΎ ΠΌΠ΅Π½ΡΠ΅ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎΡΡΠ΅ΠΉ Π²ΠΈΠ²ΡΠ°ΡΠΈ ΠΊΠΎΠΆΠ΅Π½ ΠΌΡΠ»ΡΠΌΠ΅ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½Ρ ΠΊΡΠΈΠ»Π°, Π½ΡΠΆ Ρ Π² Π°Π΅ΡΠΎΠ΄ΠΈΠ½Π°ΠΌΡΡΠ½ΡΠΉ ΡΡΡΠ±Ρ. ΠΠΈ ΠΌΠ°ΡΠΌΠΎ Π±ΡΠ»ΡΡΠ΅ Π·Π°ΡΠΎΠ±ΡΠ² Π΄Π»Ρ Π΄ΡΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ. ΠΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠΎΠ±Ρ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠΈ Π½Π°Π²ΡΡΠΈΡΠΈ ΡΠΊΠ½Π°ΠΉΠ±ΡΠ»ΡΡΠ΅ Π²Π°ΠΆΠΊΠΎΠ³ΠΎ, ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠΈ ΡΠΎΠ±Ρ Π²ΡΠ΄Π²ΡΠ΄Π°ΡΠΈ Π»ΡΡΠ°ΠΊ Ρ ΠΏΠΎΠ²ΡΡΡΡ. Π’Π°ΠΊΠΎΠΆ Ρ Π· Postgres. Π£ Π΄Π΅ΡΠΊΠΈΡ Π²ΠΈΠΏΠ°Π΄ΠΊΠ°Ρ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠΈ ΠΏΠΎΠ²Π½Π΅ Π»ΠΎΠ³ΡΠ²Π°Π½Π½Ρ Π·Π°ΠΏΠΈΡΡΠ² ΠΏΡΠ΄ ΡΠ°Ρ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡΠ². Π ΠΌΠΈ ΡΡΠΎΠ³ΠΎ Π½Π° Π²ΠΈΡΠΎΠ±Π½ΠΈΡΡΠ²ΠΎ ΡΠΎΠ±ΠΈΡΠΈ Π½Π΅ Ρ ΠΎΡΠ΅ΠΌΠΎ. ΠΠΈ, ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ, Π½Π°Π²ΡΡΡ ΡΠ· ΠΏΠ»Π°Π½Π°ΠΌΠΈ ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΠΌΠΎ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ auto_explain.
Π, ΡΠΊ Ρ Π²ΠΆΠ΅ ΡΠΊΠ°Π·Π°Π², Π²ΠΈΡΠΎΠΊΠΈΠΉ ΡΡΠ²Π΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΡΡ ΠΎΠ·Π½Π°ΡΠ°Ρ, ΡΠΎ ΠΌΠΈ Π½Π°ΡΠΈΡΠ½ΡΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΠΏΠΎΠ²ΡΠΎΡΠΈΠ»ΠΈ. ΠΡΠ°ΠΊ ΠΌΠ°Ρ Π±ΡΡΠΈ, ΡΠΎΠ± Π±ΡΠ»ΠΎ Π±Π°Π³Π°ΡΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡΠ², ΡΠΎΠ± ΡΠ΅ Π±ΡΠ»ΠΎ Π½Π° ΠΏΠΎΡΠΎΡΡ.
Nancy CLI β ΡΡΠ½Π΄Π°ΠΌΠ΅Π½Ρ "Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΡΡ ΠΠ"
Π ΠΎΡΡ ΠΌΠΈ Π·ΡΠΎΠ±ΠΈΠ»ΠΈ ΡΠ°ΠΊΡ ΡΡΡΠΊΡ. Π’. Π΅. Ρ ΠΏΡΠΎ ΡΡ ΡΠ΄Π΅Ρ ΡΠΎΠ·ΠΏΠΎΠ²ΡΠ΄Π°Π² Ρ ΡΠ΅ΡΠ²Π½Ρ, ΠΌΠ°ΠΉΠΆΠ΅ ΡΡΠΊ ΡΠΎΠΌΡ. Π ΠΌΠΈ Π²ΠΆΠ΅ ΠΌΠ°ΡΠΌΠΎ Π² Open Source ΡΠ°ΠΊ Π·Π²Π°Π½Ρ Nancy CLI. Π¦Π΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΠΎΠ± Π·Π²ΠΎΠ΄ΠΈΡΠΈ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΡΡ Π±Π°Π·ΠΈ Π΄Π°Π½ΠΈΡ .
ΠΠ²ΠΈΡΠ°ΠΉΠ½ΠΎ, ΡΠ°ΠΌ Π±Π°Π³Π°ΡΠΎ ΡΠΎΠ³ΠΎ ΡΠ΅ Π½Π° ΡΡΠ°Π΄ΡΡ ΡΠΎΠ·ΡΠΎΠ±ΠΊΠΈ. Π’Π°ΠΌ Π±Π°Π³Π°ΡΠΎ ΡΠ΄Π΅ΠΉ. ΠΠ»Π΅ ΡΠ΅ Π²ΠΆΠ΅ ΡΠ΅, ΡΠΎ ΠΌΠΈ Π·Π°ΡΡΠΎΡΠΎΠ²ΡΡΠΌΠΎ ΠΌΠ°ΠΉΠΆΠ΅ ΡΠΎΠ΄Π½Ρ. Π ΠΊΠΎΠ»ΠΈ Ρ Π½Π°Ρ Π²ΠΈΠ½ΠΈΠΊΠ°Ρ ΡΠ΄Π΅Ρ - Π° ΡΠΎ ΡΠ΅ ΠΏΡΠΈ delete 40 000 000 ΡΡΠ΄ΠΊΡΠ² Ρ Π½Π°Ρ Π²ΡΠ΅ Π²ΠΏΠ΅ΡΠ»ΠΎΡΡ Π² IO, ΡΠΎ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ Ρ ΠΏΠΎΠ΄ΠΈΠ²ΠΈΡΠΈΡΡ Π΄ΠΎΠΊΠ»Π°Π΄Π½ΡΡΠ΅, ΡΠΎΠ± Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΎ Π²ΡΠ΄Π±ΡΠ²Π°ΡΡΡΡΡ Ρ Π½Π°Π΄Π°Π»Ρ ΡΠΏΡΠΎΠ±ΡΠ²Π°ΡΠΈ Π²ΠΈΠΏΡΠ°Π²ΠΈΡΠΈ ΡΠ΅ Π½Π° Ρ ΠΎΠ΄Ρ. Π’. Π΅. ΠΌΠΈ ΡΠΎΠ±ΠΈΠΌΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ. ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, ΡΠΎΡΡ ΠΏΡΠ΄ΠΊΡΡΡΡΡΠΌΠΎ Ρ Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΠΈΡ ΠΎΠ΄ΠΈΡΡ. Π’Π° ΠΌΠΈ ΡΠ΅ ΡΠΎΠ±ΠΈΠΌΠΎ Π½Π΅ ΡΠ°ΠΊ Π½Π° production. Π¦Π΅ ΡΡΡΡ ΡΠ΄Π΅Ρ.
ΠΠ΅ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ? Π¦Π΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΡΠΎΠ±ΡΠΎ ΠΌΠΎΠΆΠ½Π° ΡΠ΅ ΡΠΎΠ±ΠΈΡΠΈ Π±ΡΠ΄Ρ-Π΄Π΅, ΠΌΠΎΠΆΠ½Π° Π½Π°Π²ΡΡΡ Π½Π° MacBook Π·Π°ΠΏΡΡΡΠΈΡΠΈ. ΠΠΎΡΡΡΠ±Π΅Π½ Π΄ΠΎΠΊΠ΅Ρ, ΠΏΠΎΡΡ Π°Π»ΠΈ. Π Π²ΡΠ΅. ΠΠΎΠΆΠ½Π° Π·Π°ΠΏΡΡΡΠΈΡΠΈ Π² Π±ΡΠ΄Ρ-ΡΠΊΠΎΠΌΡ ΡΡΠ°Π½Ρ Π² Π·Π°Π»ΡΠ·ΡΡ, Π°Π±ΠΎ Ρ Π²ΡΡΡΡΠ°Π»ΡΡ, Π΄Π΅ Π·Π°Π²Π³ΠΎΠ΄Π½ΠΎ.
Π ΡΠ΅ Ρ ΠΌΠΎΠΆΠ»ΠΈΠ²ΡΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΠΈ Π²ΡΠ΄Π΄Π°Π»Π΅Π½ΠΎ Π² ΠΠΌΠ°Π·ΠΎΠ½Ρ Π² EC2 Instance, Π² ΡΠΏΠΎΡΠ°Ρ . Π ΡΠ΅ Π΄ΡΠΆΠ΅ ΠΊΠ»Π°ΡΠ½Π° Π½Π°Π³ΠΎΠ΄Π°. ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, Π²ΡΠΎΡΠ° ΠΌΠΈ ΠΏΡΠΎΠ²Π΅Π»ΠΈ Π±ΡΠ»ΡΡΠ΅ 500 Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡΠ² Π½Π° i3 instance, ΠΏΠΎΡΠΈΠ½Π°ΡΡΠΈ Π· Π½Π°ΠΉΠΌΠΎΠ»ΠΎΠ΄ΡΠΎΠ³ΠΎ Ρ Π·Π°ΠΊΡΠ½ΡΡΡΡΠΈ i3-16-xlarge. Π Π½Π°ΠΌ 500 Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡΠ² ΡΡΠ°Π»ΠΈ Π² 64 Π΄ΠΎΠ»Π°ΡΠΈ. ΠΠΎΠΆΠ΅Π½ ΡΡΠΈΠ²Π°Π² 15 Ρ Π²ΠΈΠ»ΠΈΠ½. Π’. Π΅. Π·Π° ΡΠ°Ρ ΡΠ½ΠΎΠΊ ΡΠΎΠ³ΠΎ, ΡΠΎ ΡΠ°ΠΌ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ ΡΠΏΠΎΡΠΈ, ΡΠ΅ Π΄ΡΠΆΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ - Π·Π½ΠΈΠΆΠΊΠ° 70%, ΠΏΠΎΡΠ΅ΠΊΡΠ½Π΄Π½Π° ΡΠ°ΡΠΈΡΡΠΊΠ°ΡΡΡ ΠΠΌΠ°Π·ΠΎΠ½Π°. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ±ΠΈΡΠΈ Π΄ΡΠΆΠ΅ Π±Π°Π³Π°ΡΠΎ. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠΈ ΡΠ΅Π°Π»ΡΠ½Π΅ Π΄ΠΎΡΠ»ΡΠ΄ΠΆΠ΅Π½Π½Ρ.
Π ΡΡΠΈ ΠΌΠ°ΠΆΠΎΡΠ½Ρ Π²Π΅ΡΡΡΡ Postgres ΠΏΡΠ΄ΡΡΠΈΠΌΡΡΡΡΡΡ. ΠΠ΅ ΡΠ°ΠΊ ΡΠΊΠ»Π°Π΄Π½ΠΎ Π΄ΠΎΠΏΠΈΠ»ΡΡΠΈ ΡΠΊΡΡΡ ΡΡΠ°ΡΡ ΡΠ° Π½ΠΎΠ²Ρ 12-ΡΡ Π²Π΅ΡΡΡΡ ΡΠ΅ΠΆ.
ΠΠ±'ΡΠΊΡ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΡΡΠΎΠΌΠ° ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ Π·Π°Π΄Π°Π²Π°ΡΠΈ. Π¦Π΅:
- Dump/SQL-ΡΠ°ΠΉΠ».
- ΠΠΎΠ»ΠΎΠ²Π½ΠΈΠΉ ΡΠΏΠΎΡΡΠ± β ΡΠ΅ ΠΊΠ»ΠΎΠ½ PGDATA Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ. Π―ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π±Π΅ΡΠ΅ΡΡΡΡ Π· Π±Π΅ΠΊΠ°ΠΏ-ΡΠ΅ΡΠ²Π΅ΡΠ°. Π―ΠΊΡΠΎ Ρ Π²Π°Ρ Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½Ρ Π±ΡΠ½Π°ΡΠ½Ρ Π±Π΅ΠΊΠ°ΠΏΠΈ, Π·Π²ΡΠ΄ΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠ»ΠΎΠ½ΠΈ ΡΠΎΠ±ΠΈΡΠΈ. Π―ΠΊΡΠΎ Ρ Π²Π°Ρ Ρ Ρ ΠΌΠ°ΡΠΈ, ΡΠΎ Π·Π° Π²Π°Ρ ΡΠ΅ Ρ ΠΌΠ°ΡΠ½Π° ΠΊΠΎΠ½ΡΠΎΡΠ° ΡΠΈΠΏΡ ΠΠΌΠ°Π·ΠΎΠ½Π° Ρ Google ΡΠ°ΠΌΠ° ΡΠΎΠ±ΠΈΡΠΈΠΌΠ΅. Π¦Π΅ Π½Π°ΠΉΠ³ΠΎΠ»ΠΎΠ²Π½ΡΡΠΈΠΉ ΡΠΏΠΎΡΡΠ± Π΄Π»Ρ ΠΊΠ»ΠΎΠ½ΡΠ² ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΠΎΠ±Π½ΠΈΡΡΠ²Π°. ΠΠΈ ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ ΡΠΊΡΠ°Π· ΡΠΎΠ·Π²Π΅ΡΡΠ°ΡΠΌΠΎ.
- Π ΠΎΡΡΠ°Π½Π½ΡΠΉ ΡΠΏΠΎΡΡΠ± ΠΏΡΠ΄Ρ ΠΎΠ΄ΠΈΡΡ Π΄Π»Ρ Π΄ΠΎΡΠ»ΡΠ΄ΠΆΠ΅Π½Ρ, ΠΊΠΎΠ»ΠΈ Ρ Π±Π°ΠΆΠ°Π½Π½Ρ ΡΠΎΠ·ΡΠ±ΡΠ°ΡΠΈΡΡ, ΡΠΊ Ρ Postgres ΠΏΡΠ°ΡΡΡ ΡΠΊΠ°ΡΡ ΡΡΡΠΊΠ°. Π¦Π΅ pgbench. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π³Π΅Π½Π΅ΡΡΠ²Π°ΡΠΈ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ pgbench. Π¦Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ΄Π½Π° ΠΎΠΏΡΡΡ "db-pgbench". ΠΠ°ΠΆΠ΅Ρ ΠΉΠΎΠΌΡ, ΡΠΊΠΈΠΉ scale. Π Π²ΡΠ΅ Π±ΡΠ΄Π΅ Ρ Ρ ΠΌΠ°ΡΡ Π·Π³Π΅Π½Π΅ΡΠΎΠ²Π°Π½ΠΎ, ΡΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ.
Π Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ:
- ΠΠ°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²ΠΈΠΊΠΎΠ½ΡΠ²Π°ΡΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡΠΊ SQL. Π¦Π΅ Π½Π°ΠΉΠΏΡΠΈΠΌΡΡΠΈΠ²Π½ΡΡΠΈΠΉ ΡΠΏΠΎΡΡΠ±.
- Π ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΅ΠΌΡΠ»ΡΠ²Π°ΡΠΈ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ. Π Π΅ΠΌΡΠ»ΡΠ²Π°ΡΠΈ ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π΄ΡΡΡΠΌ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΡ Π² ΡΠ°ΠΊΠΈΠΉ ΡΠΏΠΎΡΡΠ±. ΠΠ°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π·Π±ΠΈΡΠ°ΡΠΈ ΡΡΡ Π»ΠΎΠ³ΠΈ. Π ΡΠ΅ Π±ΠΎΠ»ΡΡΠ½ΠΎ. Π― ΠΏΠΎΠΊΠ°ΠΆΡ ΡΠΎΠΌΡ. Π Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ pgreplay ΠΏΡΠΎΠ³ΡΠ°ΡΠΌΠΎ, ΡΠΊΠΈΠΉ Π²Π±ΡΠ΄ΠΎΠ²Π°Π½ΠΈΠΉ Ρ Nancy.
- ΠΠ±ΠΎ ΡΠ½ΡΠΈΠΉ Π²Π°ΡΡΠ°Π½Ρ. Π’Π°ΠΊ Π·Π²Π°Π½Π΅ ΠΊΡΠ°ΡΡΠΎΠ²Π΅ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ, ΡΠΊΠ΅ ΠΌΠΈ ΡΠΎΠ±ΠΈΠΌΠΎ Π· Π΄Π΅ΡΠΊΠΎΡ ΠΊΡΠ»ΡΠΊΡΡΡΡ Π·ΡΡΠΈΠ»Ρ. ΠΠ½Π°Π»ΡΠ·ΡΡΡΠΈ Π½Π°ΡΠ΅ ΠΏΠΎΡΠΎΡΠ½Π΅ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ Π½Π° Π±ΠΎΠΉΠΎΠ²Ρ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΌΠΈ Π²ΠΈΡΠΌΠΈΠΊΡΡΠΌΠΎ ΡΠΎΠΏΠΎΠ²Ρ Π³ΡΡΠΏΠΈ Π·Π°ΠΏΠΈΡΡΠ². Π Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ pgbench ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΅ΠΌΡΠ»ΡΠ²Π°ΡΠΈ ΡΠ΅ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ Π² Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΡΡ.
- ΠΠ±ΠΎ ΠΌΠΈ SQL ΡΠΊΠΈΠΉΡΡ ΠΌΠ°ΡΠΌΠΎ Π²ΠΈΠΊΠΎΠ½Π°ΡΠΈ, ΡΠΎΠ±ΡΠΎ ΠΌΡΠ³ΡΠ°ΡΡΡ ΡΠΊΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡΠΌΠΎ, ΡΠ½Π΄Π΅ΠΊΡ ΡΠ°ΠΌ ΡΡΠ²ΠΎΡΡΡΠΌΠΎ, ANALAZE ΡΠ°ΠΌ Π²ΠΈΠΊΠΎΠ½ΡΡΠΌΠΎ. Π Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎ Π²Π°ΠΊΡΡΠΌΡ ΡΠ° ΠΏΡΡΠ»Ρ Π²Π°ΠΊΡΡΠΌΡ. ΠΠ°Π³Π°Π»ΠΎΠΌ Π±ΡΠ΄Ρ-ΡΠΊΠΈΠΉ SQL.
- ΠΠ±ΠΎ ΠΌΠΈ Ρ ΠΊΠΎΠ½ΡΡΠ·Ρ Π·ΠΌΡΠ½ΡΡΠΌΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈ ΠΊΡΠ»ΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ². ΠΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΠΈ, ΡΠΎΠ± Π½Π°ΠΌ ΠΏΠ΅ΡΠ΅Π²ΡΡΠΈΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΊΠ»Π°Π΄, 100 Π·Π½Π°ΡΠ΅Π½Ρ Ρ ΠΠΌΠ°Π·ΠΎΠ½Ρ Π΄Π»Ρ Π½Π°ΡΠΎΡ ΡΠ΅ΡΠ°Π±Π°ΠΉΡΠ½ΠΎΡ Π±Π°Π·ΠΈ. Π Π·Π° ΠΊΡΠ»ΡΠΊΠ° Π³ΠΎΠ΄ΠΈΠ½ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π―ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ΅ΡΠ°Π±Π°ΠΉΡΠ½Π° Π±Π°Π·Π° Ρ Π²Π°Ρ ΡΠΎΠ·Π³ΠΎΡΡΠ°ΡΠΈΠΌΠ΅ΡΡΡΡ ΠΊΡΠ»ΡΠΊΠ° Π³ΠΎΠ΄ΠΈΠ½. ΠΠ»Π΅ Π² ΡΠΎΠ·ΡΠΎΠ±ΡΡ Ρ ΠΏΠ°ΡΡ, Ρ Π½Π°Ρ ΠΌΠΎΠΆΠ»ΠΈΠ²Π° ΡΠ΅ΡΡΡ, ΡΠΎΠ±ΡΠΎ Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ»ΡΠ΄ΠΎΠ²Π½ΠΎ Π½Π° ΡΠΎΠΌΡ ΡΠ°ΠΌΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ ΡΡ ΠΆ ΡΠ°ΠΌΡ pgdata Ρ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡΠΈ. Postgres Π±ΡΠ΄Π΅ ΡΠ΅ΡΡΠ°ΡΡΡΠ²Π°ΡΠΈΡΡ, ΠΊΠ΅ΡΡ ΡΠΊΠΈΠ΄Π°ΡΠΈΡΡ. Π Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³Π°Π½ΡΡΠΈ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ.
- ΠΡΠΈΡΠΆΠ΄ΠΆΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΡΡ, Π² ΡΠΊΡΠΉ ΠΊΡΠΏΠ° Π²ΡΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΈΠΊΡΠ², ΠΏΠΎΡΠΈΠ½Π°ΡΡΠΈ Π²ΡΠ΄ ΡΠ½Π°ΠΏΡΠΎΡΡΠ².stat***. Π ΡΠ°ΠΌ Π½Π°ΠΉΡΡΠΊΠ°Π²ΡΡΠ΅ ΡΠ΅ pg_stat_statements, pg_stat_kcacke. Π¦Π΅ Π΄Π²Π° ΡΠΎΠ·ΡΠΈΡΠ΅Π½Π½Ρ, ΡΠΎ Π°Π½Π°Π»ΡΠ·ΡΡΡΡ Π·Π°ΠΏΠΈΡΠΈ. pg_stat_bgwriter ΠΌΡΡΡΠΈΡΡ Ρ ΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ»ΡΠΊΠΈ pgwriter ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ, Π° ΡΠ΅ ΠΉ ΠΏΠΎ checkpoint Ρ ΠΏΠΎ ΡΠΎΠΌΡ, ΡΠΊ ΡΠ°ΠΌΡ Π±Π΅ΠΊΠ΅Π½Π΄ΠΈ Π²ΠΈΡΡΡΠ½ΡΡΡΡ Π±ΡΡΠ΄Π½Ρ Π±ΡΡΠ΅ΡΠ°. Π ΡΠ΅ Π²ΡΠ΅ ΡΡΠΊΠ°Π²ΠΎ ΠΏΠΎΠ΄ΠΈΠ²ΠΈΡΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, ΠΊΠΎΠ»ΠΈ ΠΌΠΈ shared_buffers Π½Π°Π»Π°ΡΡΠΎΠ²ΡΡΠΌΠΎ, Π΄ΡΠΆΠ΅ ΡΡΠΊΠ°Π²ΠΎ ΠΏΠΎΠ΄ΠΈΠ²ΠΈΡΠΈΡΡ, ΡΠΊΡΠ»ΡΠΊΠΈ ΡΠ°ΠΌ Ρ ΡΠΎ Π²ΠΈΡΡΡΠ½ΡΠ².
- Π’Π°ΠΊΠΎΠΆ ΠΏΡΠΈΡΠΆΠ΄ΠΆΠ°ΡΡΡ Π»ΠΎΠ³Ρ Postgres. ΠΠ²Π° Π»ΠΎΠ³ΠΈ β Π»ΠΎΠ³ ΠΏΡΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠ° Π»ΠΎΠ³ ΠΏΡΠΎΠ³ΡΠ°Π²Π°Π½Π½Ρ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ.
- Π©ΠΎΠ΄ΠΎ Π½ΠΎΠ²Ρ ΡΡΡΡ β ΡΠ΅ FlameGraphs.
- Π’Π°ΠΊΠΎΠΆ, ΡΠΊΡΠΎ Π²ΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π»ΠΈ pgreplay Π°Π±ΠΎ pgbench Π²Π°ΡΡΠ°Π½ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°Π²Π°Π½Π½Ρ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ, ΡΠΎ Π±ΡΠ΄Π΅ ΡΡ Π½ΡΠΉ ΡΡΠ΄Π½ΠΈΠΉ Π²ΠΈΡΠ½ΠΎΠ²ΠΎΠΊ. Π Π²ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ Π±Π°ΡΠΈΡΠΈ latency ΡΠ° TPS. ΠΠΎΠΆΠ½Π° Π±ΡΠ΄Π΅ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΊ Π²ΠΎΠ½ΠΈ ΡΠ΅ Π±Π°ΡΠΈΠ»ΠΈ.
- ΠΠ½ΡΠΎΡΠΌΠ°ΡΡΡ ΠΏΡΠΎ ΡΠΈΡΡΠ΅ΠΌΡ.
- ΠΠ°Π·ΠΎΠ²Ρ ΠΏΠ΅ΡΠ΅Π²ΡΡΠΊΠΈ CPU ΡΠ° IO. Π¦Π΅ Π±ΡΠ»ΡΡΠ΅ Π΄Π»Ρ EC2 instance Π² ΠΠΌΠ°Π·ΠΎΠ½Ρ, ΠΊΠΎΠ»ΠΈ Π²ΠΈ Ρ ΠΎΡΠ΅ΡΠ΅ Π² ΠΏΠΎΡΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΠΈ 100 ΠΎΠ΄Π½Π°ΠΊΠΎΠ²ΠΈΡ instances Ρ ΡΠ°ΠΌ ΠΏΡΠΎΠ³Π½Π°ΡΠΈ ΠΏΠΎ 100 ΡΡΠ·Π½ΠΈΡ ΠΏΡΠΎΠ³ΠΎΠ½ΡΠ², ΡΠΎ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅ 10 000 Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡΠ². Π Π²Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ½Π°ΡΠΈΡΡ, ΡΠΎ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΡΡΠ°ΠΏΠΈΠ² ΡΡΠ΅ΡΠ±Π½ΠΈΠΉ instance, ΡΠΊΠΎΠ³ΠΎ Π²ΠΆΠ΅ Ρ ΡΠΎΡΡ ΡΡΠΈΡΠΊΡΡ. ΠΠ° ΡΡΠΉ Π·Π°Π»ΡΠ·ΡΡ ΡΠ½ΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΡΠ°ΡΡ Ρ Π²Π°ΠΌ ΠΌΠ°Π»ΠΎ Π·Π°Π»ΠΈΡΠ°ΡΡΡΡΡ ΡΠ΅ΡΡΡΡΡ. Π’Π°ΠΊΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΈ ΠΊΡΠ°ΡΠ΅ Π²ΡΠ΄ΠΊΠΈΠ½ΡΡΠΈ. Π ΡΠΊΡΠ°Π· Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ sysbench Π²ΡΠ΄ ΠΠ»Π΅ΠΊΡΡΡ ΠΠΎΠΏΠΈΡΠΎΠ²Π° ΠΌΠΈ ΡΠΎΠ±ΠΈΠΌΠΎ ΠΊΡΠ»ΡΠΊΠ° ΠΊΠΎΡΠΎΡΠ΅Π½ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΡΡΠΎΠΊ, ΡΠΊΡ ΠΏΡΠΈΡΠ΄ΡΡΡ Ρ ΠΌΠΎΠΆΠ½Π° ΠΏΠΎΡΡΠ²Π½ΡΡΠΈ Π· ΡΠ½ΡΠΈΠΌΠΈ, ΡΠΎΠ±ΡΠΎ Π²ΠΈ Π·ΡΠΎΠ·ΡΠΌΡΡΡΠ΅, ΡΠΊ CPU ΠΏΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ Ρ ΡΠΊ IO ΠΏΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ.
Π―ΠΊΡ ΡΠ΅Ρ Π½ΡΡΠ½Ρ ΡΠΊΠ»Π°Π΄Π½ΠΎΡΡΡ Π½Π° ΠΏΡΠΈΠΊΠ»Π°Π΄Ρ ΡΡΠ·Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠ°Π½ΡΠΉ?
ΠΠΎΠΏΡΡΡΠΈΠΌΠΎ, ΠΌΠΈ Ρ ΠΎΡΠ΅ΠΌΠΎ ΡΠ΅Π°Π»ΡΠ½Π΅ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ Π»ΠΎΠ³ΡΠ² ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠΈ. ΠΡΠ΄ΠΌΡΠ½Π½Π° ΡΠ΄Π΅Ρ, ΡΠΊΡΠΎ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° Open Source pgreplay. ΠΠΈ ΠΉΠΎΠ³ΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΠΌΠΎ. ΠΠ»Π΅ ΡΠΎΠ± Π²ΡΠ½ Π΄ΠΎΠ±ΡΠ΅ ΠΏΡΠ°ΡΡΠ²Π°Π², Π²ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ Π²ΠΊΠ»ΡΡΠΈΡΠΈ ΠΏΠΎΠ²Π½Π΅ Π»ΠΎΠ³ΡΠ²Π°Π½Π½Ρ Π·Π°ΠΏΠΈΡΡΠ² Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ° ΡΠ°ΠΉΠΌΡΠ½Π³ΠΎΠΌ.
Π’Π°ΠΌ Ρ Π΄Π΅ΡΠΊΡ ΡΠΊΠ»Π°Π΄Π½ΠΎΡΡ ΡΠΎΠ΄ΠΎ ΡΡΠΈΠ²Π°Π»ΠΎΡΡΡ Ρ timestamp. ΠΠΈ ΡΡ ΠΊΡΡ Π½Ρ ΠΎΠΏΡΡΡΠΈΠΌΠΎ. ΠΠΎΠ»ΠΎΠ²Π½Π΅ ΠΏΠΈΡΠ°Π½Π½Ρ β ΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈ ΡΠΎΠ±Ρ ΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠΈ ΡΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅?
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΊΠ°, ΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΈΠΌ. ΠΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ ΠΏΠ΅ΡΡ Π·Π° Π²ΡΠ΅ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΊΠΈΠΉ ΠΏΠΎΡΡΠΊ ΠΏΠΈΡΠ°ΡΠΈΠΌΠ΅ΡΡΡΡ Π² Π»ΠΎΠ³. Π―ΠΊΡΠΎ Ρ Π²Π°Ρ Ρ pg_stat_statements, Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΊΠΈΠΌ Π·Π°ΠΏΠΈΡΠΎΠΌ (ΠΏΠΎΡΠΈΠ»Π°Π½Π½Ρ Π±ΡΠ΄Π΅ Π² ΡΠ»Π°ΠΉΠ΄Π°Ρ Π΄ΠΎΡΡΡΠΏΠ½Π°) Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΊΡΠ»ΡΠΊΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·Π½ΠΎ Π±Π°ΠΉΡ Π±ΡΠ΄Π΅ ΠΏΠΈΡΠ°ΡΠΈΡΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ.
ΠΠΈ Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ Π½Π° Π΄ΠΎΠ²ΠΆΠΈΠ½Ρ Π·Π°ΠΏΠΈΡΡ. ΠΠΈ Π½Π΅Ρ ΡΡΡΠΌΠΎ ΡΠΈΠΌ ΡΠ°ΠΊΡΠΎΠΌ, ΡΠΎ ΡΠ°ΠΌ Π½Π΅ΠΌΠ°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ², Π°Π»Π΅ ΠΌΠΈ Π·Π½Π°ΡΠΌΠΎ Π΄ΠΎΠ²ΠΆΠΈΠ½Ρ Π·Π°ΠΏΠΈΡΡ Ρ Π·Π½Π°ΡΠΌΠΎ ΡΠΊΡΠ»ΡΠΊΠΈ ΡΠ°Π·ΡΠ² Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ Π²ΡΠ½ Π²ΠΈΠΊΠΎΠ½ΡΠ²Π°Π²ΡΡ. Π’Π°ΠΊΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΡΠΈΠΊΠΈΠ½ΡΡΠΈ ΡΠΊΡΠ»ΡΠΊΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·Π½ΠΎ Π±Π°ΠΉΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΈΡΠΈΡΡ Π²Π΄Π²ΡΡΡ, Π°Π»Π΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΌΠΈ ΡΠΎΡΠ½ΠΎ Π·ΡΠΎΠ·ΡΠΌΡΡΠΌΠΎ Π² ΡΠ°ΠΊΠΈΠΉ ΡΠΏΠΎΡΡΠ±.
ΠΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠ±Π°ΡΠΈΡΠΈ, ΡΠΎ 802 ΡΠ°Π·ΡΠ² Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ ΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡ Π²ΠΈΠΊΠΎΠ½ΡΡΡΡΡΡ. Π ΠΌΠΈ Π±Π°ΡΠΈΠΌΠΎ, ΡΠΎ bytes_per sec β 300 kB/s ΠΏΠΈΡΠ°ΡΠΈΠΌΠ΅ΡΡΡΡ ΠΏΠ»ΡΡ ΠΌΡΠ½ΡΡ. Π Π·Π°Π·Π²ΠΈΡΠ°ΠΉ ΠΌΠΈ ΡΠ°ΠΊΠΈΠΉ ΠΏΠΎΡΡΠΊ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠΎΠ±Ρ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠΈ.
ΠΠ»Π΅! Π‘ΠΏΡΠ°Π²Π° Π² ΡΠΎΠΌΡ, ΡΠΎ ΡΡΠ½ΡΡΡΡ ΡΡΠ·Π½Ρ ΡΠΈΡΡΠ΅ΠΌΠΈ Π»ΠΎΠ³ΡΠ²Π°Π½Π½Ρ. Π Π·Π° ΡΠΌΠΎΠ²ΡΠ°Π½Π½ΡΠΌ Π»ΡΠ΄ΠΈ Π·Π°Π·Π²ΠΈΡΠ°ΠΉ Β«syslogΒ».
Π ΡΠΊΡΠΎ Ρ Π²Π°Ρ Ρ syslog, ΡΠΎ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ ΡΠ°ΠΊΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°. ΠΠΈ Π²ΡΠ·ΡΠΌΠ΅ΠΌΠΎ pgbench, Π²ΠΊΠ»ΡΡΠΈΠΌΠΎ Π»ΠΎΠ³ΡΠ²Π°Π½Π½Ρ Π·Π°ΠΏΠΈΡΡΠ² ΡΠ° ΠΏΠΎΠ΄ΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΎ Π²ΠΈΡ ΠΎΠ΄ΠΈΡΡ.
ΠΠ΅Π· Π»ΠΎΠ³ΡΠ²Π°Π½Π½Ρ β ΡΠ΅ ΡΡΠΎΠ²ΠΏΡΠΈΠΊ Π»ΡΠ²ΠΎΡΡΡ. Π£ Π½Π°Ρ Π²ΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎ 161 000 TPS. Π syslog β ΡΠ΅ Π² Ubuntu 16.04 Ρ ΠΠΌΠ°Π·ΠΎΠ½Ρ Ρ Π½Π°Ρ Π²ΠΈΡ ΠΎΠ΄ΠΈΡΡ 37 000 TPS. Π ΡΠΊΡΠΎ ΠΌΠΈ Π·ΠΌΡΠ½ΠΈΠΌΠΎ Π½Π° Π΄Π²Π° ΡΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΈ Π»ΠΎΠ³ΡΠ²Π°Π½Π½Ρ, ΡΠΎ Π½Π°Π±Π°Π³Π°ΡΠΎ ΠΊΡΠ°ΡΠ° ΡΠΈΡΡΠ°ΡΡΡ. Π’. Π΅. ΠΌΠΈ ΠΎΡΡΠΊΡΠ²Π°Π»ΠΈ, ΡΠΎ ΠΏΡΠΎΡΡΠ΄Π΅, Π°Π»Π΅ Π½Π΅ Π½Π°ΡΡΡΠ»ΡΠΊΠΈ ΠΆ.
Π Π½Π° CentOS 7, Π² ΡΠΊΠΎΠΌΡ ΡΠ΅ journald Π±Π΅ΡΠ΅ ΡΡΠ°ΡΡΡ, ΠΏΠ΅ΡΠ΅ΡΠ²ΠΎΡΡΡΡΠΈ Π»ΠΎΠ³ΠΈ Π½Π° Π±ΡΠ½Π°ΡΠ½ΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ Π·ΡΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠΊΡ Ρ Ρ. Π΄., ΡΠΎ ΡΠ°ΠΌ Π²Π·Π°Π³Π°Π»Ρ ΠΆΠ°Ρ , Ρ 44 ΡΠ°Π·ΠΈ ΠΏΡΠΎΡΡΠ΄Π°ΡΠΌΠΎ ΠΏΠΎ TPS.
Π ΡΠ΅ ΡΠ΅, ΡΠ· ΡΠΈΠΌ ΠΆΠΈΠ²ΡΡΡ Π»ΡΠ΄ΠΈ. Π ΡΠ°ΡΡΠΎ Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΡΡΡ , ΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎ Ρ Π²Π΅Π»ΠΈΠΊΠΈΡ , ΡΠ΅ Π΄ΡΠΆΠ΅ ΡΠΊΠ»Π°Π΄Π½ΠΎ ΠΏΠΎΠΌΡΠ½ΡΡΠΈ. Π―ΠΊΡΠΎ Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΡ Π°ΡΠΈ Π²ΡΠ΄ syslog, ΡΠΎ, Π±ΡΠ΄Ρ Π»Π°ΡΠΊΠ°, ΡΠ΄ΡΡΠ΅ Π²ΡΠ΄ Π½ΡΠΎΠ³ΠΎ.
- ΠΡΡΠ½ΡΡΡ IOPS ΡΠ° ΠΏΠΎΡΡΠΊ Π·Π°ΠΏΠΈΡΡ.
- ΠΠ΅ΡΠ΅Π²ΡΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π»ΠΎΠ³ΡΠ²Π°Π½Π½Ρ.
- Π―ΠΊΡΠΎ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΎΠ²Π°Π½Π΅ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ Π½Π°Π΄ΠΌΡΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠ΅, ΡΠΎΠ·Π³Π»ΡΠ½ΡΡΠ΅ Π²Π°ΡΡΠ°Π½Ρ ΡΠ· ΡΠ΅ΠΌΠΏΠ»ΡΠ²Π°Π½Π½ΡΠΌ.
ΠΠΈ ΠΌΠ°ΡΠΌΠΎ pg_stat_statements. Π―ΠΊ Ρ ΡΠΊΠ°Π·Π°Π², Π²ΡΠ½ ΠΎΠ±ΠΎΠ²'ΡΠ·ΠΊΠΎΠ²ΠΎ ΠΌΠ°Ρ Π±ΡΡΠΈ. Π ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²Π·ΡΡΠΈ Ρ ΠΊΠΎΠΆΠ½Ρ Π³ΡΡΠΏΡ Π·Π°ΠΏΠΈΡΡΠ² ΡΠΏΠ΅ΡΡΠ°Π»ΡΠ½ΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ ΠΎΠΏΠΈΡΠ°ΡΠΈ Ρ ΡΠ°ΠΉΠ»Ρ. Π Π΄Π°Π»Ρ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ Π΄ΡΠΆΠ΅ Π·ΡΡΡΠ½Ρ ΡΡΡΡ Π² pgbench - ΡΠ΅ ΠΌΠΎΠΆΠ»ΠΈΠ²ΡΡΡΡ ΠΏΡΠ΄ΡΡΠ½ΡΡΠΈ ΠΊΡΠ»ΡΠΊΠ° ΡΠ°ΠΉΠ»ΡΠ² Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΠΎΠΏΡΡΡ "-f".
ΠΡΠ½ ΡΠΎΠ·ΡΠΌΡΡ Π±Π°Π³Π°ΡΠΎ "-f". Π ΠΌΠΎΠΆΠ½Π° ΡΠΊΠ°Π·Π°ΡΠΈ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ @ Π² ΠΊΡΠ½ΡΡ, ΡΠΊΠ° ΡΠ°ΡΡΠΊΠ° Ρ ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΈΠΊΠ° ΠΏΠΎΠ²ΠΈΠ½Π½Π° Π±ΡΡΠΈ. Π’. Π΅. ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΠΈ, ΡΠΎ ΠΎΡΡ ΡΠ΅ Π²ΠΈΠΊΠΎΠ½ΡΠΉ Ρ 10% Π²ΠΈΠΏΠ°Π΄ΠΊΠ°Ρ , Π° ΡΠ΅ΠΉ Ρ 20%. Π ΡΠ΅ Π½Π°Π±Π»ΠΈΠΆΠ°ΡΠΈΠΌΠ΅ Π½Π°Ρ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΡΠΎ ΠΌΠΈ Π±Π°ΡΠΈΠΌΠΎ Π½Π° production.
Π ΡΠΊ ΠΌΠΈ Π·ΡΠΎΠ·ΡΠΌΡΡΠΌΠΎ, ΡΠΎ ΠΌΠΈ ΠΌΠ°ΡΠΌΠΎ Π½Π° production? Π―ΠΊΠ° ΡΠ°ΡΡΠΊΠ° ΡΠ° ΡΠΎΠ³ΠΎ ΡΠΊ? Π’ΡΡ ΡΡΠΎΡΠΊΠΈ Π²ΡΠ΄Ρ
ΡΠ΄ ΡΠ±ΡΠΊ. ΠΠΈ ΠΌΠ°ΡΠΌΠΎ ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ΄ΡΠΊΡ
ΠΡΠ½ Π½Π°ΡΠΎΠ΄ΠΈΠ²ΡΡ ΡΡΠΎΡ ΠΈ Π· ΡΠ½ΡΠΈΡ ΠΏΡΠΈΡΠΈΠ½. Π§Π΅ΡΠ΅Π· ΡΠ΅, ΡΠΎ ΠΌΠΎΠ½ΡΡΠΎΡΠΈΠ½Π³Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ½ΡΠΎ. Π’. Π΅. Π²ΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΠ΅, Π΄ΠΈΠ²ΡΡΡΡΡ Π½Π° Π±Π°Π·Ρ, Π΄ΠΈΠ²ΡΡΡΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠΊΡ Ρ. Π, ΡΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²ΠΈ ΡΠΎΠ±ΠΈΡΠ΅ health_check. Π―ΠΊΡΠΎ Π²ΠΈ Π΄ΠΎΡΠ²ΡΠ΄ΡΠ΅Π½ΠΈΠΉ DBA, ΡΠΎ Π²ΠΈ ΡΠΎΠ±ΠΈΡΠ΅ health_check. ΠΠΎΠ΄ΠΈΠ²ΠΈΠ»ΠΈΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°Π½Π½Ρ ΡΠ½Π΄Π΅ΠΊΡΡΠ² Ρ Ρ. Π΄. Π―ΠΊΡΠΎ Ρ Π²Π°Ρ OKmeter, ΡΠΎ ΡΡΠ΄ΠΎΠ²ΠΎ. Π¦Π΅ ΠΊΠ»Π°ΡΠ½ΠΈΠΉ ΠΌΠΎΠ½ΡΡΠΎΡΠΈΠ½Π³ Postgres. OKmeter.io β Π±ΡΠ΄Ρ Π»Π°ΡΠΊΠ°, ΡΡΠ°Π²ΡΠ΅ ΠΉΠΎΠ³ΠΎ ΡΠ°ΠΌ Π΄ΡΠΆΠ΅ ΠΊΠ»Π°ΡΠ½ΠΎ Π²ΡΠ΅ Π·ΡΠΎΠ±Π»Π΅Π½ΠΎ. ΠΡΠ½ ΠΏΠ»Π°ΡΠ½ΠΈΠΉ.
Π―ΠΊΡΠΎ Ρ Π²Π°Ρ ΠΉΠΎΠ³ΠΎ Π½Π΅ΠΌΠ°Ρ, ΡΠΎ Π·Π°Π·Π²ΠΈΡΠ°ΠΉ Ρ Π²Π°Ρ ΠΌΠ°Π»ΠΎ, ΡΠΎ Ρ. Π£ ΠΌΠΎΠ½ΡΡΠΎΡΠΈΠ½Π³Ρ Π·Π°Π·Π²ΠΈΡΠ°ΠΉ Ρ CPU, IO Ρ ΡΠ΅ ΡΠ· Π·Π°ΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½Π½ΡΠΌΠΈ, Ρ Π²ΡΠ΅. Π Π½Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π±ΡΠ»ΡΡΠ΅. ΠΠ°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π±Π°ΡΠΈΡΠΈ, ΡΠΊ ΠΏΡΠ°ΡΡΡ Π°Π²ΡΠΎΠ²Π°ΠΊΡΡΠΌ, ΡΠΊ ΠΏΡΠ°ΡΡΡ checkpoint, Π² io ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π²ΡΠ΄ΠΎΠΊΡΠ΅ΠΌΠΈΡΠΈ checkpoint Π²ΡΠ΄ bgwriter Ρ Π²ΡΠ΄ Π±Π΅ΠΊΠ΅Π½Π΄ΡΠ² Ρ Ρ.Π΄.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌΡ, ΠΊΠΎΠ»ΠΈ ΡΠΈ Π΄ΠΎΠΏΠΎΠΌΠ°Π³Π°ΡΡ ΡΠΊΡΠΉΡΡ Π²Π΅Π»ΠΈΠΊΡΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΡΡ, Π²ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠΆΡΡΡ ΡΠ²ΠΈΠ΄ΠΊΠΎ Π²ΠΏΡΠΎΠ²Π°Π΄ΠΈΡΠΈ. ΠΠ΅ ΠΌΠΎΠΆΡΡΡ ΡΠ²ΠΈΠ΄ΠΊΠΎ ΠΊΡΠΏΠΈΡΠΈ OKmeter. ΠΠΎΠΆΠ»ΠΈΠ²ΠΎ, Π·Π° ΠΏΡΠ²ΡΠΎΠΊΡ ΠΊΡΠΏΠ»ΡΡΡ. ΠΠ΅ ΠΌΠΎΠΆΡΡΡ ΡΠ²ΠΈΠ΄ΠΊΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠΈ ΡΠΊΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ.
Π Π² Π½Π°Ρ Π½Π°ΡΠΎΠ΄ΠΈΠ»Π°ΡΡ ΡΠ΄Π΅Ρ, ΡΠΎ Π½Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΈΠΉ ΡΠ°ΠΊΠΈΠΉ ΡΠΏΠ΅ΡΡΠ°Π»ΡΠ½ΠΈΠΉ ΡΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΡΠΊΠΈΠΉ Π½Π΅ Π²ΠΈΠΌΠ°Π³Π°Ρ Π½ΡΡΠΎΠ³ΠΎ Π² ΡΡΡΠ°Π½ΠΎΠ²ΡΡ, ΡΠΎΠ±ΡΠΎ Π²ΠΈ Π²Π·Π°Π³Π°Π»Ρ Π½ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ ΡΡΠ°Π²ΠΈΡΠΈ Π½Π° production. Π‘ΡΠ°Π²ΡΠ΅ ΡΠΎΠ±Ρ Π½Π° Π½ΠΎΡΡΠ±ΡΠΊ, Π°Π±ΠΎ Π½Π° observing server, Π·Π²ΡΠ΄ΠΊΠΈ Π²ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΠΈΠΌΠ΅ΡΠ΅. Π Π²ΡΠ½ Π°Π½Π°Π»ΡΠ·ΡΠ²Π°ΡΠΈΠΌΠ΅ Π±Π°Π³Π°ΡΠΎ ΡΠΎΠ³ΠΎ: Ρ ΠΎΠΏΠ΅ΡΠ°ΡΡΠΉΠ½Ρ ΡΠΈΡΡΠ΅ΠΌΡ, Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Ρ ΡΠΈΡΡΠ΅ΠΌΡ, Ρ ΡΠ°ΠΌ Postgres, ΡΠΎΠ±Π»ΡΡΠΈ ΡΠΊΡΡΡ Π»Π΅Π³ΠΊΡ Π·Π°ΠΏΠΈΡΠΈ, ΡΠΊΡ ΠΌΠΎΠΆΠ½Π° Π³Π°Π½ΡΡΠΈ ΠΏΡΡΠΌΠΎ Π½Π° production Ρ Π½ΡΡΠΎΠ³ΠΎ Π½Π΅ Π»ΡΠΆΠ΅.
ΠΠΈ Π·Π°ΠΊΠ»ΠΈΠΊΠ°Π»ΠΈ ΠΉΠΎΠ³ΠΎ Postgres-Checkup. Π―ΠΊΡΠΎ ΠΏΠΎ-ΠΌΠ΅Π΄ΠΈΡΠ½ΠΎΠΌΡ, ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½Π° ΠΏΠ΅ΡΠ΅Π²ΡΡΠΊΠ° Π·Π΄ΠΎΡΠΎΠ²'Ρ. Π―ΠΊΡΠΎ Π² Π°Π²ΡΠΎΠΌΠΎΠ±ΡΠ»ΡΠ½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΈΡΡ, ΡΠΎ ΡΠ΅ ΡΠΊ Π’Π. ΠΠΈ Π’Π ΡΠΎΠ±ΠΈΡΠ΅ Ρ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΊΠΎΠΆΠ½Ρ ΠΏΡΠ²ΡΠΎΠΊΡ ΡΠΈ ΡΡΠΊ, Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²ΡΠ΄ ΠΌΠ°ΡΠΊΠΈ. Π ΡΠΈ ΡΠΎΠ±ΠΈΡΠ΅ Π²ΠΈ ΡΠ΅ Π΄Π»Ρ ΡΠ²ΠΎΡΡ Π±Π°Π·ΠΈ? Π’. Π΅. Π§ΠΈ ΡΠΎΠ±ΠΈΡΠ΅ Π²ΠΈ Π³Π»ΠΈΠ±ΠΎΠΊΠ΅ Π΄ΠΎΡΠ»ΡΠ΄ΠΆΠ΅Π½Π½Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ? ΠΠΎΠ³ΠΎ ΡΡΠ΅Π±Π° ΡΠΎΠ±ΠΈΡΠΈ. Π―ΠΊΡΠΎ Π²ΠΈ ΡΠΎΠ±ΠΈΡΠ΅ Π±Π΅ΠΊΠ°ΠΏΠΈ, ΡΠΎ ΡΠΎΠ±ΡΡΡ Ρ checkup, ΡΠ΅ Π½Π΅ ΠΌΠ΅Π½Ρ Π²Π°ΠΆΠ»ΠΈΠ²ΠΎ.
Π ΠΌΠΈ ΠΌΠ°ΡΠΌΠΎ ΡΠ°ΠΊΠΈΠΉ ΡΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. ΠΡΠ½ ΠΏΠΎΡΠ°Π² Π°ΠΊΡΠΈΠ²Π½ΠΎ Π·Π°ΡΠΎΠ΄ΠΆΡΠ²Π°ΡΠΈΡΡ Π»ΠΈΡΠ΅ ΡΡΠΈ ΠΌΡΡΡΡΡ ΡΠΎΠΌΡ. ΠΡΠ½ ΡΠ΅ ΠΌΠΎΠ»ΠΎΠ΄ΠΈΠΉ, Π°Π»Π΅ ΡΠ°ΠΌ Ρ Π±Π°Π³Π°ΡΠΎ ΡΠΎΠ³ΠΎ.
ΠΠ±ΠΈΡΠ°ΡΠΌΠΎ Β«Π²ΠΏΠ»ΠΈΠ²ΠΎΠ²ΡΒ» Π³ΡΡΠΏΠΈ Π·Π°ΠΏΠΈΡΡΠ² β Π·Π²ΡΡ Π003 Ρ Postgres-checkup
Π ΡΠ°ΠΌ Ρ Π³ΡΡΠΏΠ° Π·Π²ΡΡΡΠ² Π. Π’ΡΠΈ Π·Π²ΡΡΠΈ ΠΏΠΎΠΊΠΈ ΡΠΎ. Π Ρ ΡΠ°ΠΊΠΈΠΉ Π·Π²ΡΡ Π003. Π’Π°ΠΌ Π²Π΅ΡΡ ΡΠ²ΠΊΠ° Π²ΡΠ΄ pg_stat_statements Π²ΡΠ΄ΡΠΎΡΡΠΎΠ²Π°Π½Π° ΠΏΠΎ total_time.
ΠΠΎΠ»ΠΈ ΠΌΠΈ ΡΠΎΡΡΡΡΠΌΠΎ ΠΏΠΎ total_time Π³ΡΡΠΏΠΈ Π·Π°ΠΏΠΈΡΡΠ², ΡΠΎ Π²Π΅ΡΡ ΡΠ²ΡΡ ΠΌΠΈ Π±Π°ΡΠΈΠΌΠΎ ΡΠ°ΠΊΡ Π³ΡΡΠΏΡ, ΡΠΊΠ° Π²Π°Π½ΡΠ°ΠΆΠΈΡΡ Π½Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π°ΠΉΠ±ΡΠ»ΡΡΠ΅, Ρ. Π΅. ΡΠΏΠΎΠΆΠΈΠ²Π°Ρ Π±ΡΠ»ΡΡΠ΅ ΡΠ΅ΡΡΡΡΡΠ². Π§ΠΎΠΌΡ Ρ Π½Π°Π·ΠΈΠ²Π°Ρ Π³ΡΡΠΏΠΈ Π·Π°ΠΏΠΈΡΡΠ²? Π’ΠΎΠΌΡ ΡΠΎ ΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π²ΠΈΠΊΠΈΠ½ΡΠ»ΠΈ. Π¦Π΅ Π½Π΅ Π·Π°ΠΏΠΈΡΠΈ, Π° Π³ΡΡΠΏΠΈ Π·Π°ΠΏΠΈΡΡΠ², Ρ. Π΅. Π²ΠΎΠ½ΠΈ Π°Π±ΡΡΡΠ°Π³ΠΎΠ²Π°Π½Ρ.
Π ΡΠΊΡΠΎ ΠΌΠΈ ΠΎΠΏΡΠΈΠΌΡΠ·ΡΠ²Π°ΡΠΈΠΌΠ΅ΠΌΠΎ Π·Π²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·, ΠΌΠΈ ΠΏΠΎΠ»Π΅Π³ΡΡΠ²Π°ΡΠΈΠΌΠ΅ΠΌΠΎ Π½Π°ΡΡ ΡΠ΅ΡΡΡΡΠΈ Ρ Π²ΡΠ΄ΠΊΠ»Π°Π΄Π°ΡΠΈΠΌΠ΅ΠΌΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ»ΠΈ Π½Π°ΠΌ ΡΡΠ΅Π±Π° Π±ΡΠ΄Π΅ ΡΠΎΠ±ΠΈΡΠΈ Π°ΠΏΠ³ΡΠ΅ΠΉΠ΄. Π¦Π΅ Π΄ΡΠΆΠ΅ Π΄ΠΎΠ±ΡΠΈΠΉ ΡΠΏΠΎΡΡΠ± Π·Π°ΠΎΡΠ°Π΄ΠΈΡΠΈ Π³ΡΠΎΡΡ.
ΠΠΎΠΆΠ»ΠΈΠ²ΠΎ, ΡΠ΅ Π½Π΅ Π΄ΡΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΡΠ± ΡΠΊ ΠΏΡΠΊΠ»ΡΠ²Π°Π½Π½Ρ ΠΏΡΠΎ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΡΠ², ΡΠΎΠΌΡ ΡΠΎ ΠΌΠΈ, ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ, Π½Π΅ Π±Π°ΡΠΈΠΌΠΎ ΡΡΠ΄ΠΊΡΡΠ½Ρ, Π°Π»Π΅ Π΄ΡΠΆΠ΅ ΠΏΡΠΈΠΊΡΡ Π²ΠΈΠΏΠ°Π΄ΠΊΠΈ, ΠΊΠΎΠ»ΠΈ Π»ΡΠ΄ΠΈΠ½Π° ΡΠ΅ΠΊΠ°Π»Π° 15 ΡΠ΅ΠΊΡΠ½Π΄. Π£ ΡΡΠΌΡ Π²ΠΎΠ½ΠΈ ΡΠ°ΠΊΡ ΡΡΠ΄ΠΊΡΡΠ½Ρ, ΡΠΎ ΠΌΠΈ ΡΡ Π½Π΅ Π±Π°ΡΠΈΠΌΠΎ, Π°Π»Π΅ ΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π·Π°ΠΉΠΌΠ°ΡΠΌΠΎΡΡ.
Π©ΠΎ ΡΡΠ°Π»ΠΎΡΡ Ρ ΡΡΠΉ ΡΠ°Π±Π»ΠΈΡΡ? ΠΠΈ Π·ΡΠΎΠ±ΠΈΠ»ΠΈ Π΄Π²Π° ΡΠ½Π°ΠΏΡΠΎΡΠΈ. Postgres_checkup Π²Π°ΠΌ Π·ΡΠΎΠ±ΠΈΡΡ Π΄Π΅Π»ΡΡΡ Π·Π° ΠΊΠΎΠΆΠ½ΠΎΡ ΠΌΠ΅ΡΡΠΈΠΊΠΎΡ: Π·Π° total-time, calls, rows, shared_blks_read Ρ Ρ. Π΄. ΠΡΠ΅, Π΄Π΅Π»ΡΡΡ ΠΎΠ±ΡΠΈΡΠ»ΠΈΠ². pg_stat_statements ΠΌΠ°Ρ Π²Π΅Π»ΠΈΠΊΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠΎΠΌΡ, ΡΠΎ Π²ΡΠ½ Π½Π΅ ΠΏΠ°ΠΌ'ΡΡΠ°Ρ, ΠΊΠΎΠ»ΠΈ Π±ΡΠ² reset. Π―ΠΊΡΠΎ pg_stat_database ΠΏΠ°ΠΌ'ΡΡΠ°Ρ, pg_stat_statements Π½Π΅ ΠΏΠ°ΠΌ'ΡΡΠ°Ρ. ΠΠΈ Π±Π°ΡΠΈΡΠ΅, ΡΠΎ ΡΠ°ΠΌ 1 ΡΠΈΡΠ»ΠΎ, Π° Π·Π²ΡΠ΄ΠΊΠΈ ΠΌΠΈ ΡΠ°Ρ ΡΠ²Π°Π»ΠΈ, ΠΌΠΈ Π½Π΅ Π·Π½Π°ΡΠΌΠΎ.
Π ΡΡΡ ΠΌΠΈ Π·Π½Π°ΡΠΌΠΎ, ΡΡΡ Ρ Π½Π°Ρ Ρ Π΄Π²Π° ΡΠ½Π°ΠΏΡΠΎΡΠΈ. ΠΠΈ Π·Π½Π°ΡΠΌΠΎ, ΡΠΎ Π΄Π΅Π»ΡΡΠ° Π±ΡΠ»Π° Ρ ΡΡΠΎΠΌΡ Π²ΠΈΠΏΠ°Π΄ΠΊΡ 56 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠΆΠ΅ Π½Π΅Π²Π΅Π»ΠΈΠΊΠΈΠΉ ΠΏΡΠΎΠΌΡΠΆΠΎΠΊ. ΠΠ° total_time Π²ΡΠ΄ΡΠΎΡΡΡΠ²Π°Π»ΠΈ. Π Π΄Π°Π»Ρ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄ΠΈΡΠ΅ΡΠ΅Π½ΡΡΡΠ²Π°ΡΠΈ, ΡΠΎΠ±ΡΠΎ ΠΌΠΈ Π²ΡΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π΄ΡΠ»ΠΈΠΌΠΎ Π½Π° ΡΡΠΈΠ²Π°Π»ΡΡΡΡ. Π―ΠΊΡΠΎ ΠΌΠΈ ΠΊΠΎΠΆΠ½Ρ ΠΌΠ΅ΡΡΠΈΠΊΡ ΡΠΎΠ·Π΄ΡΠ»ΠΈΠΌΠΎ Π½Π° ΡΡΠΈΠ²Π°Π»ΡΡΡΡ, ΠΌΠΈ ΠΌΠ°ΡΠΈΠΌΠ΅ΠΌΠΎ ΠΊΡΠ»ΡΠΊΡΡΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊΡΠ² Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ.
ΠΠ°Π»Ρ total_time per second β ΠΌΠΎΡ ΡΠ»ΡΠ±Π»Π΅Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°. ΠΠΎΠ½Π° Π²ΠΈΠΌΡΡΡΡΡΡΡΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ , Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΠΎΠ±ΡΠΎ ΡΠΊΡΠ»ΡΠΊΠΈ ΡΠ΅ΠΊΡΠ½Π΄ Π·Π½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ Π½Π°ΡΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠΈ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ ΡΡΡΡ Π³ΡΡΠΏΠΈ Π·Π°ΠΏΠΈΡΡΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π―ΠΊΡΠΎ Π²ΠΈ Π±Π°ΡΠΈΡΠ΅ ΡΠ°ΠΌ Π±ΡΠ»ΡΡΠ΅ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Ρ, ΡΠΎ Π±ΡΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΄ΡΠ° Π²Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π±ΡΠ»ΠΎ Π΄Π°ΡΠΈ. Π¦Π΅ Π΄ΡΠΆΠ΅ Π³Π°ΡΠ½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΎ ΡΡΠΎΠΌΡ ΡΠΎΠ²Π°ΡΠΈΡΠ΅Π²Ρ, Π½Π°ΠΏΡΠΈΠΊΠ»Π°Π΄, ΠΏΠΎΡΡΡΠ±Π½ΠΎ ΡΠΎΠ½Π°ΠΉΠΌΠ΅Π½ΡΠ΅ ΡΡΠΈ ΡΠ΄ΡΠ°.
ΠΡΠ΅ Π½Π°ΡΠ΅ Π½ΠΎΡ-Ρ Π°Ρ, Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½ΡΠ΄Π΅ Π½Π΅ Π±Π°ΡΠΈΠ². ΠΠ²Π΅ΡΠ½ΡΡΡ ΡΠ²Π°Π³Ρ - ΡΠ΅ Π΄ΡΠΆΠ΅ ΠΏΡΠΎΡΡΠ° ΡΡΡ - ΡΠ΅ΠΊΡΠ½Π΄Π° Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠ½ΠΎΠ΄Ρ, ΠΊΠΎΠ»ΠΈ Ρ Π²Π°Ρ CPU 100%, ΡΠΎ ΠΏΡΠ²Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΠΎΠ±ΡΠΎ Π²ΠΈ ΠΏΡΠ²Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π·Π°ΠΉΠΌΠ°Π»ΠΈΡΡ Π»ΠΈΡΠ΅ ΡΠΈΠΌ Π·Π°ΠΏΠΈΡΠΎΠΌ.
ΠΠ°Π»Ρ ΠΌΠΈ Π±Π°ΡΠΈΠΌΠΎ rows Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠΈ Π·Π½Π°ΡΠΌΠΎ, ΡΠΊΡΠ»ΡΠΊΠΈ ΡΡΠ΄ΠΊΡΠ² Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΠΎΠ²Π΅ΡΠ½ΡΠ»Π°.
Π Π΄Π°Π»Ρ ΡΠ°ΠΊΠΎΠΆ ΡΡΠΊΠ°Π²Π° ΡΡΡ. Π‘ΠΊΡΠ»ΡΠΊΠΈ ΠΌΠΈ shared_buffers Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ Π· ΡΠ°ΠΌΠΎΠ³ΠΎ shared_buffers. Π₯ΡΡΠΈ Π²ΠΆΠ΅ Π±ΡΠ»ΠΈ ΡΠ°ΠΌ, Π° ΡΡΠ΄ΠΈ ΠΌΠΈ Π²Π·ΡΠ»ΠΈ Π· ΠΊΠ΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΡΠΉΠ½ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠΈ Π°Π±ΠΎ Π· Π΄ΠΈΡΠΊΠ°. ΠΠ΅ΡΡΠΈΠΉ Π²Π°ΡΡΠ°Π½Ρ ΡΠ²ΠΈΠ΄ΠΊΠΈΠΉ, Π° Π΄ΡΡΠ³ΠΈΠΉ, ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ, ΡΠ²ΠΈΠ΄ΠΊΠΈΠΌ, Π° ΠΌΠΎΠΆΠ΅ ΠΉ Π½Ρ, Π²ΡΠ΄ ΡΠΈΡΡΠ°ΡΡΡ Π·Π°Π»Π΅ΠΆΠΈΡΡ.
Π Π΄ΡΡΠ³ΠΈΠΉ ΡΠΏΠΎΡΡΠ± Π΄ΠΈΡΠ΅ΡΠ΅Π½ΡΡΡΠ²Π°Π½Π½Ρ β ΠΌΠΈ Π΄ΡΠ»ΠΈΠΌΠΎ ΠΊΡΠ»ΡΠΊΡΡΡΡ Π·Π°ΠΏΠΈΡΡΠ² Ρ ΡΡΠΉ Π³ΡΡΠΏΡ. Π£ Π΄ΡΡΠ³ΡΠΉ ΠΊΠΎΠ»ΠΎΠ½ΡΡ Π·Π°Π²ΠΆΠ΄ΠΈ Π±ΡΠ΄Π΅ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΠΈΡ ΡΠΎΠ·Π΄ΡΠ»ΠΈΡΠΈ Π½Π° Π·Π°ΠΏΠΈΡ. Π Π΄Π°Π»Ρ ΡΡΠΊΠ°Π²ΠΎ β ΡΠΊΡΠ»ΡΠΊΠΈ ΠΌΡΠ»ΡΡΠ΅ΠΊΡΠ½Π΄ Π±ΡΠ»ΠΎ Ρ ΡΡΠΎΠΌΡ Π·Π°ΠΏΠΈΡΡ. ΠΠΈ Π·Π½Π°ΡΠΌΠΎ, ΡΠΊ Ρ ΡΠ΅ΡΠ΅Π΄Π½ΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡ. 101 ΠΌΡΠ»ΡΡΠ΅ΠΊΡΠ½Π΄Π° ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π½Π° ΠΊΠΎΠΆΠ΅Π½ Π·Π°ΠΏΠΈΡ. Π¦Π΅ ΡΡΠ°Π΄ΠΈΡΡΠΉΠ½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°, ΡΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½Π° Π΄Π»Ρ ΡΠΎΠ·ΡΠΌΡΠ½Π½Ρ.
Π‘ΠΊΡΠ»ΡΠΊΠΈ ΡΡΠ΄ΠΊΡΠ² ΠΊΠΎΠΆΠ΅Π½ Π·Π°ΠΏΠΈΡ ΠΏΠΎΠ²Π΅ΡΠ½ΡΠ² Ρ ΡΠ΅ΡΠ΅Π΄Π½ΡΠΎΠΌΡ. ΠΠΈ Π±Π°ΡΠΈΠΌΠΎ 8 ΡΡ Π³ΡΡΠΏΠ° ΠΏΠΎΠ²Π΅ΡΡΠ°Ρ. Π‘ΠΊΡΠ»ΡΠΊΠΈ Π² ΡΠ΅ΡΠ΅Π΄Π½ΡΠΎΠΌΡ Π· ΠΊΠ΅ΡΡ Π²Π·ΡΠ»ΠΎΡΡ ΡΠ° ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΎΡΡ. ΠΠΈ Π±Π°ΡΠΈΠΌΠΎ, ΡΠΎ Π²ΡΠ΅ Π·Π°ΠΊΠ΅ΡΠΎΠ²Π°Π½ΠΎ ΠΊΠ»Π°ΡΠ½ΠΎ. Π‘ΡΡΡΠ»ΡΠ½Ρ Ρ ΡΡΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΡΠΎΡ Π³ΡΡΠΏΠΈ.
Π ΡΠ΅ΡΠ²Π΅ΡΡΠΈΠΉ ΠΏΡΠ΄ΡΡΠ΄ΠΎΠΊ Ρ ΠΊΠΎΠΆΠ½ΠΎΠΌΡ ΡΡΠ΄ΠΊΡ β ΡΠ΅ ΡΠΊΡΠ»ΡΠΊΠΈ Π²ΡΠ΄ΡΠΎΡΠΊΡΠ² Π²ΡΠ΄ Π·Π°Π³Π°Π»ΡΠ½ΠΎΡ ΠΊΡΠ»ΡΠΊΠΎΡΡΡ. Π£ Π½Π°Ρ Ρ calls. ΠΡΠΈΠΏΡΡΡΠΈΠΌΠΎ, 1 000 000. Π ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΊΠΈΠΉ Π²Π½Π΅ΡΠΎΠΊ ΡΡ Π³ΡΡΠΏΠ° ΡΠΎΠ±ΠΈΡΡ. ΠΠΈ Π±Π°ΡΠΈΠΌΠΎ, ΡΠΎ Π² ΡΡΠΎΠΌΡ Π²ΠΈΠΏΠ°Π΄ΠΊΡ ΠΏΠ΅ΡΡΠ° Π³ΡΡΠΏΠ° ΡΠΎΠ±ΠΈΡΡ Π²Π½Π΅ΡΠΎΠΊ ΠΌΠ΅Π½ΡΠ΅, Π½ΡΠΆ 0,01 %. Π’. Π΅. Π²ΠΎΠ½Π° ΡΠ°ΠΊΠ° ΠΏΠΎΠ²ΡΠ»ΡΠ½Π°, ΡΠΎ ΠΌΠΈ ΡΡ Π½Π΅ Π±Π°ΡΠΈΠΌΠΎ Π² Π·Π°Π³Π°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΡΠΈΠ½Ρ. Π Π΄ΡΡΠ³Π° Π³ΡΡΠΏΠ° β 5% Π½Π° Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ. Π’. Π΅. 5% Π· ΡΡΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊΡΠ² - ΡΠ΅ Π΄ΡΡΠ³Π° Π³ΡΡΠΏΠ°.
ΠΠ° total_time ΡΠ΅ΠΆ ΡΡΠΊΠ°Π²ΠΎ. ΠΠ° ΠΏΠ΅ΡΡΡ Π³ΡΡΠΏΡ Π·Π°ΠΏΠΈΡΡΠ² ΠΌΠΈ Π²ΠΈΡΡΠ°ΡΠΈΠ»ΠΈ 14% Π²ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΡ ΡΠΎΠ±ΠΎΡΠΈ. ΠΠ° Π΄ΡΡΠ³Ρ β 11 % ΡΠΎΡΠΎ.
Π― Π² Π΄Π΅ΡΠ°Π»Ρ Π½Π΅ ΠΏΠΎΠ³Π»ΠΈΠ±Π»ΡΠ²Π°ΡΠΈΠΌΡΡΡ, Π°Π»Π΅ ΡΠ°ΠΌ Ρ ΡΠΎΠ½ΠΊΠΎΡΡ. ΠΠΈ Π·Π²Π΅ΡΡ Ρ Π²ΠΈΠ²ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΊΡ, ΡΠΎΠΌΡ ΡΠΎ ΠΊΠΎΠ»ΠΈ ΠΌΠΈ ΠΏΠΎΡΡΠ²Π½ΡΡΠΌΠΎ, ΡΠ½Π°ΠΏΡΠΎΡΠΈ ΠΌΠΎΠΆΡΡΡ ΠΏΠΎΠΏΠ»ΠΈΠ²ΡΠΈ, ΡΠΎΠ±ΡΠΎ ΡΠΊΡΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΌΠΎΠΆΡΡΡ Π²ΠΈΠΏΠ°ΡΡΠΈ Ρ Π² Π΄ΡΡΠ³ΠΎΠΌΡ Π²ΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΡΡΡ Π½Π΅ Π±ΡΡΠΈ ΠΏΡΠΈΡΡΡΠ½ΡΠΌΠΈ, Π° ΡΠΊΡΡΡ ΠΌΠΎΠΆΡΡΡ Π½ΠΎΠ²Ρ Π·'ΡΠ²ΠΈΡΠΈΡΡ. Π ΠΌΠΈ ΡΠ°ΠΌ Π²ΠΈΡΠ°Ρ ΠΎΠ²ΡΡΠΌΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΊΡ. Π―ΠΊΡΠΎ Π²ΠΈ Π±Π°ΡΠΈΡΠ΅ 0, ΡΠ΅ Π΄ΠΎΠ±ΡΠ΅. Π¦Π΅ ΠΏΠΎΠΌΠΈΠ»ΠΎΠΊ Π½Π΅ΠΌΠ°. Π―ΠΊΡΠΎ ΠΏΠΎΠΊΠ°Π·Π½ΠΈΠΊ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ Π΄ΠΎ 20%, ΡΠ΅ ΠΠ.
ΠΠ°Π»Ρ ΠΌΠΈ ΠΏΠΎΠ²Π΅ΡΡΠ°ΡΠΌΠΎΡΡ Π΄ΠΎ Π½Π°ΡΠΎΡ ΡΠ΅ΠΌΠΈ. ΠΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ Π·Π°ΠΊΡΠ°ΡΡΠΈ workload. ΠΠΈ Π±Π΅ΡΠ΅ΠΌΠΎ Π·Π²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·, ΠΏΠΎΠΊΠΈ Π½Π΅ Π½Π°Π±Π΅ΡΠ΅ΠΌΠΎ 80% Π°Π±ΠΎ 90%. ΠΠ°Π·Π²ΠΈΡΠ°ΠΉ ΡΠ΅ 10-20 Π³ΡΡΠΏ. Π ΡΠΎΠ±ΠΈΠΌΠΎ ΡΠ°ΠΉΠ»ΠΈ Π΄Π»Ρ pgbench. Π’Π°ΠΌ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΠΌΠΎ random. ΠΠ½ΠΎΠ΄Ρ ΡΠ΅, Π½Π° ΠΆΠ°Π»Ρ, Π½Π΅ Π²ΠΈΡ ΠΎΠ΄ΠΈΡΡ. Π Π² Postgres 12 Π±ΡΠ΄Π΅ Π±ΡΠ»ΡΡΠ΅ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎΡΡΠ΅ΠΉ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ ΡΠ°ΠΊΠΈΠΉ ΠΏΡΠ΄Ρ ΡΠ΄.
Π Π΄Π°Π»Ρ ΠΌΠΈ ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ Π½Π°Π±ΠΈΡΠ°ΡΠΌΠΎ 80-90% Π·Π° total_time. Π©ΠΎ Π΄Π°Π»Ρ ΠΏΡΠ΄ΡΡΠ°Π²Π»ΡΡΠΈ ΠΏΡΡΠ»Ρ "@"? ΠΠΈ Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ Π½Π° calls, Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΊΡΠ»ΡΠΊΠΈ Π²ΡΠ΄ΡΠΎΡΠΊΡΠ² Ρ ΡΠΎΠ·ΡΠΌΡΡΠΌΠΎ, ΡΠΎ ΠΌΠΈ ΠΎΡΡ ΡΡΡ ΠΌΠ°ΡΠΌΠΎ ΡΡΡΠ»ΡΠΊΠΈ Π²ΡΠ΄ΡΠΎΡΠΊΡΠ². Π ΡΠΈΡ Π²ΡΠ΄ΡΠΎΡΠΊΡΠ² ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΊ Π±Π°Π»Π°Π½ΡΡΠ²Π°ΡΠΈ ΠΊΠΎΠΆΠ΅Π½ ΡΠ· ΡΠ°ΠΉΠ»ΠΈΠΊΡΠ². ΠΡΡΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΠΌΠΎ pgbench ΡΠ° ΠΏΠΎΡΡ Π°Π»ΠΈ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ.
Π ΡΠ΅ Ρ Π½Π°Ρ Π001 ΡΠ° Π002.
Π001 β ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²Π΅Π»ΠΈΠΊΠΈΠΉ ΡΡΠ΄ΠΎΠΊ ΡΠ· ΡΠΎΡΠΈΡΠΌΠ° ΠΏΡΠ΄ΡΡΠ΄ΠΊΠ°ΠΌΠΈ. Π¦Π΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π²ΡΡΠΎΠ³ΠΎ Π½Π°ΡΠΎΠ³ΠΎ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ. ΠΠΈΠ²ΡΡΡΡΡ Π΄ΡΡΠ³Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ Ρ Π΄ΡΡΠ³Π΅ ΠΏΡΠ΄ΡΡΠ΄ΠΆΠ΅Π½Π½Ρ. ΠΠΈ Π±Π°ΡΠΈΠΌΠΎ, ΡΠΎ ΠΏΡΠ²ΡΠΎΡΠΈ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·Π½ΠΎ, ΡΠΎΠ±ΡΠΎ ΡΠΊΡΠΎ Π±ΡΠ΄Π΅ Π΄Π²Π° ΡΠ΄ΡΠ°, ΡΠΎ Π±ΡΠ΄Π΅ Π΄ΠΎΠ±ΡΠ΅. ΠΡΠ΄Π΅ ΠΏΡΠΈΠ±Π»ΠΈΠ·Π½ΠΎ 75% Π·Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ. Π ΡΠ΅ ΡΠ°ΠΊ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈΠΌΠ΅. Π―ΠΊΡΠΎ ΠΌΠΈ ΠΌΠ°ΡΠΈΠΌΠ΅ΠΌΠΎ 10 ΡΠ΄Π΅Ρ, ΡΠΎ ΠΌΠΈ Π²Π·Π°Π³Π°Π»Ρ Π±ΡΠ΄Π΅ΠΌΠΎ ΡΠΏΠΎΠΊΡΠΉΠ½Ρ. Π’Π°ΠΊ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΎΡΡΠ½ΡΠ²Π°ΡΠΈ ΡΠ΅ΡΡΡΡΠΈ.
Π002 β ΡΠ΅ Π½Π°Π·ΠΈΠ²Π°Ρ ΠΊΠ»Π°ΡΠΈ Π·Π°ΠΏΠΈΡΡΠ², Ρ. Π΅. SELECT, INSERT, UPDATE, DELETE. Π ΠΎΠΊΡΠ΅ΠΌΠΎ SELECT FOR UPDATE, Π±ΠΎ Π²ΡΠ½ Π»ΠΎΡΠΈΡΡ.
Π ΡΡΡ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π·ΡΠΎΠ±ΠΈΡΠΈ Π²ΠΈΡΠ½ΠΎΠ²ΠΎΠΊ, ΡΠΎ SELECT Π·Π²ΠΈΡΠ°ΠΉΠ½Ρ ΡΠΈΡΠ°ΡΡ - 82% Π²ΡΠ΄ ΡΡΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊΡΠ², Π°Π»Π΅ ΠΏΡΠΈ ΡΡΠΎΠΌΡ - 74% total_time. Π’. Π΅. Π²ΠΎΠ½ΠΈ Π±Π°Π³Π°ΡΠΎ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡΡΡΡΡ, Π°Π»Π΅ ΠΌΠ΅Π½ΡΠ΅ ΡΠΏΠΎΠΆΠΈΠ²Π°ΡΡΡ ΡΠ΅ΡΡΡΡ.
Π ΠΏΠΎΠ²Π΅ΡΡΠ°ΡΠΌΠΎΡΡ Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Π½Ρ: "Π―ΠΊ Π½Π°ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΄ΡΠ±ΡΠ°ΡΠΈ shared_buffers?". Π― ΡΠΏΠΎΡΡΠ΅ΡΡΠ³Π°Ρ, ΡΠΎ Π±ΡΠ»ΡΡΡΡΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΡΠ² Π±ΡΠ΄ΡΡΡΡΡΡ Π½Π° ΡΠ΄Π΅Ρ - Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΊΠΎΡ Π±ΡΠ΄Π΅ ΡΠ΅ΡΠ΅Π· putput, ΡΠΎΠ±ΡΠΎ ΡΠΊΠΎΡ Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° Π·Π΄Π°ΡΠ½ΡΡΡΡ. ΠΠΎΠ½Π° Π² TPS Π·Π°Π·Π²ΠΈΡΠ°ΠΉ Π²ΠΈΠΌΡΡΡΡΡΡΡΡ Π°Π±ΠΎ QPS.
Π ΠΌΠΈ Π½Π°ΠΌΠ°Π³Π°ΡΠΌΠΎΡΡ Π²ΠΈΡΠ°Π²ΠΈΡΠΈ Π²ΡΠ΄ ΡΠ°ΡΠΊΠΈ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ² Π²ΡΠ΄ ΡΡΠ½ΡΠ½Π³Ρ ΡΠΊΠ½Π°ΠΉΠ±ΡΠ»ΡΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΡΠΉ Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π’ΡΡ ΡΡΠ»ΡΠΊΠΈ 311 Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ Π΄Π»Ρ select.
ΠΠ»Π΅ Π½ΡΡ ΡΠΎ Π½Π΅ ΡΠ·Π΄ΠΈΡΡ Π½Π° ΡΠΎΠ±ΠΎΡΡ ΡΠ° Π½Π°Π·Π°Π΄ Π΄ΠΎΠ΄ΠΎΠΌΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Ρ Π½Π° ΠΏΠΎΠ²Π½ΡΠΉ ΡΠ²ΠΈΠ΄ΠΊΠΎΡΡΡ. Π¦Π΅ Π±Π΅Π·Π³Π»ΡΠ·Π΄ΠΎ. Π’Π°ΠΊ ΡΠ°ΠΌΠΎ Ρ Π· Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½ΠΈΡ . ΠΠΈ Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ ΡΠ·Π΄ΠΈΡΠΈ Π½Π° ΠΏΠΎΠ²Π½ΡΠΉ ΡΠ²ΠΈΠ΄ΠΊΠΎΡΡΡ, ΡΠ° Π½ΡΡ ΡΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠΎΠ±ΠΈΡΡ. ΠΡΡ ΡΠΎ Π½Π΅ ΠΆΠΈΠ²Π΅ Ρ production, Ρ ΡΠΊΠΎΠ³ΠΎ 100% CPU. Π₯ΠΎΡΠ°, ΠΌΠΎΠΆΠ΅, Ρ ΡΠΎΡΡ Ρ ΠΆΠΈΠ²Π΅, Π°Π»Π΅ ΡΠ΅ Π½Π΅Π΄ΠΎΠ±ΡΠ΅.
ΠΠ΄Π΅Ρ ΡΠ°ΠΊΠ°, ΡΠΎ ΠΌΠΈ ΡΠ·Π΄ΠΈΠΌΠΎ Π·Π°Π·Π²ΠΈΡΠ°ΠΉ Π²ΡΠ΄ΡΠΎΡΠΊΠ°Ρ Π½Π° 20% Π²ΡΠ΄ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎΡΡΡ, Π±Π°ΠΆΠ°Π½ΠΎ Π½Π΅ Π²ΠΈΡΠ΅ 50%. Π ΠΌΠΈ Π½Π°ΠΌΠ°Π³Π°ΡΠΌΠΎΡΡ ΡΠ°Ρ Π²ΡΠ΄Π³ΡΠΊΡ ΠΎΠΏΡΠΈΠΌΡΠ·ΡΠ²Π°ΡΠΈ Π΄Π»Ρ Π½Π°ΡΠΈΡ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΡΠ² ΠΏΠ΅ΡΡ Π·Π° Π²ΡΠ΅. Π’. Π΅. ΠΌΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ Π½Π°ΡΡ ΡΡΡΠΊΠΈ ΠΊΡΡΡΠΈΡΠΈ ΡΠ°ΠΊ, ΡΠΎΠ± Π±ΡΠ»ΠΎ ΠΌΡΠ½ΡΠΌΠ°Π»ΡΠ½Π΅ latency ΠΏΡΠΈ 20% ΡΠ²ΠΈΠ΄ΠΊΠΎΡΡΡ, ΡΠΌΠΎΠ²Π½ΠΎ. Π¦Π΅ ΡΠ°ΠΊΠ° ΡΠ΄Π΅Ρ, ΡΠΊΡ ΠΌΠΈ ΡΠ°ΠΊΠΎΠΆ Π½Π°ΠΌΠ°Π³Π°ΡΠΌΠΎΡΡ Π²ΠΈΠΊΠΎΡΠΈΡΡΠ°ΡΠΈ Ρ Π½Π°ΡΠΈΡ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Ρ .
Π Π½Π° Π·Π°Π²Π΅ΡΡΠ΅Π½Π½Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΡΡ:
- ΠΠ±ΠΎΠ²'ΡΠ·ΠΊΠΎΠ²ΠΎ Π·ΡΠΎΠ±ΡΡΡ Database Lab.
- ΠΠΎ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎΡΡΡ Π·ΡΠΎΠ±ΡΡΡ on demand, ΡΠΎΠ± ΡΠΎΠ·Π³ΠΎΡΡΠ°Π»ΠΎΡΡ Π½Π° ΡΠΊΠΈΠΉΡΡ ΡΠ°Ρ β ΠΏΠΎΠ³ΡΠ°Π»ΠΈ ΡΠ° Π²ΠΈΠΊΠΈΠ½ΡΠ»ΠΈ. Π―ΠΊΡΠΎ Ρ Π²Π°Ρ Ρ ΠΌΠ°ΡΠΈ, ΡΠΎ ΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠΎΠ±ΠΎΡ, ΡΠΎΠ±ΡΠΎ ΠΌΠ°ΠΉΡΠ΅ Π±Π°Π³Π°ΡΠΎ standing.
- ΠΡΠ΄ΡΡΠ΅ Π΄ΠΎΠΏΠΈΡΠ»ΠΈΠ²ΠΈΠΌΠΈ. Π ΡΠΊΡΠΎ ΡΠΎΡΡ Π½Π΅ ΡΠ°ΠΊ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΠΉΡΠ΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΡΠΊ Π²ΠΎΠ½ΠΎ ΠΏΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ. Nancy ΠΌΠΎΠΆΠ½Π° Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ Π΄Π»Ρ Π½Π°Π²ΡΠ°Π½Π½Ρ ΡΠ΅Π±Π΅, ΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡΠΈ, ΡΠΊ ΠΏΡΠ°ΡΡΡ Π±Π°Π·Π°.
- Π ΠΏΡΠΈΡΡΠ»ΡΠΉΡΠ΅ΡΡ Π½Π° ΠΌΡΠ½ΡΠΌΠ°Π»ΡΠ½ΠΈΠΉ ΡΠ°Ρ Π²ΡΠ΄Π³ΡΠΊΡ.
- Π Π½Π΅ Π±ΡΠΉΡΠ΅ΡΡ Π²ΠΈΡ ΡΠ΄Π½ΠΈΠΊΡΠ² Postgres. ΠΠΎΠ»ΠΈ Π²ΠΈ ΠΏΡΠ°ΡΡΡΡΠ΅ Π· Π²ΠΈΡ ΡΠ΄Π½ΠΈΠΌΠΈ Π΄ΠΆΠ΅ΡΠ΅Π»Π°ΠΌΠΈ, Π²ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ Π·Π½Π°ΡΠΈ Π°Π½Π³Π»ΡΠΉΡΡΠΊΡ. Π’Π°ΠΌ Π΄ΡΠΆΠ΅ Π±Π°Π³Π°ΡΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΡΠ², ΡΠ°ΠΌ ΡΡΠ΅ ΠΏΠΎΡΡΠ½Π΅Π½ΠΎ.
- Π ΠΏΠ΅ΡΠ΅Π²ΡΡΡΠΉΡΠ΅ Π·Π΄ΠΎΡΠΎΠ²'Ρ Π±Π°Π·ΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ, Ρ ΠΎΡΠ° Π± ΡΠ°Π· Π½Π° ΡΡΠΈ ΠΌΡΡΡΡΡ ΡΡΠΊΠ°ΠΌΠΈ Π°Π±ΠΎ Postgres-checkup.
ΠΠΈΡΠ°Π½Π½Ρ
ΠΠ΅Π»ΠΈΠΊΠ΅ ΡΠΏΠ°ΡΠΈΠ±Ρ! ΠΡΠΆΠ΅ ΡΡΠΊΠ°Π²Π° ΡΡΡ.
ΠΠ²Ρ ΡΡΡΠΊΠΈ.
Π’Π°ΠΊ, Π΄Π²Ρ ΡΡΡΠΊΠΈ. Π’ΡΠ»ΡΠΊΠΈ Ρ Π½Π΅ Π·ΠΎΠ²ΡΡΠΌ Π·ΡΠΎΠ·ΡΠΌΡΠ². ΠΠΎΠ»ΠΈ ΠΌΠΈ ΠΏΡΠ°ΡΡΡΠΌΠΎ Π· Nancy, ΠΌΠΈ ΡΡΠ»ΡΠΊΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ΄ΠΊΡΡΡΡΠ²Π°ΡΠΈ Π°Π±ΠΎ ΡΡΠ»Ρ Π³ΡΡΠΏΡ?
Π£ Π½Π°Ρ Ρ Π΄Π΅Π»ΡΡΠ°-ΠΊΠΎΠ½ΡΡΠ³ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠ΄ΠΈ ΡΠΊΡΠ»ΡΠΊΠΈ Π·Π°Π²Π³ΠΎΠ΄Π½ΠΎ ΠΎΠ΄ΡΠ°Π·Ρ ΠΊΡΡΡΠ½ΡΡΠΈ. ΠΠ»Π΅ ΡΡΠ΅Π±Π° ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΠΊΠΎΠ»ΠΈ Π²ΠΈ Π·ΠΌΡΠ½ΡΡΡΠ΅ Π±Π°Π³Π°ΡΠΎ Π²ΡΡΠΎΠ³ΠΎ, Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·ΡΠΎΠ±ΠΈΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Ρ Π²ΠΈΡΠ½ΠΎΠ²ΠΊΠΈ.
Π’Π°ΠΊ. Π§ΠΎΠΌΡ Ρ ΡΠΏΠΈΡΠ°Π²? Π’ΠΎΠΌΡ ΡΠΎ ΡΠΊΠ»Π°Π΄Π½ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠ»ΠΈ ΡΠΈ ΠΌΠ°ΡΡ Π»ΠΈΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π’ΠΈ ΠΉΠΎΠ³ΠΎ ΠΏΡΠ΄ΠΊΡΡΡΡΡΡ, ΠΏΠΎΠ΄ΠΈΠ²ΠΈΠ²ΡΡ, ΡΠΊ ΠΏΡΠ°ΡΡΡ. ΠΠΈΡΡΠ°Π²ΠΈΠ² ΠΉΠΎΠ³ΠΎ. ΠΠΎΡΡΠΌ Π½Π°ΡΡΡΠΏΠ½ΠΈΠΉ ΠΏΠΎΡΠΈΠ½Π°ΡΡ.
ΠΠΎΠΆΠ½Π° ΠΎΠ΄Π½ΠΎΡΠ°ΡΠ½ΠΎ ΠΏΡΠ΄ΠΊΡΡΡΡΠ²Π°ΡΠΈ, Π°Π»Π΅ Π·Π°Π»Π΅ΠΆΠΈΡΡ Π²ΡΠ΄ ΡΠΈΡΡΠ°ΡΡΡ, Π·Π²ΡΡΠ½ΠΎ. ΠΠ»Π΅ ΠΊΡΠ°ΡΠ΅ ΠΎΠ΄Π½Ρ ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡΠΈ. Π£ Π½Π°Ρ ΡΡΠΎΡΠ° Π²ΠΈΠ½ΠΈΠΊΠ»Π° ΡΠ΄Π΅Ρ. ΠΠΈ ΠΌΠ°Π»ΠΈ Π΄ΡΠΆΠ΅ Π±Π»ΠΈΠ·ΡΠΊΡ ΡΠΈΡΡΠ°ΡΡΡ. ΠΡΠ»ΠΎ Π΄Π²Π° ΠΊΠΎΠ½ΡΡΠ³ΠΈ. Π ΠΌΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ ΡΠΎΠΌΡ Π²Π΅Π»ΠΈΠΊΠ° ΡΡΠ·Π½ΠΈΡΡ. Π Π²ΠΈΠ½ΠΈΠΊΠ»Π° ΡΠ΄Π΅Ρ, ΡΠΎ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ Π΄ΠΈΡ ΠΎΡΠΎΠΌΡΡ, ΡΠΎΠ± ΠΏΠΎΡΠ»ΡΠ΄ΠΎΠ²Π½ΠΎ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ ΡΠ° Π·Π½Π°ΠΉΡΠΈ Ρ ΡΠΎΠΌΡΡΡ Π²ΡΠ΄ΠΌΡΠ½Π½ΡΡΡΡ. ΠΠΎΠΆΠ½Π° Π²ΡΠ΄ΡΠ°Π·Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ² Π·ΡΠΎΠ±ΠΈΡΠΈ ΠΎΠ΄Π½Π°ΠΊΠΎΠ²ΠΈΠΌΠΈ, ΠΏΠΎΡΡΠΌ ΡΠ²Π΅ΡΡΡ ΡΠΎΡΠΎ. Π±ΡΠ΄. ΠΡΠ΅ Π³Π½ΡΡΠΊΠΎ.
Π ΡΠ΅ Ρ ΠΏΠΈΡΠ°Π½Π½Ρ. ΠΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠ»ΠΎΠ΄ΠΈΠΉ, ΡΠΎ ΡΠΎΠ·Π²ΠΈΠ²Π°ΡΡΡΡΡ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΡΡ Π²ΠΆΠ΅ Π³ΠΎΡΠΎΠ²Π°, ΡΠΈ Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π½ΠΈΠΉ ΠΎΠΏΠΈΡ?
Π― ΡΠ°ΠΌ ΡΠΏΠ΅ΡΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠΈΠ»Π°Π½Π½Ρ Π·ΡΠΎΠ±ΠΈΠ² ΠΎΠΏΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ². Π¦Π΅ Ρ. ΠΠ»Π΅ Π±Π°Π³Π°ΡΠΎ ΡΠΎΠ³ΠΎ Π½Π΅ΠΌΠ°Ρ ΠΏΠΎΠΊΠΈ ΡΠΎ. Π― ΡΡΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ΄ΡΠΌΡΡΠ². Π Ρ ΡΡ Π·Π½Π°Ρ ΠΎΠ΄ΠΆΡ, ΠΊΠΎΠ»ΠΈ Π²ΠΈΡΡΡΠΏΠ°Ρ. Π¦Π΅ Π΄ΡΠΆΠ΅ ΠΊΡΡΡΠΎ. Π₯ΡΠΎΡΡ ΡΠΆΠ΅ Π·Ρ ΠΌΠ½ΠΎΡ ΠΏΡΠ°ΡΡΡ, Ρ ΡΠΎΡΡ Π΄ΠΎΠΏΠΎΠΌΡΠ³ ΡΠ° ΡΠΎΡΡ ΡΠ°ΠΌ Π·ΡΠΎΠ±ΠΈΠ². Π ΡΠΊΡΠΎ Π²Π°ΠΌ ΡΡΠΊΠ°Π²Π° ΡΡ ΡΠ΅ΠΌΠ°, Π΄Π°ΠΉΡΠ΅ Π·Π²ΠΎΡΠΎΡΠ½ΠΈΠΉ Π·Π²'ΡΠ·ΠΎΠΊ β ΡΠΎΠ³ΠΎ Π½Π΅ Π²ΠΈΡΡΠ°ΡΠ°Ρ.
Π―ΠΊ Π·ΡΠΎΠ±ΠΈΠΌΠΎ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΡΡ, ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ, Π±ΡΠ΄Π΅ Π·Π²ΠΎΡΠΎΡΠ½ΠΈΠΉ Π·Π²'ΡΠ·ΠΎΠΊ. ΠΠΎΠ΄ΠΈΠ²ΠΈΠΌΠΎΡΡ. ΠΡΠΊΡΡ!
ΠΡΡΠ°Ρ! ΠΡΠΊΡΡ Π·Π° Π΄ΠΎΠΏΠΎΠ²ΡΠ΄Ρ! Π― ΠΏΠΎΠ±Π°ΡΠΈΠ², ΡΠΎ Ρ ΠΏΡΠ΄ΡΡΠΈΠΌΠΊΠ° ΠΠΌΠ°Π·ΠΎΠ½. Π§ΠΈ ΠΏΠ»Π°Π½ΡΡΡΡΡΡ ΠΏΡΠ΄ΡΡΠΈΠΌΠΊΠ° GSP?
ΠΠ°ΡΠ½Π΅ ΠΏΠΈΡΠ°Π½Π½Ρ. ΠΠΎΡΠ°Π»ΠΈ ΡΠΎΠ±ΠΈΡΠΈ. Π ΠΏΠΎΠΊΠΈ ΡΠΎ Π·Π°ΠΌΠΎΡΠΎΠ·ΠΈΠ»ΠΈ, Π±ΠΎ ΠΌΠΈ Ρ ΠΎΡΠ΅ΠΌΠΎ Π΅ΠΊΠΎΠ½ΠΎΠΌΠΈΡΠΈ. Π’. Π΅. Ρ ΠΏΡΠ΄ΡΡΠΈΠΌΠΊΠ° Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ run on localhost. ΠΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΡ ΡΡΠ²ΠΎΡΠΈΡΠΈ instance Ρ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ. ΠΠΎ ΡΠ΅ΡΡ, ΠΌΠΈ ΡΠ°ΠΊ ΡΠΎΠ±ΠΈΠΌΠΎ. Π£ Getlab Ρ ΡΠ°ΠΊ ΡΠΎΠ±Π»Ρ, ΡΠ°ΠΌ Π½Π° GSP. ΠΠ»Π΅ ΡΠΎΠ±ΠΈΡΠΈ ΡΠ°ΠΌΠ΅ ΡΠ°ΠΊΡ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΡΡ ΠΌΠΈ ΠΏΠΎΠΊΠΈ ΡΠΎ Π½Π΅ Π±Π°ΡΠΈΠΌΠΎ ΡΠ΅Π½ΡΡ, ΡΠΎΠΌΡ ΡΠΎ Google Π½Π΅ ΠΌΠ°Ρ ΡΠΏΠΎΡΡΠ² Π΄Π΅ΡΠ΅Π²ΠΈΠΉ. Π’Π°ΠΌ Ρ ??? instances, Π°Π»Π΅ ΠΌΠ°ΡΡΡ ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Π½Ρ. ΠΠΎ-ΠΏΠ΅ΡΡΠ΅, Ρ Π½ΠΈΡ Π·Π°Π²ΠΆΠ΄ΠΈ Π»ΠΈΡΠ΅ Π·Π½ΠΈΠΆΠΊΠ° Π² 70% Ρ ΡΠ°ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ½Π° ΠΏΠΎΠ³ΡΠ°ΡΠΈΡΡ ΡΠ· ΡΡΠ½ΠΎΡ. Π‘ΠΏΠΎΡΠΈ ΠΌΠΈ Π·Π±ΡΠ»ΡΡΡΡΠΌΠΎ Π½Π° 5-10% ΡΡΠ½Ρ, ΡΠΎΠ± Π·Π½ΠΈΠ·ΠΈΡΠΈ ΠΉΠΌΠΎΠ²ΡΡΠ½ΡΡΡΡ, ΡΠΎ Π²Π°Ρ ΠΊΡΠ»ΡΠ½ΡΡΡ. Π’. Π΅. ΡΠΏΠΎΡΠΈ Π²ΠΈ Π·Π°ΠΎΡΠ°Π΄ΠΆΡΡΡΠ΅, Π°Π»Π΅ Ρ Π²Π°Ρ ΠΌΠΎΠΆΡΡΡ Ρ Π±ΡΠ΄Ρ-ΡΠΊΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Π±ΡΠ°ΡΠΈ. Π―ΠΊΡΠΎ Π²ΠΈ ΡΡΠΎΡ ΠΈ ΡΡΠ½Ρ Π²ΠΈΡΠ΅, Π½ΡΠΆ Π² ΡΠ½ΡΠΈΡ ΡΠΎΠ±ΠΈΡΠ΅, Π²ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΠ·Π½ΡΡΠ΅ Π²Π±ΠΈΡΡ. Google Π·ΠΎΠ²ΡΡΠΌ ΡΠ½ΡΠ° ΡΠΏΠ΅ΡΠΈΡΡΠΊΠ°. Π ΡΠ΅ Π΄ΡΠΆΠ΅ ΠΏΠΎΠ³Π°Π½Π΅ ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Π½Ρ Ρ β Π²ΠΎΠ½ΠΈ Π»ΠΈΡΠ΅ 24 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΆΠΈΠ²ΡΡΡ. Π ΡΠ½ΠΎΠ΄Ρ ΠΌΠΈ Ρ ΠΎΡΠ΅ΠΌΠΎ 5 Π΄Π½ΡΠ² Π³Π°Π½ΡΡΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ. ΠΠ»Π΅ ΡΠΏΠΎΡΠ°Ρ ΡΠ΅ ΡΠΎΠ±ΠΈΡΠΈ ΠΌΠΎΠΆΠ½Π°, ΡΠΏΠΎΡΠΈ ΡΠ½ΠΎΠ΄Ρ ΠΌΡΡΡΡΡΠΌΠΈ ΠΆΠΈΠ²ΡΡΡ.
ΠΡΡΠ°Ρ! ΠΡΠΊΡΡ Π·Π° Π΄ΠΎΠΏΠΎΠ²ΡΠ΄Ρ! ΠΠΈ Π·Π³Π°Π΄Π°Π»ΠΈ ΠΏΡΠΎ checkup. Π―ΠΊ Π²ΠΈ ΠΎΠ±ΡΠΈΡΠ»ΡΡΡΠ΅ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ stat_statements?
ΠΡΠΆΠ΅ Π΄ΠΎΠ±ΡΠ΅ ΠΏΠΈΡΠ°Π½Π½Ρ. Π― ΠΌΠΎΠΆΡ Π΄ΡΠΆΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΠΈ ΡΠ° ΡΠΎΠ·ΠΏΠΎΠ²ΡΡΡΠΈ. ΠΠΎΡΠΎΡΠΊΠΎ ΠΌΠΈ Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΊ ΠΏΠΎΠΏΠ»ΠΈΠ² Π½Π°Π±ΡΡ Π³ΡΡΠΏ Π·Π°ΠΏΠΈΡΡΠ²: ΡΠΊΡΠ»ΡΠΊΠΈ Π²ΡΠ΄Π²Π°Π»ΠΈΠ»ΠΎΡΡ Ρ ΡΠΊΡΠ»ΡΠΊΠΈ Π½ΠΎΠ²ΠΈΡ Π·'ΡΠ²ΠΈΠ»ΠΎΡΡ. Π Π΄Π°Π»Ρ ΠΌΠΈ Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ Π΄Π²Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈ: total_time ΡΠ° calls, ΡΠΎΠΌΡ ΡΠ°ΠΌ Π΄Π²Ρ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ. Π Π΄ΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΊΠΈΠΉ Π²Π½Π΅ΡΠΎΠΊ Ρ Π³ΡΡΠΏ, ΡΠΎ ΠΏΠΎΠΏΠ»ΠΈΠ²Π»ΠΈ. Π’Π°ΠΌ Π΄Π²Ρ ΠΏΡΠ΄Π³ΡΡΠΏΠΈ: ΡΠΎ Π²ΠΈΡΡ Π°Π»Π° ΡΠ° ΠΏΡΠΈΡΡ Π°Π»Π°. ΠΠΈΠ²ΠΈΠΌΠΎΡΡ, ΡΠΊΠΈΠΉ Π²ΠΎΠ½ΠΈ Π²Π½Π΅ΡΠΎΠΊ Ρ Π·Π°Π³Π°Π»ΡΠ½Ρ ΠΊΠ°ΡΡΠΈΠ½Ρ.
Π Π²ΠΈ Π½Π΅ Π±ΠΎΡΡΠ΅ΡΡ, ΡΠΎ Π²ΠΎΠ½Π° ΡΠ°ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠ½Π΅ΡΡΡΡ Π΄Π²ΡΡΡ-ΡΡΠΈΡΡ Π·Π° ΡΠ°Ρ ΠΌΡΠΆ ΡΠ½Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ?
Π’. Π΅. Π²ΠΎΠ½ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ Π·Π°ΡΠ΅ΡΡΡΡΡΠ²Π°Π»ΠΈΡΡ ΡΠΈ ΡΠΊ?
ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, ΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΠΆΠ΅ Π²ΠΈΡΡΡΠ½ΡΠ²ΡΡ, ΠΏΠΎΡΡΠΌ ΠΏΡΠΈΠΉΡΠΎΠ² Ρ Π·Π½ΠΎΠ²Ρ Π²ΠΈΡΡΡΠ½ΡΠ²ΡΡ, ΠΏΠΎΡΡΠΌ ΡΠ΅ ΡΠ°Π· ΠΏΡΠΈΠΉΡΠΎΠ² Ρ Π·Π½ΠΎΠ²Ρ Π²ΠΈΡΡΡΠ½ΡΠ²ΡΡ. Π Π²ΠΈ ΡΡΡ ΡΠΎΡΡ ΠΏΠΎΡΠ°Ρ ΡΠ²Π°Π»ΠΈ, Ρ Π΄Π΅ ΡΠ΅ Π²ΡΠ΅?
ΠΠ°ΡΠ½Π΅ ΠΏΠΈΡΠ°Π½Π½Ρ, ΡΡΠ΅Π±Π° Π΄ΠΈΠ²ΠΈΡΠΈΡΡ.
Π― ΠΏΠΎΠ΄ΡΠ±Π½Ρ ΡΡΡΠΊΡ ΡΠΎΠ±ΠΈΠ². ΠΡΠΎΡΡΡΡΠ΅, Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΎ, Ρ ΡΠΎΠ±ΠΈΠ² ΡΡ ΡΠ°ΠΌ. ΠΠ»Π΅ ΠΌΠ΅Π½Ρ Π΄ΠΎΠ²Π΅Π»ΠΎΡΡ ΡΠΊΠΈΠ΄Π°ΡΠΈ, Π·ΡΠΎΠ±ΠΈΡΠΈ reset stat_statements Ρ ΠΎΡΡΡΠ½ΡΡΠ²Π°ΡΠΈΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ½Π°ΠΏΡΠΎΡΠ°, ΡΠΎ ΡΠ°ΠΌ ΠΌΠ΅Π½ΡΠ΅ ΠΏΠ΅Π²Π½ΠΎΡ ΡΠ°ΡΡΠΊΠΈ, ΡΠΎ Π²ΡΠ΅ ΠΎΠ΄Π½ΠΎ Π½Π΅ Π΄ΡΠΉΡΠ»ΠΎ Π΄ΠΎ ΡΡΠ΅Π»Ρ, ΡΠΊΡΠ»ΡΠΊΠΈ stat_statements ΡΠ°ΠΌ ΠΌΠΎΠΆΠ΅ Π½Π°ΠΊΠΎΠΏΠΈΡΠΈΡΠΈ. Π Ρ ΠΎΡΡΡΠ½ΡΡΡΡΡ, ΡΠΎ, ΡΠ²ΠΈΠ΄ΡΠ΅ Π·Π° Π²ΡΠ΅, Π½ΡΡΠΎΠ³ΠΎ Π½Π΅ Π²ΠΈΡΡΡΠ½ΠΈΠ»ΠΎΡΡ.
Π’Π°ΠΊ Π’Π°ΠΊ.
ΠΠ»Π΅ ΡΠΊ ΡΠ½Π°ΠΊΡΠ΅ Π·ΡΠΎΠ±ΠΈΡΠΈ Π΄ΠΎΡΡΠΎΠ²ΡΡΠ½ΠΎ Ρ Π½Π΅ ΡΠΎΠ·ΡΠΌΡΡ.
Π―, Π½Π° ΠΆΠ°Π»Ρ, ΡΠΎΡΠ½ΠΎ Π½Π΅ ΠΏΠ°ΠΌ'ΡΡΠ°Ρ β ΡΠΈ ΠΌΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΠΌΠΎ ΡΠ΅ΠΊΡΡ Π·Π°ΠΏΠΈΡΡ Π°Π±ΠΎ queryid Π· pg_stat_statements Ρ Π½Π° Π½ΡΠΎΠ³ΠΎ ΠΎΡΡΡΠ½ΡΡΡΠΌΠΎΡΡ. Π―ΠΊΡΠΎ ΠΌΠΈ ΠΎΡΡΡΠ½ΡΡΡΠΌΠΎΡΡ Π½Π° queryid, ΡΠΎ, Π·Π° ΡΠ΄Π΅ΡΡ, ΠΌΠΈ ΠΏΠΎΡΡΠ²Π½ΡΡΠΌΠΎ ΠΏΠΎΡΡΠ²Π½ΡΠ½Ρ ΡΠ΅ΡΡ.
ΠΡ, Π²ΡΠ½ ΠΌΠΎΠΆΠ΅ Π²ΠΈΡΡΡΠ½ΠΈΡΠΈΡΡ ΠΊΡΠ»ΡΠΊΠ° ΡΠ°Π·ΡΠ² ΠΌΡΠΆ ΡΠ½Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ Ρ ΠΏΡΠΈΡΡ Π°ΡΠΈ Π·Π½ΠΎΠ²Ρ.
ΠΠ· ΡΠΈΠΌ ΠΆΠ΅ id?
Π’Π°ΠΊ.
ΠΠΈ ΡΠ΅ Π²ΠΈΠ²ΡΠ°ΡΠΌΠΎ. ΠΠ°ΡΠ½Π΅ ΠΏΠΈΡΠ°Π½Π½Ρ. ΠΠΎΡΡΡΠ±Π½ΠΎ Π²ΠΈΠ²ΡΠΈΡΠΈ. ΠΠ»Π΅ ΠΏΠΎΠΊΠΈ ΡΠ΅, ΡΠΎ ΠΌΠΈ Π±Π°ΡΠΈΠΌΠΎ, Ρ Π½Π°Ρ Π°Π±ΠΎ 0 ΠΏΠΈΡΠ΅ΡΡΡΡ.
Π¦Π΅, Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΎ, ΡΡΠ΄ΠΊΡΡΠ½ΠΈΠΉ Π²ΠΈΠΏΠ°Π΄ΠΎΠΊ, Π°Π»Π΅ ΠΌΠ΅Π½Π΅ ΡΡΡΡΠΈΠ»ΠΎ, ΠΊΠΎΠ»ΠΈ Ρ Π΄ΡΠ·Π½Π°Π²ΡΡ, ΡΠΎ stat_statemetns ΡΠ°ΠΌ ΠΌΠΎΠΆΠ΅ Π²ΠΈΡΡΡΠ½ΠΈΡΠΈ.
Π£ Pg_stat_statements ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π±Π°Π³Π°ΡΠΎ ΡΠΎΠ³ΠΎ. ΠΠΈ ΡΡΠΈΠΊΠ°Π»ΠΈΡΡ Π· ΡΠΈΠΌ, ΡΠΎ ΡΠΊΡΠΎ Ρ Π²Π°Ρ track_utility = on, ΡΠΎ Ρ Π²Π°Ρ ΠΌΠ΅ΡΠ΅ΠΆΡ ΡΠ΅ΠΆ ΡΡΠ΅ΠΊΠ°ΡΡΡΡΡ.
Π’Π°ΠΊ, Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΎ.
Π ΡΠΊΡΠΎ Ρ Π²Π°Ρ java hibernate, ΡΠΊΠΈΠΉ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΠΈΠΉ, ΡΠΎ ΡΠ°ΠΌ ΠΏΠΎΡΠΈΠ½Π°ΡΡΡΡΡ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΡ. Π ΡΠΊ ΡΡΠ»ΡΠΊΠΈ Π²ΠΈ Π²ΡΠ΄ΠΊΠ»ΡΡΠ°ΡΡΠ΅ Π΄ΡΠΆΠ΅ Π½Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ΄Π°ΡΠΎΠΊ, Ρ Π²Π°Ρ ΡΡΠ°Ρ 50-100 Π³ΡΡΠΏ. Π ΡΠ°ΠΌ Π±ΡΠ»ΡΡ-ΠΌΠ΅Π½Ρ ΡΡΠ°Π±ΡΠ»ΡΠ½Π΅ Π²ΡΠ΅. ΠΠ΄ΠΈΠ½ ΡΠ· ΡΠΏΠΎΡΠΎΠ±ΡΠ² Π±ΠΎΡΠΎΡΡΠ±ΠΈ Π· ΡΠΈΠΌ β ΡΠ΅ Π·Π±ΡΠ»ΡΡΠΈΡΠΈ pg_stat_statements.max.
Π’Π°ΠΊ, Π°Π»Π΅ ΡΡΠ΅Π±Π° Π·Π½Π°ΡΠΈ, Π½Π°ΡΠΊΡΠ»ΡΠΊΠΈ. Π ΡΠΊΠΎΡΡ Π·Π° Π½ΠΈΠΌ ΡΡΠ΅Π±Π° ΡΡΠ΅ΠΆΠΈΡΠΈ. Π― ΡΠ°ΠΊ Ρ ΡΠΎΠ±Π»Ρ. Π’. Π΅. Ρ ΠΌΠ΅Π½Π΅ Ρ pg_stat_statements.max. Π Π΄ΠΈΠ²Π»ΡΡΡ, ΡΠΎ Ρ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ½Π°ΠΏΡΠΎΡΡ Π½Π΅ Π΄ΡΠΉΡΠΎΠ² Π²ΡΠ΄ΡΠΎΡΠΊΡΠ² 70%. ΠΠΎΠ±ΡΠ΅, ΠΎΡΠΆΠ΅, ΠΌΠΈ Π½ΡΡΠΎΠ³ΠΎ Π½Π΅ Π²ΡΡΠ°ΡΠΈΠ»ΠΈ. Π ΠΎΠ±ΠΈΠΌΠΎ reset. Π ΠΊΠΎΠΏΠΈΠΌΠΎ Π·Π½ΠΎΠ²Ρ. Π―ΠΊΡΠΎ Π² Π½Π°ΡΡΡΠΏΠ½ΠΎΠΌΡ ΡΠ½Π°ΠΏΡΠΎΡΡ ΠΌΠ΅Π½ΡΠ΅ 70, ΡΠΎ, ΡΠ²ΠΈΠ΄ΡΠ΅ Π·Π° Π²ΡΠ΅, Π·Π½ΠΎΠ²Ρ Π½ΡΡΠΎΠ³ΠΎ Π½Π΅ Π²ΡΡΠ°ΡΠΈΠ»ΠΈ.
Π’Π°ΠΊ. ΠΠ° Π·Π°ΠΌΠΎΠ²ΡΡΠ²Π°Π½Π½ΡΠΌ Π·Π°ΡΠ°Π· 5 000. Π Π±Π°Π³Π°ΡΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ Π²ΠΈΡΡΠ°ΡΠ°Ρ.
ΠΠ°Π·Π²ΠΈΡΠ°ΠΉ ΡΠ°ΠΊ.
ΠΡΠ΄Π΅ΠΎ:
PS ΠΡΠ΄ ΡΠ΅Π±Π΅ Π΄ΠΎΠ΄Π°ΠΌ, ΡΠΎ ΡΠΊΡΠΎ Π² Postgres Π·Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅Π΄ΠΈΡΡΠΉΠ½Ρ Π΄Π°Π½Ρ Ρ ΡΠΌ Π½Π΅ ΠΌΠΎΠΆΠ½Π° ΠΏΠΎΡΡΠ°ΠΏΠ»ΡΡΠΈ Π² ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΎΡΠΎΡΠ΅Π½Π½Ρ, ΡΠΎ ΠΌΠΎΠΆΠ½Π° ΡΠΊΠΎΡΠΈΡΡΠ°ΡΠΈΡΡ
ΠΠΆΠ΅ΡΠ΅Π»ΠΎ: habr.com