Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π”ΠΎΠΊΠ»Π°Π΄ΡŠΡ‚ прСдставя някои ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ позволяват Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°ΠΉΡ‚Π΅ СфСктивността Π½Π° SQL заявкитС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ ΠΎΡ‚ тях Π½Π° Π΄Π΅Π½, ΠΈ ΠΈΠΌΠ° стотици ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ PostgreSQL ΡΡŠΡ€Π²ΡŠΡ€ΠΈ.

Какви тСхничСски Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½ΠΈ позволяват Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ Ρ‚Π°ΠΊΡŠΠ² ΠΎΠ±Π΅ΠΌ информация ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° улСснява ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.


ΠšΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° интСрСс Π°Π½Π°Π»ΠΈΠ· Π½Π° спСцифични ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π·Π° оптимизация SQL заявки ΠΈ Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ DBA Π·Π°Π΄Π°Ρ‡ΠΈ Π² PostgreSQL - ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π²ΠΈΠΆΡ‚Π΅ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ статии ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)
Казвам сС ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ², прСдставлявам Π€ΠΈΡ€ΠΌΠ° "Π’Π΅Π½Π·ΠΎΡ€".. По-ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, Π°Π· съм спСциализиран Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π² Π½Π°ΡˆΠ°Ρ‚Π° компания.

ДнСс Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ с оптимизация Π½Π° заявки, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° β€žΠ²Π΄ΠΈΠ³Π°Ρ‚Π΅β€œ производитСлността Π½Π° Π΅Π΄Π½Π° заявка, Π° Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° масово. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ заявки ΠΈ трябва Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ някои ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Ρ‚ΠΎΠ·ΠΈ голям ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠšΠ°Ρ‚ΠΎ цяло "Π’Π΅Π½Π·ΠΎΡ€" Π·Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ наши ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π΅ VLSI - Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Π° социална ΠΌΡ€Π΅ΠΆΠ°, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π·Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ ΠΈ външно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, счСтоводни систСми Π·Π° счСтоводство ΠΈ склад, ... ВоСст Π΅Π΄ΠΈΠ½ Ρ‚Π°ΠΊΡŠΠ² "ΠΌΠ΅Π³Π°ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚" Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° бизнСса, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 100 Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° .

Π—Π° Π΄Π° работят ΠΈ Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ всички Ρ‚Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ, Π½ΠΈΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ 10 Ρ€Π°Π·Π²ΠΎΠΉΠ½ΠΈ Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π² цялата страна, Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ ΠΎΡ‰Π΅ 1000 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ.

НиС Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с PostgreSQL ΠΎΡ‚ 2008 Π³. ΠΈ смС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π»ΠΈ голямо количСство ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ - Ρ‚ΠΎΠ²Π° са клиСнтски Π΄Π°Π½Π½ΠΈ, статистичСски, Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½ΠΈ, Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ външни ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ систСми - Π½Π°Π΄ 400TB. Π‘Π°ΠΌΠΎ "Π² производство" ΠΈΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 250 ΡΡŠΡ€Π²ΡŠΡ€Π°, Π° ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 1000 ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ наблюдавамС.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

SQL Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ Π΅Π·ΠΈΠΊ. Π’ΠΈΠ΅ описватС Π½Π΅ β€žΠΊΠ°ΠΊβ€œ трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π΅Ρ‰ΠΎ, Π° β€žΠΊΠ°ΠΊΠ²ΠΎβ€œ искатС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅. Π‘Π£Π‘Π” Π·Π½Π°Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ JOIN - ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΊΠ°ΠΊΠ²ΠΈ условия Π΄Π° Π½Π°Π»ΠΎΠΆΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· индСкса, ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅...

Някои Π‘Π£Π‘Π” ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ подсказки: β€žΠΠ΅, ΡΡŠΠ΅Π΄ΠΈΠ½Π΅Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² Ρ‚Π°ΠΊΠ°Π²Π° ΠΈ Ρ‚Π°ΠΊΠ°Π²Π° ΠΎΠΏΠ°ΡˆΠΊΠ°β€œ, Π½ΠΎ PostgreSQL Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊ. Π’ΠΎΠ²Π° Π΅ ΡΡŠΠ·Π½Π°Ρ‚Π΅Π»Π½Π°Ρ‚Π° позиция Π½Π° Π²ΠΎΠ΄Π΅Ρ‰ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ: β€žΠŸΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π½Π° заявкитС, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ някакви подсказки.β€œ

Но Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ PostgreSQL Π½Π΅ позволява "ΠΎΡ‚Π²ΡŠΠ½" Π΄Π° сС управлява, Ρ‚ΠΎΠΉ напълно позволява Π²ΠΈΠΆ ΠΊΠ°ΠΊΠ²ΠΎ става Π²ΡŠΡ‚Ρ€Π΅ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ заявката си ΠΈ къдС ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ΠšΠ°Ρ‚ΠΎ цяло, с ΠΊΠ°ΠΊΠ²ΠΈ класичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ΄Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ [към DBA]? β€žΠ’ΡƒΠΊ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ исканСто ΠΈ Π½ΠΈΠ΅ смС Π±Π°Π²Π½ΠΈ, всичко виси, Π½Π΅Ρ‰ΠΎ сС случва ... Някаква нСприятност!

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ са Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ:

  • Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° заявки
    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚: β€žΠ‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌ 10 Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² SQL Π·Π° Π½Π΅Π³ΠΎ Ρ‡Ρ€Π΅Π· JOIN ...β€œ - ΠΈ ΠΎΡ‡Π°ΠΊΠ²Π°, Ρ‡Π΅ условията ΠΌΡƒ ΠΏΠΎ Ρ‡ΡƒΠ΄ΠΎ Ρ‰Π΅ сС β€žΡ€Π°Π·Π²ΡŠΡ€ΠΆΠ°Ρ‚β€œ ΠΈ Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ всичко Π±ΡŠΡ€Π·ΠΎ. Но чудСса Π½Π΅ сС случват ΠΈ всяка систСма с Ρ‚Π°ΠΊΠ°Π²Π° промСнливост (10 Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² Π΅Π΄Π½Π° FROM) Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π°Π²Π° някаква Π³Ρ€Π΅ΡˆΠΊΠ°. [статия]
  • остаряла статистика
    ΠœΠΎΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ спСциално Π·Π° PostgreSQL, ΠΊΠΎΠ³Π°Ρ‚ΠΎ β€žΠΈΠ·ΡΠΈΠΏΠ΅Ρ‚Π΅β€œ голям Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ заявка - ΠΈ Ρ‚ΠΎΠΉ Π²ΠΈ β€žΡΠΊΠ°Π½ΠΈΡ€Π°β€œ Π² чинията. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Π²Ρ‡Π΅Ρ€Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°ΡˆΠ΅ 10 записа, Π° днСс ΠΈΠΌΠ° 10 ΠΌΠΈΠ»ΠΈΠΎΠ½Π°, Π½ΠΎ PostgreSQL всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ наясно с Ρ‚ΠΎΠ²Π° ΠΈ трябва Π΄Π° бъдС ΠΏΠΎΠ΄ΠΊΠ°Π½Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°. [статия]
  • β€žΠ²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅β€œ Π½Π° рСсурси
    ΠŸΠΎΡΡ‚Π°Π²ΡΡ‚Π΅ голяма ΠΈ Ρ‚Π΅ΠΆΠΊΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π° слаб ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ диск, ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈΠ»ΠΈ производитСлността Π½Π° самия процСсор. И Ρ‚ΠΎΠ²Π° Π΅ всичко ... НякъдС ΠΈΠΌΠ° Ρ‚Π°Π²Π°Π½ Π½Π° прСдставянСто, Π½Π°Π΄ ΠΊΠΎΠΉΡ‚ΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° скочитС.
  • Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅
    Π’Ρ€ΡƒΠ΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½ΠΎ Ρ‚Π΅ са Π½Π°ΠΉ-подходящи Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‰ΠΈ заявки (INSERT, UPDATE, DELETE) - Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‚Π΄Π΅Π»Π½Π° голяма Ρ‚Π΅ΠΌΠ°.

Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΏΠ»Π°Π½

… И Π·Π° всичко останало Π½ΠΈΠ΅ трябва ΠΏΠ»Π°Π½! Врябва Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ става Π²ΡŠΡ‚Ρ€Π΅ Π² ΡΡŠΡ€Π²ΡŠΡ€Π°.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

План Π·Π° изпълнСниС Π½Π° заявка Π·Π° PostgreSQL Π΅ Π΄ΡŠΡ€Π²ΠΎ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° изпълнСниС Π½Π° заявка Π² тСкстово прСдставянС. Π’ΠΎΡ‡Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ бСшС ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ Π·Π° Π½Π°ΠΉ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Π½Ρ‚Π°.

ВсСки възСл Π½Π° Π΄ΡŠΡ€Π²ΠΎ Π΅ опСрация: ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ индСкс, ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° растСрна ΠΊΠ°Ρ€Ρ‚Π°, ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, прСсичанС ΠΈΠ»ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° сСлСкции. Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° заявка Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΊΠ° ΠΏΡ€Π΅Π· Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΠ²Π° Π΄ΡŠΡ€Π²ΠΎ.

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠ»Π°Π½Π° Π½Π° заявката, Π½Π°ΠΉ-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° EXPLAIN. Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ с всички Ρ€Π΅Π°Π»Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ, Ρ‚.Π΅. дСйствитСлно Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ заявка Π½Π° Π±Π°Π·Π°Ρ‚Π° βˆ’ EXPLAIN (ANALYZE, BUFFERS) SELECT ....

Π›ΠΎΡˆΠ° Ρ‚ΠΎΡ‡ΠΊΠ°: ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅, Ρ‚ΠΎΠ²Π° сС случва "Ρ‚ΡƒΠΊ ΠΈ сСга", Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΅ подходящо само Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. Ако Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ някой силно Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎΠ΄ силСн ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅: β€žΠ₯Π΅ΠΉ! Π’ΡƒΠΊ Π±Π°Π²Π½ΠΎ сС прСдставихмСБя исканС." ΠŸΡ€Π΅Π΄ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ час, Π΅Π΄ΠΈΠ½ час - Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ…Ρ‚Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ…Ρ‚Π΅ Ρ‚Π°Π·ΠΈ заявка ΠΎΡ‚ рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, прСнасяйки я ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, цСлият Π²ΠΈ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ статистика сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ…Π°. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Π³ΠΎ Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ - ΠΈ Ρ‚ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±ΡŠΡ€Π·ΠΎ! И Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ "Π·Π°Ρ‰ΠΎ", Π·Π°Ρ‰ΠΎ бСшС Π±Π°Π²Π½ΠΎ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π—Π° Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ Π±ΠΈΠ»ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ заявката сС изпълнява Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, писаха ΡƒΠΌΠ½ΠΈ Ρ…ΠΎΡ€Π° ΠΌΠΎΠ΄ΡƒΠ» auto_explain. Π’ΠΎΠΉ ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° Π² ΠΏΠΎΡ‡Ρ‚ΠΈ всички Π½Π°ΠΉ-разпространСни дистрибуции Π½Π° PostgreSQL ΠΈ ΠΌΠΎΠΆΠ΅ просто Π΄Π° сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π² конфигурационния Ρ„Π°ΠΉΠ».

Ако Ρ‚ΠΎΠΉ Ρ€Π°Π·Π±Π΅Ρ€Π΅, Ρ‡Π΅ Π΄Π°Π΄Π΅Π½Π° заявка сС изпълнява ΠΏΠΎ-дълго ΠΎΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ стС ΠΌΡƒ ΠΊΠ°Π·Π°Π»ΠΈ, Ρ‚ΠΎΠΉ Π³ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π° "ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка" Π½Π° ΠΏΠ»Π°Π½Π° Π½Π° Ρ‚Π°Π·ΠΈ заявка ΠΈ Π³ΠΈ записва Π·Π°Π΅Π΄Π½ΠΎ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π‘Π΅Π³Π° всичко ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°Ρ€Π΅Π΄, ΠΎΡ‚ΠΈΠ²Π°ΠΌΠ΅ Π΄ΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚Π°ΠΌ ... [ΠΊΡŠΡ€ΠΏΠ° Π·Π° ΠΊΡ€Π°ΠΊΠ° ΠΎΡ‚ тСкст]. Но Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π½ΠΈΡ‰ΠΎ Π·Π° Π½Π΅Π³ΠΎ, освСн Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΏΠ»Π°Π½, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΎΡ‚Π½Π΅ 11 милисСкунди.

Всичко ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°Ρ€Π΅Π΄ - Π½ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ Π΅ ясно ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС Π΅ случило. Π’ допълнСниС към ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π½ΠΈΡ‰ΠΎ особСно. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Π³Π»Π΅Π΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΡŠΠ² "Π½Π°Ρ…Π°Π»Π½ΠΈΠΊ" Π² ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ тСкст Π΅ ΠΎΠ±Ρ‰ΠΎ Π²Π·Π΅Ρ‚ΠΎ ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ.

Но Π΄ΠΎΡ€ΠΈ ΠΈ Π΄Π° Π½Π΅ Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π΄ΠΎΡ€ΠΈ ΠΈ Π΄Π° Π΅ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΈΠΌΠ° ΠΏΠΎ-Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

  • Π’ΡŠΠ·Π΅Π»ΡŠΡ‚ ΠΏΠΎΠΊΠ°Π·Π²Π° сума Π·Π° рСсурситС Π½Π° цялото ΠΏΠΎΠ΄Π΄ΡŠΡ€Π²ΠΎ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ. ВоСст, просто Π΅ нСвъзмоТно Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠΎΠ»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΅ ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°Π½ΠΎ Ρ‚ΡƒΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² Ρ‚ΠΎΠ²Π° сканиранС Π½Π° индСкса - нСвъзмоТно Π΅, Π°ΠΊΠΎ ΠΈΠΌΠ° някакво Π²Π»ΠΎΠΆΠ΅Π½ΠΎ условиС ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ. Врябва Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»ΠΈ ΠΈΠΌΠ° β€žΠ΄Π΅Ρ†Π°β€œ ΠΈ условни ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΡŠΡ‚Ρ€Π΅, CTE - ΠΈ Π΄Π° ΠΈΠ·Π²Π°Π΄ΠΈΠΌ всичко Ρ‚ΠΎΠ²Π° β€žΠ² ΡƒΠΌΠ°β€œ.
  • Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ°: Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ посочСно Π½Π° възСла, Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС Π½Π° възСла. Ако Ρ‚ΠΎΠ·ΠΈ възСл Π΅ Π±ΠΈΠ» изпълнСн няколко ΠΏΡŠΡ‚ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Ρ†ΠΈΠΊΡŠΠ» ΠΏΡ€Π΅Π· записитС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΠ»Π°Π½ΡŠΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° броя Π½Π° Ρ†ΠΈΠΊΠ»ΠΈΡ‚Π΅ - Ρ†ΠΈΠΊΠ»ΠΈ Π½Π° Ρ‚ΠΎΠ·ΠΈ възСл. Но самото Π°Ρ‚ΠΎΠΌΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС остава ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π² ΠΏΠ»Π°Π½Π°. ВоСст, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠ»ΠΊΠΎ ΠΎΠ±Ρ‰ΠΎ Π΅ изпълнСн Ρ‚ΠΎΠ·ΠΈ възСл, трябва Π΄Π° ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ - ΠΎΡ‚Π½ΠΎΠ²ΠΎ β€žΠ² ΡƒΠΌΠ°β€œ.

Π’ Ρ‚Π°ΠΊΠΈΠ²Π° ситуации Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ β€žΠšΠΎΠΉ Π΅ Π½Π°ΠΉ-слабото Π·Π²Π΅Π½ΠΎ?β€œ практичСски нСрСалистично. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Π΄ΠΎΡ€ΠΈ самитС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π² "Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎ" ΠΏΠΈΡˆΠ°Ρ‚ Ρ‚ΠΎΠ²Π° β€žΠ Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ»Π°Π½Π° Π΅ изкуство, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° сС Π½Π°ΡƒΡ‡ΠΈ, ΠΎΠΏΠΈΡ‚...β€œ.

Но Π½ΠΈΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ 1000 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΎΠΏΠΈΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ Π½Π° всСки ΠΎΡ‚ тях. Аз, Ρ‚ΠΈ, Ρ‚ΠΎΠΉ - Ρ‚Π΅ знаят, Π½ΠΎ някой Ρ‚Π°ΠΌ - Π²Π΅Ρ‡Π΅ Π½Π΅. МоТС Π±ΠΈ Ρ‰Π΅ сС Π½Π°ΡƒΡ‡ΠΈ, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅, Π½ΠΎ сСга трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ - ΠΈ ΠΎΡ‚ΠΊΡŠΠ΄Π΅ Ρ‰Π΅ Π²Π·Π΅ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ ΠΎΠΏΠΈΡ‚.

Визуализация Π½Π° ΠΏΠ»Π°Π½Π°

Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Π·Π° Π΄Π° сС справим с Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, трябва Π΄ΠΎΠ±Ρ€Π° визуализация Π½Π° ΠΏΠ»Π°Π½Π°. [статия]

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ΠŸΡŠΡ€Π²ΠΎ ΠΎΡ‚ΠΈΠ΄ΠΎΡ…ΠΌΠ΅ β€žΠ½Π° ΠΏΠ°Π·Π°Ρ€Π°β€œ - Π½Π΅ΠΊΠ° Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΠΌ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°.

Но сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ относитСлно β€žΠΆΠΈΠ²ΠΈβ€œ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ - Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ: обясни.depesz.com ΠΎΡ‚ Π₯ΡƒΠ±Π΅Ρ€Ρ‚ Π›ΡŽΠ±Π°Ρ‡Π΅Π²ΡΠΊΠΈ. На Π²Ρ…ΠΎΠ΄Π° Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ β€žΠΏΠΎΠ΄Π°ΠΉΡ‚Π΅β€œ тСкстовото прСдставянС Π½Π° ΠΏΠ»Π°Π½Π°, Ρ‚ΠΎ Π²ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° Ρ‚Π°Π±Π΅Π»Π° с Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ:

  • собствСно Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° възСл
  • ΠΎΠ±Ρ‰ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° цялото ΠΏΠΎΠ΄Π΄ΡŠΡ€Π²ΠΎ
  • броя Π½Π° записитС, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈ ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ статистичСски ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈ
  • самото тяло Π½Π° възСла

ОсвСн Ρ‚ΠΎΠ²Π° Ρ‚Π°Π·ΠΈ услуга ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° сподСлянС Π½Π° Π°Ρ€Ρ…ΠΈΠ² ΠΎΡ‚ Π²Ρ€ΡŠΠ·ΠΊΠΈ. Π₯Π²ΡŠΡ€Π»ΠΈΡ…Ρ‚Π΅ ΠΏΠ»Π°Π½Π° си Ρ‚Π°ΠΌ ΠΈ ΠΊΠ°Π·Π°Ρ…Ρ‚Π΅: β€žΠ₯Π΅ΠΉ, Вася, Π΅Ρ‚ΠΎ Π»ΠΈΠ½ΠΊ Π·Π° Ρ‚Π΅Π±, Π½Π΅Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄β€œ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Но ΠΈΠΌΠ° ΠΈ ΠΌΠ°Π»ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

ΠŸΡŠΡ€Π²ΠΎ, ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ количСство "copy-paste". Π’Π·ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΠ°Ρ€Ρ‡Π΅ ΠΎΡ‚ Π΄ΡŠΠ½Π΅Ρ€Π°, поставятС Π³ΠΎ Ρ‚Π°ΠΌ ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ, ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

На Π²Ρ‚ΠΎΡ€ΠΎ място, няма Π°Π½Π°Π»ΠΈΠ· Π½Π° количСството ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ - ΡΡŠΡ‰ΠΈΡ‚Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ‚ EXPLAIN (ANALYZE, BUFFERS), Π½Π΅ Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΡƒΠΊ. Π’ΠΎΠΉ просто Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ разглобява, Ρ€Π°Π·Π±ΠΈΡ€Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ с тях. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΎΡΡŠΠ·Π½Π°Π²Π°Ρ‚Π΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Ρ€Π°Π·Π»Π°Π³Π°Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π² диска ΠΈ кСша Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Ρ‚Π°Π·ΠΈ информация Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½Π°.

ВрСтият Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ слабото Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ΠšΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΈ, Π΄ΠΎΠ±Ρ€Π΅ Π΅ вСднъТ Π½Π° ΡˆΠ΅ΡΡ‚ мСсСца ΠΈ ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ Π½Π° Perl.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Но Ρ‚ΠΎΠ²Π° са всички β€žΠ»ΠΈΡ€ΠΈΠΊΠΈβ€œ, Ρ‡ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅ някак си Π΄Π° ΠΆΠΈΠ²Π΅Π΅ с Ρ‚ΠΎΠ²Π°, Π½ΠΎ ΠΈΠΌΠ° Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ услуга. Π’ΠΎΠ²Π° са Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Common Table Expression (CTE) ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ възли ΠΊΠ°Ρ‚ΠΎ InitPlan/SubPlan.

Ако вярватС Π½Π° Ρ‚Π°Π·ΠΈ снимка, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΠ±Ρ‰ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС Π·Π° всСки ΠΎΡ‚Π΄Π΅Π»Π΅Π½ възСл ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС Π·Π° цялата заявка. Всичко Π΅ просто - Π½Π΅ Π΅ ΠΈΠ·Π²Π°Π΄ΠΈΠ» Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ CTE ΠΎΡ‚ възСла Π·Π° сканиранС Π½Π° CTE. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ правилния ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€, ΠΊΠΎΠ»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΎΡ‚Π½Π΅ самото CTE сканиранС.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π’ΠΎΠ³Π°Π²Π° Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° напишСм Π½Π°ΡˆΠΈΡ‚Π΅ - ΡƒΡ€Π°! ВсСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠ°Π·Π²Π°: β€žΠ‘Π΅Π³Π° Ρ‰Π΅ напишСм наши собствСни, Ρ‰Π΅ бъдС супСр лСсно!β€œ

Π’Π·Π΅Ρ…ΠΌΠ΅ Ρ‚ΠΈΠΏΠΈΡ‡Π΅Π½ стСк Π·Π° ΡƒΠ΅Π± услуги: ядрото Π½Π° Node.js + Express, ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΎ ΠΎΡ‚ Bootstrap ΠΈ D3.js Π·Π° красиви Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ. И Π½Π°ΡˆΠΈΡ‚Π΅ очаквания сС ΠΎΠΏΡ€Π°Π²Π΄Π°Ρ…Π° напълно - ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ слСд 2 сСдмици:

  • Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° пСрсонализирани ΠΏΠ»Π°Π½ΠΎΠ²Π΅
    ВоСст, сСга ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ всСки ΠΏΠ»Π°Π½ ΠΊΠ°Ρ‚ΠΎ цяло ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ PostgreSQL.
  • ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ възли β€” CTE сканиранС, InitPlan, SubPlan
  • Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±ΡƒΡ„Π΅Ρ€ΠΈΡ‚Π΅ - къдС страницитС с Π΄Π°Π½Π½ΠΈ сС Ρ‡Π΅Ρ‚Π°Ρ‚ ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, къдС ΠΎΡ‚ локалния кСш, къдС ΠΎΡ‚ диска
  • ΠΏΠΎΠ»ΡƒΡ‡ΠΈ видимост
    Π—Π° Π΄Π° Π½Π΅ β€žΡ€ΠΎΠ²ΠΈΡ‚Π΅β€œ всичко Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°, Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ β€žΠ½Π°ΠΉ-слабото Π·Π²Π΅Π½ΠΎβ€œ Π²Π΅Π΄Π½Π°Π³Π° Π½Π° снимката.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° - Π²Π΅Π΄Π½Π°Π³Π° с ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°Π½Π΅ Π½Π° синтаксиса. Но ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π²Π΅Ρ‡Π΅ Π½Π΅ работят с пълно прСдставянС Π½Π° ΠΏΠ»Π°Π½Π°, Π° с Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΠΊΠΎ. Π’ края Π½Π° ΠΊΡ€Π°ΠΈΡ‰Π°Ρ‚Π° Π²Π΅Ρ‡Π΅ смС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π»ΠΈ всички числа ΠΈ смС Π³ΠΈ Ρ…Π²ΡŠΡ€Π»ΠΈΠ»ΠΈ наляво ΠΈ надясно ΠΈ оставихмС само ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π΄ Π² срСдата, какъв Π²ΠΈΠ΄ възСл Π΅: CTE Scan, CTE Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ Seq Scan спорСд някаква Ρ‚Π°Π±Π΅Π»Π°.

Π’ΠΎΠ²Π° Π΅ ΡΡŠΠΊΡ€Π°Ρ‚Π΅Π½ΠΎΡ‚ΠΎ прСдставянС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°Ρ€ΠΈΡ‡Π°ΠΌΠ΅ шаблон Π½Π° ΠΏΠ»Π°Π½.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Какво Π΄Ρ€ΡƒΠ³ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ? Π‘ΠΈ Π±ΠΈΠ»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° сС Π²ΠΈΠ΄ΠΈ ΠΊΠΎΠΉ дял ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ сС разпрСдСля към ΠΊΠΎΠΉ възСл - ΠΈ Π½ΠΈΠ΅ просто Π³ΠΎ β€žΠ·Π°Π»Π΅ΠΏΠΈΡ…ΠΌΠ΅β€œ отстрани ΠΊΡ€ΡŠΠ³ΠΎΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°.

ΠŸΠΎΡΠΎΡ‡Π²Π°ΠΌΠ΅ възСла ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ - ΠΎΠΊΠ°Π·Π²Π° сС, Ρ‡Π΅ Seq Scan Π΅ ΠΎΡ‚Π½Π΅Π»ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ Π΅Π΄Π½Π° Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π° останалитС 3/4 са Π²Π·Π΅Ρ‚ΠΈ ΠΎΡ‚ CTE Scan. УТас! Π’ΠΎΠ²Π° Π΅ ΠΌΠ°Π»ΠΊΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° относно "скоростта Π½Π° ΠΏΠΎΠΆΠ°Ρ€" Π½Π° CTE Scan, Π°ΠΊΠΎ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π² заявкитС си. Π’Π΅ Π½Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·ΠΈ - губят Π΄ΠΎΡ€ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π½ΠΎ сканиранС Π½Π° маса. [статия] [статия]

Но ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ са ΠΏΠΎ-интСрСсни, ΠΏΠΎ-слоТни, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π΅Π΄Π½Π°Π³Π° посочим сСгмСнт ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅ някои Seq Scan "изядоха" ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅. ОсвСн Ρ‚ΠΎΠ²Π° имашС някакъв Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ Π²ΡŠΡ‚Ρ€Π΅, ΠΌΠ½ΠΎΠ³ΠΎ записи бяха ΠΈΠ·Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΈ Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ ... ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ снимка Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ‚Π΅: β€žΠ’Π°ΡΡ, Ρ‚ΡƒΠΊ всичко Π΅ лошо! Π Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π³ΠΎ, Π²ΠΈΠΆΡ‚Π΅ - Π½Π΅Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄!

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ЕстСствСно, Π±Π΅Π· "Ρ€Π΅ΠΉΠΊΠ°" Π½Π΅ моТСшС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠ΅Ρ‚ΠΎ β€žΡΡ‚ΡŠΠΏΠΈΡ…Π°β€œ, бСшС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ със Π·Π°ΠΊΡ€ΡŠΠ³Π»ΡΠ²Π°Π½Π΅Ρ‚ΠΎ. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° възСла Π½Π° всСки ΠΎΡ‚Π΄Π΅Π»Π΅Π½ възСл Π² ΠΏΠ»Π°Π½Π° Π΅ посочСно с точност Π΄ΠΎ 1 Β΅s. И ΠΊΠΎΠ³Π°Ρ‚ΠΎ броят Π½Π° Π²ΡŠΠ·Π»ΠΎΠ²ΠΈΡ‚Π΅ Ρ†ΠΈΠΊΠ»ΠΈ Π½Π°Π΄Ρ…Π²ΡŠΡ€Π»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1000 - слСд изпълнСниС, PostgreSQL Ρ€Π°Π·Π΄Π΅Π»ΠΈ β€žΠ΄ΠΎβ€œ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€ΠΈ изчисляванС Π½Π°Π·Π°Π΄, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ β€žΠ½ΡΠΊΡŠΠ΄Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ 0.95ms ΠΈ 1.05msβ€œ. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π±Ρ€ΠΎΡΡ‡ΡŠΡ‚ достигнС микросСкунди, всС ΠΎΡ‰Π΅ Π΅ Π½ΠΈΡ‰ΠΎ, Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π΅ [ΠΌΠΈΠ»ΠΈ] сСкунди, трябва Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Ρ‚Π°Π·ΠΈ информация ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, ΠΊΠΎΠ³Π°Ρ‚ΠΎ β€žΡ€Π°Π·ΠΏΡ€ΡŠΡΠΊΠ²Π°Ρ‚Π΅β€œ рСсурси спорСд Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° ΠΏΠ»Π°Π½Π° β€žΠΊΠΎΠΉ ΠΊΠΎΠ»ΠΊΠΎ Π΅ консумирал ΠΎΡ‚ ΠΊΠΎΠ³ΠΎβ€œ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΏΠΎ-слоТна, Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° рСсурситС (Ρ‚Π΅Π·ΠΈ Π±ΡƒΡ„Π΅Ρ€ΠΈ) ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈΡ‚Π΅ възли. Π’ΠΎΠ²Π° Π½ΠΈ струва ΠΎΡ‰Π΅ 2 сСдмици Π·Π° ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ 4 сСдмици Π·Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°.

Доста лСсно Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ - Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠΌ CTE ΠΈ ΡƒΠΆ Ρ‡Π΅Ρ‚Π΅ΠΌ Π½Π΅Ρ‰ΠΎ Π² Π½Π΅Π³ΠΎ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ PostgreSQL Π΅ β€žΡƒΠΌΠ΅Π½β€œ ΠΈ няма Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ Π½ΠΈΡ‰ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Ρ‚Π°ΠΌ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡ запис ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΈ сто ΠΈ ΠΏΡŠΡ€Π²ΠΈΡ ΠΎΡ‚ ΡΡŠΡ‰ΠΈΡ CTE към Π½Π΅Π³ΠΎ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠ»Π°Π½Π° ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅ - странно, ΠΈΠΌΠ°Ρ…ΠΌΠ΅ 3 Π±ΡƒΡ„Π΅Ρ€Π° (страници с Π΄Π°Π½Π½ΠΈ), "консумирани" Π² Seq Scan, ΠΎΡ‰Π΅ 1 Π² CTE сканиранС ΠΈ ΠΎΡ‰Π΅ 2 във Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ CTE сканиранС. ВоСст, Π°ΠΊΠΎ просто сумирамС всичко, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ 6, Π½ΠΎ ΠΎΡ‚ Ρ‚Π°Π±Π»Π΅Ρ‚Π° Ρ‡Π΅Ρ‚Π΅ΠΌ само 3! CTE Scan Π½Π΅ Ρ‡Π΅Ρ‚Π΅ Π½ΠΈΡ‰ΠΎ ΠΎΡ‚ никъдС, Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° процСса. Π’Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΡƒΠΊ Π½Π΅Ρ‰ΠΎ явно Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄!

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС ΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Ρ‚ΡƒΠΊ всички Ρ‚Π΅Π·ΠΈ 3 страници с Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са поискани ΠΎΡ‚ Seq Scan, ΠΏΡŠΡ€Π²ΠΎ 1 Π΅ поискала 1-Π²ΠΎ CTE сканиранС, Π° слСд Ρ‚ΠΎΠ²Π° 2-Ρ€Π° ΠΈ са ΠΌΡƒ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ ΠΎΡ‰Π΅ 2. ВоСст ΠΎΠ±Ρ‰ΠΎ 3 страници са ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ, Π° Π½Π΅ 6.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

И Ρ‚Π°Π·ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π½ΠΈ Π½Π°ΠΊΠ°Ρ€Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, Ρ‡Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ»Π°Π½Π° Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ Π΄ΡŠΡ€Π²ΠΎ, Π° просто някакъв Π²ΠΈΠ΄ Π°Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. И ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ "Π½Π΅Ρ‰ΠΎ ΠΎΡ‚ΠΊΡŠΠ΄Π΅ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΅ дошло." ВоСст, Ρ‚ΡƒΠΊ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ CTE ΠΎΡ‚ pg_class ΠΈ Π³ΠΎ поискахмС Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΡ€Π΅Π· цялото Π²Ρ€Π΅ΠΌΠ΅ Π½ΠΈ ΠΎΡ‚Π²Π΅Π΄Π΅ ΠΏΠΎ ΠΊΠ»ΠΎΠ½Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎ поискахмС втория ΠΏΡŠΡ‚. Ясно Π΅, Ρ‡Π΅ Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° 2-Π²ΠΎΡ‚ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-скъпо, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ само 101-Π²ΠΎΡ‚ΠΎ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ΠŸΠΎΠ΅Ρ…ΠΌΠ΅ Π΄ΡŠΡ… Π·Π° ΠΌΠ°Π»ΠΊΠΎ. Каза: β€žΠ‘Π΅Π³Π°, НСо, знаСш ΠΊΡƒΠ½Π³-Ρ„Ρƒ! Π‘Π΅Π³Π° Π½Π°ΡˆΠΈΡΡ‚ ΠΎΠΏΠΈΡ‚ Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π° вашия Π΅ΠΊΡ€Π°Π½. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅." [статия]

ΠšΠΎΠ½ΡΠΎΠ»ΠΈΠ΄Π°Ρ†ΠΈΡ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

ΠΠ°ΡˆΠΈΡ‚Π΅ 1000 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π²ΡŠΠ·Π΄ΡŠΡ…Π½Π°Ρ…Π° с ΠΎΠ±Π»Π΅ΠΊΡ‡Π΅Π½ΠΈΠ΅. Но Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ само стотици "Π±ΠΎΠΉΠ½ΠΈ" ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈ цялото Ρ‚ΠΎΠ²Π° "ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΈ поставянС" ΠΎΡ‚ страна Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π΅ Π΅ Π½ΠΈΠΊΠ°ΠΊ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ трябва Π΄Π° Π³ΠΎ ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ сами.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ΠšΠ°Ρ‚ΠΎ цяло ΠΈΠΌΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ», ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π° статистика, Π½ΠΎ Ρ‚ΠΎΠΉ ΡΡŠΡ‰ΠΎ трябва Π΄Π° бъдС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ Π² конфигурацията - Ρ‚ΠΎΠ²Π° pg_stat_statements ΠΌΠΎΠ΄ΡƒΠ». Но Ρ‚ΠΎΠΉ Π½Π΅ Π½ΠΈ ΡƒΡΡ‚Ρ€ΠΎΠΉΠ²Π°ΡˆΠ΅.

ΠŸΡŠΡ€Π²ΠΎ, Ρ‚ΠΎΠΉ присвоява Π½Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ заявки ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ схСми Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ QueryIds. Π’ΠΎΠ²Π° Π΅, Π°ΠΊΠΎ ΠΏΡŠΡ€Π²ΠΎ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ SET search_path = '01'; SELECT * FROM user LIMIT 1;ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° SET search_path = '02'; ΠΈ Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° заявка, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ записи Π² статистиката Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΡƒΠ» ΠΈ няма Π΄Π° ΠΌΠΎΠ³Π° Π΄Π° ΡΡŠΠ±Π΅Ρ€Π° ΠΎΠ±Ρ‰Π° статистика ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² контСкста Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π½Π° заявка, Π±Π΅Π· Π΄Π° Π²Π·Π΅ΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ схСми.

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ°, която Π½ΠΈ ΠΏΠΎΠΏΡ€Π΅Ρ‡ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ - липса Π½Π° ΠΏΠ»Π°Π½ΠΎΠ²Π΅. ВоСст няма ΠΏΠ»Π°Π½, ΠΈΠΌΠ° само самата заявка. Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ сС Π·Π°Π±Π°Π²ΠΈ, Π½ΠΎ Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅ Π·Π°Ρ‰ΠΎ. И Ρ‚ΡƒΠΊ сС Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ към ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π±ΡŠΡ€Π·ΠΎ промСнящия сС Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ.

И послСдния ΠΌΠΎΠΌΠ΅Π½Ρ‚ - липса Π½Π° "Ρ„Π°ΠΊΡ‚ΠΈ". ВоСст, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° адрСсиратС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ случай Π½Π° изпълнСниС Π½Π° заявка - Ρ‚ΠΎΠΉ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°, ΠΈΠΌΠ° само ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π° статистика. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π΅ възмоТно Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ с Ρ‚ΠΎΠ²Π°, просто Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° сС Π±ΠΎΡ€ΠΈΠΌ срСщу "copy-paste" ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° пишСм ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€.

ΠšΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ сС ΡΠ²ΡŠΡ€Π·Π²Π° Ρ‡Ρ€Π΅Π· SSH, β€žΠ΄ΡŠΡ€ΠΏΠ°β€œ Π·Π°Ρ‰ΠΈΡ‚Π΅Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° към ΡΡŠΡ€Π²ΡŠΡ€Π° с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° сСртификат ΠΈ tail -F "ΠΏΡ€ΠΈΠ»Π΅ΠΏΠ²Π°" към Π½Π΅Π³ΠΎ Π² Π»ΠΎΠ³ Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊΠ° Ρ‡Π΅ Π² Ρ‚Π°Π·ΠΈ сСсия ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ пълно "ΠΎΠ³Π»Π΅Π΄Π°Π»ΠΎ" Π½Π° цСлия Π»ΠΎΠ³ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π°. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° самия ΡΡŠΡ€Π²ΡŠΡ€ Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½ΠΈΠ΅ Π½Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π½ΠΈΡ‰ΠΎ Ρ‚Π°ΠΌ, просто отразявамС Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.

Въй ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° пишСм интСрфСйса Π² Node.js, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ…ΠΌΠ΅ Π΄Π° пишСм ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€Π° Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ. И Ρ‚Π°Π·ΠΈ тСхнология сС ΠΎΠΏΡ€Π°Π²Π΄Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° JavaScript Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π»Π΅ΠΊΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½ΠΈ тСкстови Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΡŠΡ‚. А самата Node.js инфраструктура ΠΊΠ°Ρ‚ΠΎ backend ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΏΡ€Π°Π²ΠΈ лСсна ΠΈ ΡƒΠ΄ΠΎΠ±Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΈ наистина с някакъв Π²ΠΈΠ΄ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ.

Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ β€žΡ€Π°Π·Ρ‚ΡΠ³Π°ΠΌΠ΅β€œ Π΄Π²Π΅ Π²Ρ€ΡŠΠ·ΠΊΠΈ: ΠΏΡŠΡ€Π²Π°Ρ‚Π°, Π·Π° Π΄Π° β€žΡΠ»ΡƒΡˆΠ°ΠΌΠ΅β€œ самия Π΄Π½Π΅Π²Π½ΠΈΠΊ ΠΈ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€ΠΈ сСбС си, Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π°, Π·Π° Π΄Π° ΠΏΠΈΡ‚Π°ΠΌΠ΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π±Π°Π·Π°Ρ‚Π°. β€žΠΠΎ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° сС появи, Ρ‡Π΅ Ρ‚Π°Π±Π»Π΅Ρ‚ΡŠΡ‚ с oid 123 Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½β€œ, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π½ΠΈΡ‰ΠΎ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ…ΡƒΠ±Π°Π²ΠΎ Π΄Π° ΠΏΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π±Π°Π·Π°Ρ‚Π° β€žΠšΠ°ΠΊΠ²ΠΎ Π΅ OID = 123 всС ΠΏΠ°ΠΊ?β€œ И Ρ‚Π°ΠΊΠ° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ ΠΏΠΈΡ‚Π°ΠΌΠ΅ Π±Π°Π·Π°Ρ‚Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡ‰Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

β€žΠ‘Π°ΠΌΠΎ Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ пропуснахтС, ΠΈΠΌΠ° Π²ΠΈΠ΄ ΠΏΡ‡Π΅Π»ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° слон! ..β€œ Π—Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ систСма, ΠΊΠΎΠ³Π°Ρ‚ΠΎ искахмС Π΄Π° наблюдавамС 10 ΡΡŠΡ€Π²ΡŠΡ€Π°. Най-критичният Π² Π½Π°ΡˆΠ΅Ρ‚ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ…Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, с ΠΊΠΎΠΈΡ‚ΠΎ бСшС Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС справим. Но ΠΏΡ€Π΅Π· ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ тримСсСчиС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ сто Π·Π° наблюдСниС - Π·Π°Ρ‰ΠΎΡ‚ΠΎ систСмата β€žΠ²Π»Π΅Π·Π΅β€œ, всички я искаха, ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΅ Π·Π° всички.

Всичко Ρ‚ΠΎΠ²Π° трябва Π΄Π° сС сумира, ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π΅ голям, Π°ΠΊΡ‚ΠΈΠ²Π΅Π½. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ наблюдавамС, с ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° сС справямС, Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. НиС ΡΡŠΡ‰ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ PostgreSQL ΠΊΠ°Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ. И Π½ΠΈΡ‰ΠΎ Π½Π΅ "Π½Π°Π»ΠΈΠ²Π°" Π΄Π°Π½Π½ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ Π² Π½Π΅Π³ΠΎ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° COPY ВсС ΠΎΡ‰Π΅ Π½Π΅.

Но простото β€žΠΈΠ·Π»ΠΈΠ²Π°Π½Π΅β€œ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π΅ Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° тСхнология. Π—Π°Ρ‰ΠΎΡ‚ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΎΠΊΠΎΠ»ΠΎ 50k заявки Π² сСкунда Π½Π° сто ΡΡŠΡ€Π²ΡŠΡ€Π°, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° 100-150GB рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Π΄Π΅Π½ Π·Π° вас. Π—Π°Ρ‚ΠΎΠ²Π° Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π΄Π° "ΠΎΡ‚Ρ€Π΅ΠΆΠ΅ΠΌ" основата.

ΠŸΡŠΡ€Π²ΠΎ, Π½ΠΈΠ΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ раздСлянС ΠΏΠΎ Π΄Π½ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ цяло Π½ΠΈΠΊΠΎΠΉ Π½Π΅ сС интСрСсува ΠΎΡ‚ ΡΡŠΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π½ΠΈΡ‚Π΅. Каква Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΈΠΌΠ° ΠΊΠ°ΠΊΠ²ΠΎ стС ΠΈΠΌΠ°Π»ΠΈ Π²Ρ‡Π΅Ρ€Π°, Π°ΠΊΠΎ Ρ‚Π°Π·ΠΈ Π²Π΅Ρ‡Π΅Ρ€ стС пуснали Π½ΠΎΠ²Π° вСрсия Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ - ΠΈ Π²Π΅Ρ‡Π΅ някои Π½ΠΎΠ²ΠΈ статистики.

Π’Ρ‚ΠΎΡ€ΠΎ, Π½Π°ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ (бяхмС ΠΏΡ€ΠΈΠ½ΡƒΠ΄Π΅Π½ΠΈ) ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·ΠΎ Π·Π° писанС COPY. ВоСст Π½Π΅ просто COPYΠ·Π°Ρ‰ΠΎΡ‚ΠΎ Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΎΡ‚ INSERT, ΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ВрСтият ΠΌΠΎΠΌΠ΅Π½Ρ‚ – Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ ΠΎΡ‚ΠΊΠ°Π·Π²Π°Ρ‚ задСйствания, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, ΠΈ ΠΎΡ‚ външни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅. ВоСст, Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ нямамС Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π° цялост. Π—Π°Ρ‰ΠΎΡ‚ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°, която ΠΈΠΌΠ° Ρ‡ΠΈΡ„Ρ‚ FK Π²ΡŠΡ€Ρ…Ρƒ нСя, ΠΈ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π² структурата Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Ρ‡Π΅ "Π΅Ρ‚ΠΎ запис Π² ΠΆΡƒΡ€Π½Π°Π»Π°, ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚Π΅Π½ ΠΎΡ‚ FK, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ към Π³Ρ€ΡƒΠΏΠ° записи", Ρ‚ΠΎΠ³Π°Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎ Π²ΠΌΡŠΠΊΠ½Π΅Ρ‚Π΅, PostgreSQL Π½Π΅ ΠΌΡƒ остава Π½ΠΈΡ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ освСн ΠΊΠ°ΠΊ Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΈ чСстно Π΄Π° изпълни SELECT 1 FROM master_fk1_table WHERE ... с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚Π΅ Π΄Π° Π²ΠΌΡŠΠΊΠ½Π΅Ρ‚Π΅ - само Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Ρ‚ΠΎΠ·ΠΈ запис ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° Ρ‚Π°ΠΌ, Ρ‡Π΅ Π½Π΅ "ΠΎΡ‚Ρ‡ΡƒΠΏΠ²Π°Ρ‚Π΅" Ρ‚ΠΎΠ·ΠΈ Ρ‡ΡƒΠΆΠ΄ ΠΊΠ»ΡŽΡ‡ с Π²ΠΌΡŠΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ си.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ вмСсто Π΅Π΄ΠΈΠ½ запис Π² Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ индСкси, плюс Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΎΡ‚ всички Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, към ΠΊΠΎΠΈΡ‚ΠΎ сС отнася. И ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π½ΠΈ трябва - Π½Π°ΡˆΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° записвамС ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ възмоТно ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈ възмоТно Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΎ с Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. Π’Π°ΠΊΠ° Ρ‡Π΅ FK - Π΄ΠΎΠ»Ρƒ!

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ Ρ…Π΅ΡˆΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ. ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π³ΠΈ Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ - Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²Π΅Π΄Π½Π°Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ пристигнС Π·Π°ΠΏΠΈΡΡŠΡ‚, Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π² някакъв Π²ΠΈΠ΄ Ρ‚Π°Π±Π»Π΅Ρ‚ "плюс Π΅Π΄Π½ΠΎ" Ρ‚ΠΎΡ‡Π½ΠΎ Π² ΡΠΏΡƒΡΡŠΠΊΠ°. Π”ΠΎΠ±ΡŠΡ€, ΡƒΠ΄ΠΎΠ±Π΅Π½, Π½ΠΎ ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½ лош - вмъкваш Π΅Π΄ΠΈΠ½ запис, Π½ΠΎ си ΠΏΡ€ΠΈΠ½ΡƒΠ΄Π΅Π½ Π΄Π° Ρ‡Π΅Ρ‚Π΅Ρˆ ΠΈ пишСш Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ само Π΄Π° Ρ‡Π΅Ρ‚Π° ΠΈ пиша - ΠΈ Π΄Π° Π³ΠΎ правя всСки ΠΏΡŠΡ‚.

Π‘Π΅Π³Π° си прСдставСтС, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² която просто прСброяватС броя Π½Π° заявкитС, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ ΠΏΡ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ хост: +1, +1, +1, ..., +1. И Π²ΠΈΠ΅ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ²Π° - всичко Π΅ възмоТно сума Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π΄ΠΎ Π±Π°Π·Π°Ρ‚Π° навСднъТ +10.

Π”Π°, Π² случай Π½Π° някаква нСизправност, логичСската Π²ΠΈ цялост ΠΌΠΎΠΆΠ΅ Π΄Π° сС β€žΡ€Π°Π·ΠΏΠ°Π΄Π½Π΅β€œ, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ нСрСалистичСн случай - Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€, Ρ‚ΠΎΠΉ ΠΈΠΌΠ° батСрия Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π°, ΠΈΠΌΠ°Ρ‚Π΅ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, Π²Π»Π΅Π·Ρ‚Π΅ във Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма ... ΠšΠ°Ρ‚ΠΎ цяло Π½Π΅ си струва. НС си струва Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° производитСлност, която ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΠΎΡ‚ стартиранС Π½Π° Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ΠΈ/FK Π·Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΅ΠΌΠ°Ρ‚Π΅.

Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° Ρ…Π΅ΡˆΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° заявка Π»Π΅Ρ‚ΠΈ Π΄ΠΎ вас, Π²ΠΈΠ΅ изчисляватС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΡ‚ нСя Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, записватС Π³ΠΎ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π³ΠΎ ΠΊΠ°Π·Π²Π°Ρ‚Π΅ Π½Π° всички. Всичко Π΅ Π½Π°Ρ€Π΅Π΄, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° записа Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅ Π²Ρ‚ΠΎΡ€ΠΈ Ρ‡ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ иска Π΄Π° Π³ΠΎ запишС сам - ΠΈ ΠΈΠΌΠ°Ρ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π΅ лошо. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° някои ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (спрямо Π±Π°Π·Π°Ρ‚Π°), ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°.

Π—Π° нас бСшС просто ΠΈΠ΄Π΅Π°Π»Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ MD5 ΠΎΡ‚ тСкст - заявка, ΠΏΠ»Π°Π½, шаблон, ... НиС Π³ΠΎ изчислявамС ΠΎΡ‚ страната Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ β€žΠΈΠ·ΡΠΈΠΏΠ²Π°ΠΌΠ΅β€œ Π³ΠΎΡ‚ΠΎΠ² ID Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π”ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° MD5 ΠΈ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΡ‚ΠΎ раздСлянС Π½ΠΈ позволяват Π΄Π° Π½Π΅ сС Ρ‚Ρ€Π΅Π²ΠΎΠΆΠΈΠΌ Π·Π° възмоТни ΡΠ±Π»ΡŠΡΡŠΡ†ΠΈ.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Но Π·Π° Π΄Π° запишСм всичко Ρ‚ΠΎΠ²Π° Π±ΡŠΡ€Π·ΠΎ, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ самата ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π½Π° запис.

Как ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС записват Π΄Π°Π½Π½ΠΈΡ‚Π΅? ИмамС някакъв Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Ρ€Π°Π·Π»Π°Π³Π°ΠΌΠ΅ Π³ΠΎ Π½Π° няколко Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠšΠžΠŸΠ˜Π ΠΠœΠ• - ΠΏΡŠΡ€Π²ΠΎ Π² ΠΏΡŠΡ€Π²Π°Ρ‚Π°, слСд Ρ‚ΠΎΠ²Π° във Π²Ρ‚ΠΎΡ€Π°Ρ‚Π°, Π² Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° ... НСудобно Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ пишСм Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π² Ρ‚Ρ€ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ послСдоватСлно . нСприятно. МоТС Π»ΠΈ Π΄Π° станС ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ? Мога!

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΅ само Π΄Π° Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Π΅Π΄ΠΈΠ½ Π½Π° Π΄Ρ€ΡƒΠ³. Оказва сС, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ, заявки, шаблони, ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ, лСтящи Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Ρ‚Π΅ΠΌΠΈ, ... - ΠΈ пишСм всичко Ρ‚ΠΎΠ²Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ. Π—Π° Ρ‚ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΉΡ‚Π΅ постоянно ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ COPY ΠΊΠ°Π½Π°Π» Π·Π° всяка ΠΎΡ‚Π΄Π΅Π»Π½Π° Ρ†Π΅Π»Π΅Π²Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ВоСст ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΎΠ½Π΅Ρ€ΡŠΡ‚ Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° ΠΏΠΎΡ‚ΠΎΠΊ, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠ³Π° Π΄Π° запиша Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΌΠΈ Π΄Π°Π½Π½ΠΈ. Но Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ някой Π΄Π° Π½Π΅ виси Π² ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ, Ρ‡Π°ΠΊΠ°ΠΉΠΊΠΈ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ записани, ΠšΠžΠŸΠ˜Π ΠΠΠ•Π’Πž трябва Π΄Π° сС ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π° Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ. ΠŸΡ€ΠΈ нас ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΡŠΡ‚ ΠΎΡ‚ ΠΎΠΊΠΎΠ»ΠΎ 100ms сС ΠΎΠΊΠ°Π·Π° Π½Π°ΠΉ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ - затварямС Π³ΠΎ ΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π³ΠΎ отварямС ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π½Π° ΡΡŠΡ‰Π°Ρ‚Π° маса. И Π°ΠΊΠΎ нямамС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ някои ΠΏΠΈΠΊΠΎΠ²Π΅, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€Π°Π²ΠΈΠΌ обСдиняванС Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π»ΠΈΠΌΠΈΡ‚.

ОсвСн Ρ‚ΠΎΠ²Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ Π·Π° Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΡ„ΠΈΠ» Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ всяко Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ записитС сС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π΅ Π·Π»ΠΎ. ΠšΠ»Π°ΡΠΈΡ‡Π΅ΡΠΊΠΎΡ‚ΠΎ Π·Π»ΠΎ Π΅ INSERT ... VALUES ΠΈ ΠΎΡ‰Π΅ 1000 записа. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΠΈΠΊ Π½Π° запис Π½Π° носитСля ΠΈ всички останали, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π° Π·Π°ΠΏΠΈΡˆΠ°Ρ‚ Π½Π΅Ρ‰ΠΎ Π½Π° диска, Ρ‰Π΅ Ρ‡Π°ΠΊΠ°Ρ‚.

Π—Π° Π΄Π° сС ΠΎΡ‚ΡŠΡ€Π²Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, просто Π½Π΅ ΡΡŠΠ±ΠΈΡ€Π°ΠΉΡ‚Π΅ Π½ΠΈΡ‰ΠΎ, ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅. И Π°ΠΊΠΎ сС случи Π±ΡƒΡ„Π΅Ρ€ΠΈΡ€Π°Π½Π΅ към диск (Π·Π° щастиС API Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Node.js Π²ΠΈ позволява Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅) - ΠΎΡ‚Π»ΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°Π·ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠ°. Π’ΠΎΡ‡Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΈ Π΄ΠΎΠΉΠ΄Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅, Ρ‡Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ - ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΡƒ ΠΎΡ‚ Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½Π°Ρ‚Π° опашка. ΠœΠ΅ΠΆΠ΄ΡƒΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΅ Π·Π°Π΅Ρ‚ΠΎ - Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ слСдващия свободСн ΠΎΡ‚ ΠΏΡƒΠ»Π° ΠΈ ΠΌΡƒ ΠΏΠΈΡˆΠ΅Ρ‚Π΅.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π° писанС Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΈΠΌΠ°Ρ…ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 4K ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° запис ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π½Π°ΠΌΠ°Π»ΠΈΡ…ΠΌΠ΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ 4 ΠΏΡŠΡ‚ΠΈ. Π‘Π΅Π³Π° Ρ‚Π΅ са нараснали ΠΎΡ‰Π΅ 6 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ Π½ΠΎΠ²ΠΈΡ‚Π΅ наблюдавани Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ - Π΄ΠΎ 100MB / s. И сСга ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° послСднитС 3 мСсСца Π² Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΎΠΊΠΎΠ»ΠΎ 10-15TB, надявайки сС, Ρ‡Π΅ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅ΡˆΠΈ всСки ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π·Π° Ρ‚Ρ€ΠΈ мСсСца.

Π Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅

Но простото ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° всички Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π΅ Π΄ΠΎΠ±Ρ€ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, подходящо, Π½ΠΎ Π½Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ – трябва Π΄Π° Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π° са ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π½Π° Π΄Π΅Π½.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Но ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈΡ‚Π΅ са Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΈ, ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ "ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ". И Π½Π° ΠΏΡŠΡ€Π²ΠΎ място трябва Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Ρ‰Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ β€žΠΏΠΎ-ΠΌΠ°Π»ΡŠΠΊβ€œ.

НиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ…ΠΌΠ΅ Ρ‚Ρ€ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π° сСбС си:

  • ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Ρ‚Π°Π·ΠΈ заявка
    ВоСст ΠΎΡ‚ ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ β€žΠΏΡ€ΠΈΡΡ‚ΠΈΠ³Π½Π°Π»ΠΎβ€œ: ΡƒΠ΅Π± интСрфСйс, Π±Π΅ΠΊΠ΅Π½Π΄, ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½Π° систСма ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ.
  • ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ случи сС
    На какъв Ρ‚ΠΎΡ‡Π½ΠΎ ΡΡŠΡ€Π²ΡŠΡ€. Π—Π°Ρ‰ΠΎΡ‚ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ няколко ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΏΠΎΠ΄ Π΅Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π΅Π΄ΠΈΠ½ β€žΠ·Π°Ρ‚ΡŠΠΏΠ΅Π½β€œ (Π·Π°Ρ‰ΠΎΡ‚ΠΎ β€žΠ΄ΠΈΡΠΊΡŠΡ‚ Π΅ ΠΈΠ·Π³Π½ΠΈΠ»β€œ, β€žΠΈΠ·Ρ‚Π΅ΠΊΠ»Π° ΠΏΠ°ΠΌΠ΅Ρ‚β€œ, някакъв Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ), Ρ‚ΠΎΠ³Π°Π²Π° трябва Π΄Π° адрСсиратС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΡΡŠΡ€Π²ΡŠΡ€Π°.
  • ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ сС прояви ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½

Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ "ΠΊΠΎΠΉ" Π½ΠΈ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» заявка, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ инструмСнт - настройка Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° сСсията: SET application_name = '{bl-host}:{bl-method}'; - ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° хоста Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ΄Π²Π° заявката, ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ я Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Π»ΠΎ.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ смС ΠΏΡ€Π΅Π΄Π°Π»ΠΈ "главния" Π½Π° заявката, тя трябва Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° - Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° log_line_prefix = ' %m [%p:%v] [%d] %r %a'. На ΠΊΠΎΠ³ΠΎ ΠΌΡƒ ΠΏΡƒΠΊΠ° ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½ΠΈ Π² Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° всичко Ρ‚ΠΎΠ²Π°. Оказва сС, Ρ‡Π΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°:

  • Π²Ρ€Π΅ΠΌΠ΅
  • ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° процСси ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
  • Π±Π°Π·ΠΎΠ²ΠΎ ΠΈΠΌΠ΅
  • IP Π°Π΄Ρ€Π΅ΡΡŠΡ‚ Π½Π° Π»ΠΈΡ†Π΅Ρ‚ΠΎ, ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ»ΠΎ Ρ‚Π°Π·ΠΈ заявка
  • ΠΈ ΠΈΠΌΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ОсвСн Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсно Π΄Π° наблюдавамС корСлацията Π·Π° Π΅Π΄Π½Π° заявка ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ. Рядко ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ситуация, Π² която ΠΈΠΌΠ°Ρ‚Π΅ Π΅Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ β€žΠ³Π»ΡƒΠΏΠΎΡΡ‚ΠΈβ€œ Ρ‚ΡƒΠΊ ΠΈ Ρ‚Π°ΠΌ. Но Π΄ΠΎΡ€ΠΈ ΠΈ Π΄Π° Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ - ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ някой ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ.

И Ρ‚Π°ΠΊΠ°, ΠΈΠ·Ρ€Π΅ΠΆΠ΅Ρ‚Π΅ "Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€ - Π΅Π΄ΠΈΠ½ Π΄Π΅Π½" Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…ΠΌΠ΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π·Π° всякакъв Π°Π½Π°Π»ΠΈΠ·.

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π΅Π½ Ρ€Π°Π·Π΄Π΅Π» Π΅ ΡΡŠΡ‰ΠΈΡΡ‚ "ΠΏΡ€ΠΎΠ±Π°" - ΡΡŠΠΊΡ€Π°Ρ‚Π΅Π½Π° Ρ„ΠΎΡ€ΠΌΠ° Π½Π° прСдставянС Π½Π° ΠΏΠ»Π°Π½Π°, изчистСна ΠΎΡ‚ всички Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Вторият Ρ€Π°Π·Ρ€Π΅Π· Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚, Π° трСтият Π΅ конкрСтният възСл Π½Π° ΠΏΠ»Π°Π½Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π½ΠΈ създадС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ…ΠΌΠ΅ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ към шаблони, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Π΄Π²Π΅ прСдимства навСднъТ:

  • ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ намаляванС Π½Π° броя Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·
    Врябва Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Π΅Ρ‡Π΅ Π½Π΅ Ρ‡Ρ€Π΅Π· хиляди заявки ΠΈΠ»ΠΈ ΠΏΠ»Π°Π½ΠΎΠ²Π΅, Π° Ρ‡Ρ€Π΅Π· дСсСтки ΠΌΠΎΠ΄Π΅Π»ΠΈ.
  • Π²Ρ€Π΅ΠΌΠ΅Π²Π° линия
    ВоСст, Ρ‡Ρ€Π΅Π· ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°Π½Π΅ Π½Π° β€žΡ„Π°ΠΊΡ‚ΠΈΡ‚Π΅β€œ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ€Π°Π·Π΄Π΅Π», ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ тСхният Π²ΠΈΠ΄ ΠΏΡ€Π΅Π· дСня. И Ρ‚ΡƒΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ някакъв ΠΌΠΎΠ΄Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ сС случва Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вСднъТ Π½Π° час, Π½ΠΎ трябва - вСднъТ Π½Π° Π΄Π΅Π½, трябва Π΄Π° помислитС ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ ΠΎΠ±ΡŠΡ€ΠΊΠ°Π»ΠΎ - ΠΎΡ‚ ΠΊΠΎΠ³ΠΎ ΠΈ Π·Π°Ρ‰ΠΎ Π΅ Π±ΠΈΠ»ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΎ, ΠΌΠΎΠΆΠ΅ Π±ΠΈ трябва Π΄Π° Π΅ Ρ‚ΡƒΠΊ Π½Π΅ трябва. Π’ΠΎΠ²Π° Π΅ Π΄Ρ€ΡƒΠ³ нСчислов, чисто Π²ΠΈΠ·ΡƒΠ°Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π°Π½Π°Π»ΠΈΠ·.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

ΠžΡΡ‚Π°Π½Π°Π»ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ сС основават Π½Π° ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ ΠΎΡ‚ ΠΏΠ»Π°Π½Π°: ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡŠΡ‚ΠΈ сС Π΅ появил Ρ‚Π°ΠΊΡŠΠ² ΠΌΠΎΠ΄Π΅Π», ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΈ срСдно Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠΎΠ»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ са ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ ΠΎΡ‚ диска ΠΈ ΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ...

Π—Π°Ρ‰ΠΎΡ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ΄Π²Π°Ρ‚Π΅ Π½Π° страницата Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° хоста, Π²ΠΈΠΆΡ‚Π΅ - Π½Π΅Ρ‰ΠΎ Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° диска. Π”ΠΈΡΠΊΡŠΡ‚ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС справи - ΠΈ ΠΊΠΎΠΉ Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ?

И ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сортиратС ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π° ΠΈ Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ с ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ сС справитС Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° - с Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° процСсора ΠΈΠ»ΠΈ Π½Π° диска, ΠΈΠ»ΠΈ с общия Π±Ρ€ΠΎΠΉ заявки ... Π‘ΠΎΡ€Ρ‚ΠΈΡ€Π°Π½ΠΈ, Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ "Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅", ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ - пусна Π½ΠΎΠ²Π° вСрсия Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.
[Π²ΠΈΠ΄Π΅ΠΎ лСкция]

И Π²Π΅Π΄Π½Π°Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΡŠΡ€Π²ΡΡ‚ със ΡΡŠΡ‰ΠΈΡ шаблон ΠΎΡ‚ заявка ΠΊΠ°Ρ‚ΠΎ SELECT * FROM users WHERE login = 'Vasya'. Frontend, backend, processing... И сС Ρ‡ΡƒΠ΄ΠΈΡ‚Π΅ Π·Π°Ρ‰ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° трябва Π΄Π° Ρ‡Π΅Ρ‚Π΅ потрСбитСля, Π°ΠΊΠΎ Ρ‚ΠΎΠΉ Π½Π΅ взаимодСйства с Π½Π΅Π³ΠΎ.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΈΡΡ‚ Π½Π°Ρ‡ΠΈΠ½ Π΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ. НапримСр ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡŠΡ‚ Π΅ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ²Π° ΠΈ Ρ‚ΠΎΠ²Π° вСднъТ Π½Π° час (само Π²Ρ€Π΅ΠΌΠ΅Π²Π°Ρ‚Π° линия ΠΏΠΎΠΌΠ°Π³Π°). И Π²Π΅Π΄Π½Π°Π³Π° възниква Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ - ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ Π½Π΅ Π΅ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈ Π½Π΅Ρ‰ΠΎ вСднъТ Π½Π° час ...

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π‘Π»Π΅Π΄ извСстно Π²Ρ€Π΅ΠΌΠ΅ Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Π½ΠΈ липсва Π°Π³Ρ€Π΅Π³Π°Ρ‚ статистики ΠΏΠΎ ΠΏΠ»Π°Π½ΠΎΠ²ΠΈ възли. НиС смС ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π»ΠΈ ΠΎΡ‚ ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅ само ΠΎΠ½Π΅Π·ΠΈ възли, ΠΊΠΎΠΈΡ‚ΠΎ правят Π½Π΅Ρ‰ΠΎ с Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ самитС Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (Π³ΠΈ Ρ‡Π΅Ρ‚Π°Ρ‚/записват ΠΏΠΎ индСкс ΠΈΠ»ΠΈ Π½Π΅). Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° снимка Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ само Π΅Π΄ΠΈΠ½ аспСкт - ΠΊΠΎΠ»ΠΊΠΎ записа Π½ΠΈ донСсС Ρ‚ΠΎΠ·ΠΈ възСли ΠΊΠΎΠ»ΠΊΠΎ Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ (Π Π΅Π΄ΠΎΠ²Π΅, ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ ΠΎΡ‚ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π°).

НяматС подходящ индСкс Π½Π° Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π°, ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ заявка към Π½Π΅Π³ΠΎ, Ρ‚ΠΎΠΉ Π»Π΅Ρ‚ΠΈ ΠΏΠΎΠΊΡ€Π°ΠΉ индСкса, ΠΏΠΎΠΏΠ°Π΄Π° Π² Seq Scan ... Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ…Ρ‚Π΅ всички записи с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄ΠΈΠ½. И Π·Π°Ρ‰ΠΎ Ρ‚ΠΈ трябват 100M Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½ΠΈ записи Π½Π° Π΄Π΅Π½, Π½Π΅ Π΅ Π»ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° навиСш индСкса?

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ всички ΠΏΠ»Π°Π½ΠΎΠ²Π΅ ΠΏΠΎ възли, Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ ΠΈΠΌΠ° някои Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ структури Π² ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°ΠΉ-вСроятно ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ. И Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ…ΡƒΠ±Π°Π²ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°: β€žΠŸΡ€ΠΈΡΡ‚Π΅Π»ΡŽ, Ρ‚ΡƒΠΊ ΠΏΡŠΡ€Π²ΠΎ Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎ индСкс, слСд Ρ‚ΠΎΠ²Π° сортиратС ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΎΡ‚Ρ€ΡΠ·Π²Π°Ρ‚Π΅β€œ - ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ запис.

ВсСки, ΠΊΠΎΠΉΡ‚ΠΎ пишС заявки, вСроятно Π΅ срСщал Ρ‚Π°ΠΊΡŠΠ² ΠΌΠΎΠ΄Π΅Π»: β€žΠ”Π°ΠΉΡ‚Π΅ ΠΌΠΈ послСдната ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ° Π·Π° Вася, Π½Π΅ΠΉΠ½Π°Ρ‚Π° Π΄Π°Ρ‚Π°.β€œ И Π°ΠΊΠΎ няматС индСкс ΠΏΠΎ Π΄Π°Ρ‚Π° ΠΈΠ»ΠΈ няма Π΄Π°Ρ‚Π° Π² индСкса, ΠΊΠΎΠΉΡ‚ΠΎ стС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° ΡΡ‚ΡŠΠΏΠ΅Ρ‚Π΅ Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡŠΠ² β€žΡ€Π΅ΠΉΠΊβ€œ .

Но Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ β€žΡ€Π΅ΠΉΠΊβ€œ - Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π·Π°Ρ‰ΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π²Π΅Π΄Π½Π°Π³Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, отваряйки ΠΏΠ»Π°Π½Π° сСга, Π½Π°ΡˆΠΈΡΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Π΅Π΄Π½Π°Π³Π° Π²ΠΈΠΆΠ΄Π° красива ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° с подсказки, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π²Π΅Π΄Π½Π°Π³Π° ΠΌΡƒ сС ΠΊΠ°Π·Π²Π°: β€žΠ˜ΠΌΠ°Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Ρ‚ΡƒΠΊ ΠΈ Ρ‚Π°ΠΌ, Π½ΠΎ Ρ‚Π΅ сС Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½.β€œ

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° количСството ΠΎΠΏΠΈΡ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈ сСга, Π΅ намаляло Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ. Π’ΡƒΠΊ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Π°ΠΊΡŠΠ² инструмСнт.

Масова оптимизация Π½Π° PostgreSQL заявки. ΠšΠΈΡ€ΠΈΠ» Π‘ΠΎΡ€ΠΎΠ²ΠΈΠΊΠΎΠ² (Π’Π΅Π½Π·ΠΎΡ€)

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

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