Π—Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ Π½Π° индСкситС Π² PostgreSQL ΠΏΡ€Π΅Π· ΠΏΠΎΠ³Π»Π΅Π΄Π° Π½Π° Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π—Π΄Ρ€Π°Π²Π΅ΠΉ.

Казвам сС Ваня ΠΈ съм Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. Π‘Π»ΡƒΡ‡ΠΈ сС Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ работя ΠΌΠ½ΠΎΠ³ΠΎ с PostgreSQL – Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ сС с настройка Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, оптимизация Π½Π° структура, производитСлност ΠΈ ΠΌΠ°Π»ΠΊΠΎ играя Π½Π° DBA ΠΏΡ€Π΅Π· ΡƒΠΈΠΊΠ΅Π½Π΄ΠΈΡ‚Π΅.

ΠŸΡ€Π΅Π· послСдното Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΎΡ… Π² Ρ€Π΅Π΄ няколко Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π² Π½Π°ΡˆΠΈΡ‚Π΅ микросСрвизи ΠΈ написах java-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° pg-index-health, която улСснява Ρ‚Π°Π·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°, спСстява Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΌΠΈ ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π° някои Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, допускани ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. ИмСнно Π·Π° Ρ‚Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ‰Π΅ става Π΄ΡƒΠΌΠ° днСс.

Π—Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ Π½Π° индСкситС Π² PostgreSQL ΠΏΡ€Π΅Π· ΠΏΠΎΠ³Π»Π΅Π΄Π° Π½Π° Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ΠžΡ‚ΠΊΠ°Π·

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° вСрсия Π½Π° PostgreSQL, с която работя, Π΅ 10. Всички SQL запитвания, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ, са ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΈ ΠΈ Π½Π° 11-Ρ‚Π° вСрсия. ΠœΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π° вСрсия Π΅ 9.6.

ΠŸΡ€Π΅Π΄ΠΈΡΡ‚ΠΎΡ€ΠΈΡ

Всичко Π·Π°ΠΏΠΎΡ‡Π½Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° със странна Π·Π° ΠΌΠ΅Π½ ситуация: ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡ‚ΠΎ създаванС Π½Π° индСкс Π½Π° ΠΏΡ€Π°Π·Π½ΠΎ място ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ с Π³Ρ€Π΅ΡˆΠΊΠ°. Бамият индСкс, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, остана Π² Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π² Π±Π°Π·Π°Ρ‚Π°. ΠΠ½Π°Π»ΠΈΠ·ΡŠΡ‚ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π° нСдостиг Π½Π° temp_file_limit. И Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…Π° проблСмитС… Копавайки ΠΏΠΎ-дълбоко, ΠΎΡ‚ΠΊΡ€ΠΈΡ… цял ΠΊΡƒΠΏ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² конфигурацията Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ, засучвайки Ρ€ΡŠΠΊΠ°Π²ΠΈ, с блясък Π² ΠΎΡ‡ΠΈΡ‚Π΅, Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ… Π΄Π° Π³ΠΈ поправям.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ Π΅Π΄Π½ΠΎ – Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Π°Ρ‚Π° конфигурация

ВСроятно ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π°Ρ‚Π° Π·Π° Postgres, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС пуснат Π½Π° ΠΊΠ°Ρ„Π΅ машина, Π²Π΅Ρ‡Π΅ Π΅ ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ°Π»Π° Ρ‚ΡŠΡ€ΠΏΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° всички, но… Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Π°Ρ‚Π° конфигурация наистина ΠΏΠΎΡ€Π°ΠΆΠ΄Π° Ρ€Π΅Π΄ΠΈΡ†Π° Π²ΡŠΠΏΡ€ΠΎΡΠΈ. ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Π° Π΅, заслуТава Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° maintenance_work_mem, temp_file_limit, statement_timeout ΠΈ lock_timeout.

Π’ нашия случай maintenance_work_mem бСшС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ 64 ΠœΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°, Π° temp_file_limit Π½Π΅Ρ‰ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 2 Π“ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° – Π½ΠΈ липсвашС ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° създаванС Π½Π° индСкс Π½Π° голяма Ρ‚Π°Π±Π»ΠΈΡ†Π°.

ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π² pg-index-health ΡΡŠΠ±Ρ€Π°Ρ… Ρ€Π΅Π΄ΠΈΡ†Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ, ΠΏΠΎ ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС настройват Π·Π° всяка Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ Π΄Π²Π΅ – Π΄ΡƒΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈ сС индСкси

ΠΠ°ΡˆΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ работят Π½Π° SSD дисковС ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ HA-конфигурация с няколко Π΄Π°Ρ‚Π° Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅, майстор хост ΠΈ n-Π±Ρ€ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ. ΠœΡΡΡ‚ΠΎΡ‚ΠΎ Π½Π° диска Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ†Π΅Π½Π΅Π½ рСсурс Π·Π° нас; Ρ‚ΠΎ Π΅ Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ производитСлността ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° CPU. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΎΡ‚ Π΅Π΄Π½Π° страна, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ индСкси Π·Π° Π±ΡŠΡ€Π·ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, Π½Π΅ искамС Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ излишни индСкси Π² Π±Π°Π·Π°Ρ‚Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Π·Π°Π΅ΠΌΠ°Ρ‚ място ΠΈ забавят обновяванСто Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅.

И Ρ‚Π°ΠΊΠ°, слСд ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ… всички Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΈ индСкси ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ… Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡ‚Π΅ Π½Π° ОлСг Π‘Π°Ρ€Ρ‚ΡƒΠ½ΠΎΠ², Ρ€Π΅ΡˆΠΈΡ… Π΄Π° направя β€žΠ²Π΅Π»ΠΈΠΊΠΎβ€œ почистванС. Оказа сС, Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π΅ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ докумСнтацията Π·Π° Π‘Π”. Много Π½Π΅ ΠΎΠ±ΠΈΡ‡Π°Ρ‚. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ Π΄Π²Π΅ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ – Ρ€ΡŠΡ‡Π½ΠΎ създадСн индСкс Π·Π° ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡ ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ β€žΡ€ΡŠΡ‡Π΅Π½β€œ индСкс Π·Π° ΡƒΠ½ΠΈΠΊΠ°Π»Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π°. Π‘Ρ‚Π°Π²Π° Π΄ΡƒΠΌΠ°, Ρ‡Π΅ Ρ‚Π΅ Π½Π΅ са Π½ΡƒΠΆΠ½ΠΈ – Postgres всичко Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ сам. Π’Π°ΠΊΠΈΠ²Π° индСкси ΠΌΠΎΠ³Π°Ρ‚ спокойно Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ, ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° диагностика. duplicated_indexes.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ‚Ρ€Π΅Ρ‚ΠΈ – ΠΏΡ€ΠΈΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‰ΠΈ сС индСкси

ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ индСкси Π·Π° Π΅Π΄Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π°. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ, слСд ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ ΠΊΠ°ΠΊ Π²ΡŠΡ€Π²ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°, Ρ…ΠΎΡ€Π°Ρ‚Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚ заявкитС си ΠΈ добавят ΠΏΠΎ-слоТни индСкси, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ няколко ΠΊΠΎΠ»ΠΎΠ½ΠΈ. Π’Π°ΠΊΠ° сС появяват индСкси Π·Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅ A, A+B, A+B+C ΠΈ Ρ‚.Π½. ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π° ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ индСкси ΠΌΠΎΠ³Π°Ρ‚ смСло Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ са прСфикси Π½Π° трСтия. Π’ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ спСстява доста място Π½Π° диска ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° диагностика. intersected_indexes.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ΠΈ – външни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π±Π΅Π· индСкси

Postgres позволява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ограничСния Π·Π° външни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π±Π΅Π· ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ индСкс. Π’ ΠΌΠ½ΠΎΠ³ΠΎ ситуации Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π΄ΠΎΡ€ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ сС прояви... Π”ΠΎ извСстСн ΠΌΠΎΠΌΠ΅Π½Ρ‚...

Π’Π°ΠΊΠ° бСшС ΠΈ ΠΏΡ€ΠΈ нас: просто Π² Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ job’а, ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰Π° сС ΠΏΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΈ почистваща Π±Π°Π·Π°Ρ‚Π° ΠΎΡ‚ тСстови ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ, Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° β€žΡΡŠΠ±ΠΈΡ€Π°β€œ нашия master host. CPU ΠΈ IO лСтяха Π½Π°Π³ΠΎΡ€Π΅, заявкитС забавяха ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Ρ…Π° ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚, услугата Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅. Π‘ΡŠΡ€Π·ΠΈΡΡ‚ Π°Π½Π°Π»ΠΈΠ· pg_stat_activity ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ зависат заявки ΠΎΡ‚ Π²ΠΈΠ΄Π°:

ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΎΡ‚ <table> ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ id Π² (…)

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ ΠΏΠΎ id Π² Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, СстСствСно, бСшС Π½Π°Π»ΠΈΡ‡Π΅Π½, ΠΈ записитС бяха ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½ΠΈ ΠΏΡ€ΠΈ условиС, Ρ‡Π΅ съвсСм ΠΌΠ°Π»ΠΊΠΎ. ИзглСТдашС, Ρ‡Π΅ всичко трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ, ΡƒΠ²ΠΈ, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅.

На ΠΏΠΎΠΌΠΎΡ‰ Π΄ΠΎΠΉΠ΄Π΅ чудСсното explain analyze ΠΈ Ρ€Π°Π·ΠΊΠ°Π·Π°, Ρ‡Π΅ освСн ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° записи Π² Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, ΠΎΡ‰Π΅ става ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π° цялост, ΠΈ Π½Π° Π΅Π΄Π½Π° ΠΎΡ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ°Π΄Π° Π² sequential scan ΠΏΠΎΡ€Π°Π΄ΠΈ липса Π½Π° подходящ индСкс. Π’Π°ΠΊΠ° сС Ρ€ΠΎΠ΄ΠΈ диагностиката foreign_keys_without_index.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠ΅Ρ‚ΠΈ – null стойност Π² индСкси

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Postgres Π²ΠΊΠ»ΡŽΡ‡Π²Π° null стойности Π² btree-индСкси, Π½ΠΎ Ρ‚Π΅ Ρ‚Π°ΠΌ, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ са Π½ΡƒΠΆΠ½ΠΈ. Π—Π°Ρ‚ΠΎΠ²Π° ΡƒΡΡŠΡ€Π΄Π½ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌ Π΄Π° ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΡΠΌ Ρ‚Π΅Π·ΠΈ null-ΠΎΠ²Π΅ (диагностика indexes_with_null_values), създавайки частични индСкси Π½Π° nullable-ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΏΠΎ Ρ‚ΠΈΠΏ where is not null. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ успях Π΄Π° намаля Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ индСкси ΠΎΡ‚ 1877 ΠœΠ±Π°ΠΉΡ‚Π° Π½Π° 16 ΠšΠ±Π°ΠΉΡ‚Π°. А Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ сСрвиситС Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π‘Π” намаля ΠΎΠ±Ρ‰ΠΎ с 16% (с 4.3 Π“Π±Π°ΠΉΡ‚Π° Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ Ρ†ΠΈΡ„Ρ€ΠΈ) Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° null стойности ΠΎΡ‚ индСкситС. ΠžΠ³Ρ€ΠΎΠΌΠ½Π° икономия Π½Π° дисково пространство ΠΏΡ€ΠΈ сравнитСлно нСслоТни ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ. πŸ™‚

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡˆΠ΅ΡΡ‚ – липса Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° особСноститС Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° MVCC Π² Postgres’С ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС Ρ‚Π°ΠΊΠ°Π²Π° ситуация, ΠΊΠ°Ρ‚ΠΎ bloat, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π±ΡŠΡ€Π·ΠΎ растС Π·Π°Ρ€Π°Π΄ΠΈ голямото количСство ΠΌΡŠΡ€Ρ‚Π²ΠΈ записи. Наивно си мислСх, Ρ‡Π΅ Π½ΠΈΠ΅ смС застраховани ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΈ Ρ‡Π΅ с Π½Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ няма Π΄Π° сС случи, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½ΠΈΠ΅, ΠΎΡ…ΠΎ-Ρ…ΠΎ!!!, смС Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΈ разработчици… Колко Π³Π»ΡƒΠΏΠ°Π² ΠΈ Π½Π°ΠΈΠ²Π΅Π½ бях…

Π’ Π΅Π΄ΠΈΠ½ прСкрасСн Π΄Π΅Π½, Π΅Π΄Π½Π° чудСсна миграция просто ΠΎΠ±Π½ΠΎΠ²ΠΈ всички записи Π² голямата ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ +100 Π“Π±Π°ΠΉΡ‚Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ΠΎΡ‚ Π½ΠΈΡ‰ΠΎΡ‚ΠΎ. Π‘Π΅ΡˆΠ΅ уТасно Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Ρ‰ΠΎ, Π½ΠΎ Π½Π°ΡˆΠΈΡ‚Π΅ Π·Π»ΠΎΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈΡ…Π° Ρ‚ΡƒΠΊ. Π‘Π»Π΅Π΄ 15 часа, ΠΊΠΎΠ³Π°Ρ‚ΠΎ автопочистванСто Π½Π° Ρ‚Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ, стана ясно, Ρ‡Π΅ физичСското пространство няма Π΄Π° сС Π²ΡŠΡ€Π½Π΅. НС ΠΌΠΎΠΆΠ°Ρ…ΠΌΠ΅ Π΄Π° спрСм услугата ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ VACUUM FULL, Π·Π°Ρ‚ΠΎΠ²Π° бСшС Π²Π·Π΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° pg_repack. И Ρ‚ΡƒΠΊ сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ pg_repack Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π±Π΅Π· ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° ΡƒΠ½ΠΈΠΊΠ°Π»Π½Π° ограничСност, Π° Π² Π½Π°ΡˆΠ°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° нямашС ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊΠ° сС Ρ€ΠΎΠ΄ΠΈ диагностиката tables_without_primary_key.

Π’ вСрсията Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 0.1.5 Π±Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΠΎ bloat Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ индСкситС ΠΈ своСврСмСнно Ρ€Π΅Π°Π³ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π΅Π³ΠΎ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ сСдСм ΠΈ осСм – нСдостиг Π½Π° индСкси ΠΈ нСупотрСбявани индСкси

Π”Π²Π΅ слСдващи диагностики β€” tables_with_missing_indexes ΠΈ unused_indexes – Π² тяхната ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½Π° Ρ„ΠΎΡ€ΠΌΠ° сС появиха сравнитСлно скоро. Π€Π°ΠΊΡ‚ΡŠΡ‚ Π΅, Ρ‡Π΅ Π½Π΅ моТСшС просто Ρ‚Π°ΠΊΠ° Π΄Π° Π³ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ.

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

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° спСстим дСсСтки Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ Ρ‡Ρ€Π΅Π· ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° индСкси, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ са Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ, ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ липсващи индСкси Π·Π° рядко ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π Π°Π·Π±ΠΈΡ€Π° сС, практичСски Π·Π° всички диагностики ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС настроСн списък с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π±ΡŠΡ€Π·ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ си, прСдотвратявайки появата Π½Π° Π½ΠΎΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, Π° слСд Ρ‚ΠΎΠ²Π° постСпСнно Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ старитС.

Част ΠΎΡ‚ диагностицитС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π²Π΅Ρ‡Π΅ във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ тСстовС Π²Π΅Π΄Π½Π°Π³Π° слСд внСдряванС Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π‘Π”. И Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ Π±ΠΈ, Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ Π½Π°ΠΉ-силнитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° моята Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² Π΄Π΅ΠΌΠΎ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° нСиспользвани ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡŠΡΡ‚Π²Π°Ρ‰ΠΈ индСкси, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π·Π° Π±Π»ΠΎΠ°Ρ‚, ΠΈΠΌΠ° смисъл Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ само Π½Π° Ρ€Π΅Π°Π»Π½Π° Π‘Π”. Π‘ΡŠΠ±Ρ€Π°Π½ΠΈΡ‚Π΅ стойности ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ записани Π² ClickHouse ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ Π² систСма Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³.

Много сС надявам, Ρ‡Π΅ pg-index-health Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° допринСсСтС Π·Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°Ρ‚Π΅ Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΈ диагностики.

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

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