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

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

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

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

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

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ отговорност

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

праистория

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡŠΡ€Π²ΠΈ - конфигурация ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅

ВСроятно всички са доста ΡƒΠΌΠΎΡ€Π΅Π½ΠΈ ΠΎΡ‚ ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π°Ρ‚Π° Π·Π° Postgres, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° ΠΊΠ°Ρ„Π΅Π²Π°Ρ€ΠΊΠ°, Π½ΠΎ... конфигурацията ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ наистина ΠΏΠΎΠ²Π΄ΠΈΠ³Π° Ρ€Π΅Π΄ΠΈΡ†Π° Π²ΡŠΠΏΡ€ΠΎΡΠΈ. ΠšΠ°Ρ‚ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ си струва Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΠ΅Ρ‚_Π·Π°_Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π°, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅_Π½Π°_Π²Ρ€Π΅ΠΌΠ΅Π½Π΅Π½_Ρ„Π°ΠΉΠ», ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ ΠΈ lock_timeout.

Π’ нашия случай ΠΏΠ°ΠΌΠ΅Ρ‚_Π·Π°_Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° бСшС 64 MB ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅_Π½Π°_Π²Ρ€Π΅ΠΌΠ΅Π½Π΅Π½_Ρ„Π°ΠΉΠ» Π½Π΅Ρ‰ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 2 GB - просто нямахмС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚, Π·Π° Π΄Π° създадСм индСкс Π½Π° голяма Ρ‚Π°Π±Π»ΠΈΡ†Π°.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π² pg-index-Π·Π΄Ρ€Π°Π²Π΅ Π‘ΡŠΠ±Ρ€Π°Ρ… сСрия ΠΊΠ»ΡŽΡ‡, ΠΏΠΎ ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ Π·Π° всяка Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.

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

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

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ‚Ρ€ΠΈ - прСсичащи сС индСкси

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

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

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

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

delete from <table> where id in (…)

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

ΠŸΡ€Π΅ΠΊΡ€Π°ΡΠ½ΠΈΡΡ‚ сС ΠΏΡ€ΠΈΡ‚Π΅Ρ‡Π΅ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ обяснСтС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈ ΠΊΠ°Π·Π°, Ρ‡Π΅ Π² допълнСниС към ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° записи Π² Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, ΠΈΠΌΠ° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π°Ρ‚Π° цялост ΠΈ Π½Π° Π΅Π΄Π½Π° ΠΎΡ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΅ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° послСдоватСлно сканиранС ΠΏΠΎΡ€Π°Π΄ΠΈ липса Π½Π° подходящ индСкс. Π’Π°ΠΊΠ° сС Ρ€ΠΎΠ΄ΠΈ диагностиката Ρ‡ΡƒΠΆΠ΄ΠΈ_ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅_Π±Π΅Π·_индСкс.

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

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Postgres Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π½ΡƒΠ»Π΅Π²ΠΈ стойности Π² btree индСкси, Π½ΠΎ Ρ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Ρ‚Π°ΠΌ. Π—Π°Ρ‚ΠΎΠ²Π° ΡƒΡΡŠΡ€Π΄Π½ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌ Π΄Π° ΠΈΠ·Ρ…Π²ΡŠΡ€Π»Ρ Ρ‚Π΅Π·ΠΈ Π½ΡƒΠ»ΠΈ (диагностика индСкси_с_Π½ΡƒΠ»Π΅Π²ΠΈ_стойности), създаванС Π½Π° частични индСкси Π½Π° nullable ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΏΠΎ Ρ‚ΠΈΠΏ where <A> is not null. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ успях Π΄Π° намаля Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ индСкси ΠΎΡ‚ 1877 MB Π½Π° 16 KB. И Π² Π΅Π΄Π½Π° ΠΎΡ‚ услугитС Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ намаля ΠΎΠ±Ρ‰ΠΎ с 16% (с 4.3 GB Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ числа) ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΈ стойности ΠΎΡ‚ индСкситС. ΠžΠ³Ρ€ΠΎΠΌΠ½ΠΈ спСстявания Π½Π° дисково пространство с ΠΌΠ½ΠΎΠ³ΠΎ лСсни ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. πŸ™‚

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

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

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

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ сСдма ΠΈ осма - Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ индСкси ΠΈ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ индСкси

Π‘Π»Π΅Π΄Π½ΠΈΡ‚Π΅ Π΄Π²Π΅ диагностики са: Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ_с_липсващи_индСкси ΠΈ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ_индСкси – сС появиха Π² окончатСлния си Π²ΠΈΠ΄ сравнитСлно наскоро. Π’ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π΅, Ρ‡Π΅ Ρ‚Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ просто Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²Π·Π΅Ρ‚ΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ.

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

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

ΠšΠ°Ρ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

Някои диагностики ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ тСстовС Π²Π΅Π΄Π½Π°Π³Π° слСд Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. И Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΅Π΄Π½Π° ΠΎΡ‚ Π½Π°ΠΉ-ΠΌΠΎΡ‰Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° моята Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π² дСмонстрация.

Има смисъл Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΈΠ»ΠΈ липсващи индСкси, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° Ρ€Π°Π·Π΄ΡƒΠ²Π°Π½Π΅, само Π½Π° Ρ€Π΅Π°Π»Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π‘ΡŠΠ±Ρ€Π°Π½ΠΈΡ‚Π΅ стойности ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ записани Π² Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ ΠšΡŠΡ‰Π° ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ Π΄ΠΎ систСмата Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³.

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€