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

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

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

Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΠΈ Π²ΠΈΠ΄Π΅ΠΎ

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

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

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

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Β«Π’Π΅Π½Π·ΠΎΡ€Β» Π·Π° ΠΌΠΈΠ»ΠΈΠΎΠ½Π° наши ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π΅ Π‘Π‘Π˜Π‘ - Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Π° социална ΠΌΡ€Π΅ΠΆΠ°, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° Π²ΠΈΠ΄Π΅ΠΎΠ²Ρ€ΡŠΠ·ΠΊΠ°, Π·Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ ΠΈ външСн Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΎΠ±ΠΎΡ€ΠΎΡ‚, счСтоводни ΠΈ складови систСми,… ВоСст, Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ Β«ΠΌΠ΅Π³Π°ΠΊΠΎΠΌΠ±Π°ΠΉΠ½Β» Π·Π° комплСксно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° бизнСса, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° Π½Π°Π΄ 100 Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π—Π° Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Ρ‚ ΠΈ сС Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ - ΠΈΠΌΠ°ΠΌΠ΅ 10 Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² цяла страна, Π² тях - Π½Π°Π΄ 1000 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ.

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

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

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

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

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

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

ΠžΠ±Ρ‰ΠΎ Π²Π·Π΅Ρ‚ΠΎ, с ΠΊΠ°ΠΊΠ²ΠΈ класичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ΄Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ [ΠΊ DBA]? β€žΠ˜Π·ΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ заявка ΠΈ всичко Π΅ Π±Π°Π²Π½ΠΎ, всичко Π΅ Π·Π°ΠΌΡ€ΡŠΠ·Π½Π°Π»ΠΎ, Π½Π΅Ρ‰ΠΎ сС случва… Каква Π±Π΅Π΄Π°!β€œ

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

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

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ»Π°Π½Π°

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

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

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

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

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

Π›ΠΎΡˆ ΠΌΠΎΠΌΠ΅Π½Ρ‚: ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅, Ρ‚ΠΎΠ²Π° сС случва β€žΡ‚ΡƒΠΊ ΠΈ ΡΠ΅Π³Π°β€œ, Π·Π°Ρ‚ΠΎΠ²Π° Π΅ подходящо само Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ°. Ако Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΡΡŠΡ€Π²ΡŠΡ€ с високо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎΠ΄ силСн ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ измСнСния Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅: β€žΠž, Ρ‚ΡƒΠΊ ΠΈΠΌΠ°ΠΌΠ΅ бавСнзаявка. ΠŸΠΎΠ»Ρ‡Π°ΡΠ°, час ΠΏΡ€Π΅Π΄ΠΈ β€” Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΈΡ‡Π°Ρ…Ρ‚Π΅ ΠΈ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Ρ…Ρ‚Π΅ Ρ‚Π°Π·ΠΈ заявка ΠΎΡ‚ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅, занСсохтС я ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, цялото Π²ΠΈ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ статистика Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ. Π˜Π·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ я, Π·Π° Π΄Π° ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚Π΅ β€” Π° тя сС изпълнява Π±ΡŠΡ€Π·ΠΎ! И Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ β€žΠ·Π°Ρ‰ΠΎβ€œ, Π·Π°Ρ‰ΠΎ Π΅ Π±ΠΈΠ»ΠΎ Π΅ Π±Π°Π²Π½Π°.

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

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

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

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

ИзглСТда, всичко Π΅ Π½Π°Ρ€Π΅Π΄, ΠΎΡ‚ΠΈΠ²Π°ΠΌΠ΅ Π² Π»ΠΎΠ³Π° ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ там… [портянка тСкст]. Но Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π½ΠΈΡ‰ΠΎ Π·Π° Π½Π΅Π³ΠΎ, освСн Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΏΠ»Π°Π½, Π·Π°Ρ‰ΠΎΡ‚ΠΎ сС Π΅ изпълнявал 11мс.

ИзглСТда всичко Π΅ Π΄ΠΎΠ±Ρ€Π΅ β€” Π½ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ Π΅ ясно, ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС Π΅ случвало. ОсвСн ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Π΄Π° поглСднСш Π½Π° Ρ‚Π°ΠΊΠ°Π²Π° β€žΠ»Π°Ρ‚ΡƒΡ…Π°β€œ plain text ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Π³Π»Π΅Π΄Π½ΠΎ.

Но Π΄ΠΎΡ€ΠΈ Π΄Π° Π½Π΅ Π΅ Π½Π°Π³Π»Π΅Π΄Π½ΠΎ, Π΄Π° Π½Π΅ Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΈΠΌΠ° ΠΈ ΠΏΠΎ-сСриозни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

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

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

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

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

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

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

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

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

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

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‚ΠΎΠ·ΠΈ сСрвиз ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сподСля Π°Ρ€Ρ…ΠΈΠ² ΠΎΡ‚ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅. ΠšΠΈΠ½ΡƒΠ²Π°Ρˆ Ρ‚Π°ΠΌ своя ΠΏΠ»Π°Π½ ΠΈ казваш: β€žΠ•ΠΉ, ВасС, Π΅Ρ‚ΠΎ Ρ‚ΠΈ Π»ΠΈΠ½ΠΊΠ°, Ρ‚Π°ΠΌ Π½Π΅Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄.β€œ

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

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

ΠŸΡŠΡ€Π²ΠΎ, ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ количСство β€žΠΊΠΎΠΏΠΈΠΏΠ°ΡΡ‚Π°β€œ. Π’Π·ΠΈΠΌΠ°Ρˆ ΠΏΠ°Ρ€Ρ‡Π΅ Π»ΠΎΠ³, слагаш Π³ΠΎ Ρ‚Π°ΠΌ, ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

На Π²Ρ‚ΠΎΡ€ΠΎ място, няма Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ β€” ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅Π·ΠΈ buffers, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° EXPLAIN (ANALYZE, BUFFERS), Ρ‚ΡƒΠΊ Π½Π΅ Π³ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅. Π’ΠΎ просто Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°, Ρ€Π°Π·Π±ΠΈΡ€Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ с тях. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Ρˆ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ ΠΈ осъзнаваш, Ρ‡Π΅ моТСш Π΄Π° Π½Π΅ β€žΡ€Π°Π·Π»ΠΎΠΆΠΈΡˆβ€œ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π½Π° диска ΠΈ Π² кСша Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Ρ‚Π°Π·ΠΈ информация Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½Π°.

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

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

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

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

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

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

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

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

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

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

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

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

Какво ΠΎΡ‰Π΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ? Π‘ΠΈ Π±ΠΈΠ»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²Π° част ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ сС разпрСдСля Π½Π° ΠΊΠΎΠΉ възСл – ΠΈ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ отстрани pie chart.

НасочвамС към възСла ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ – ΠΎΠΊΠ°Π·Ρ‹Π²Π° сС, Ρ‡Π΅ Seq Scan Π΅ Π·Π°Π΅Π» ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ Π΅Π΄Π½Π° Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π° останалитС 3/4 са Π·Π°Π΅Ρ‚ΠΈ ΠΎΡ‚ CTE Scan. УТас! Π’ΠΎΠ²Π° Π΅ ΠΌΠ°Π»ΠΊΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° β€žΡΠΊΠΎΡ€ΠΎΡΡ‚Ρ‚Π°β€œ Π½Π° CTE Scan, Π°ΠΊΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π² запроситС си. Π’Π΅ Π½Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·ΠΈ – Π΄ΠΎΡ€ΠΈ ΠΎΡ‚ΡΡ‚ΡŠΠΏΠ²Π°Ρ‚ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎΡ‚ΠΎ сканиранС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ. [статия] [статия]

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

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

ЕстСствСно, Π½Π΅ ΠΌΠΈΠ½Π° ΠΈ Π±Π΅Π· β€žΠ³Ρ€Π°Π±Π»ΠΈβ€œ.

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

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

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

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ доста просто β€” ΠΏΡ€Π°Π²ΠΈΠΌ CTE ΠΈ Π² Π½Π΅Π³ΠΎ Π½Π΅Ρ‰ΠΎ ΡƒΠΆ Ρ‡Π΅Ρ‚Π°. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, PostgreSQL Π΅ "ΡƒΠΌΠ΅Π½" ΠΈ Π½Π΅ Ρ‰Π΅ Ρ‡Π΅Ρ‚Π΅ Π½ΠΈΡ‰ΠΎ Ρ‚Π°ΠΌ. ПослС Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡ запис ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π° Π·Π° Π½Π΅Π³ΠΎ β€” стотния ΠΎΡ‚ ΡΡŠΡ‰ΠΈΡ CTE.

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

Π“Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠ»Π°Π½Π° ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅ β€” странно, 3 buffers (страници Π΄Π°Π½Π½ΠΈ) бяха "ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅Π½ΠΈ" Π² Seq Scan, ΠΎΡ‰Π΅ 1 Π² CTE Scan ΠΈ ΠΎΡ‰Π΅ 2 във втория CTE Scan. ВоСст, Π°ΠΊΠΎ просто ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ 6, Π½ΠΎ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° смС ΠΏΡ€ΠΎΡ‡Π΅Π»ΠΈ само 3! CTE Scan Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ Ρ‡Π΅Ρ‚Π΅ Π½ΠΈΡ‰ΠΎ ΠΎΡ‚Π½ΠΈΠΊΡŠΠ΄Π΅, Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΎ с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° процСса. Π—Π½Π°Ρ‡ΠΈ Ρ‚ΡƒΠΊ явно Π½Π΅Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄!

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

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

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

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

НиС Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΅Ρ…ΠΌΠ΅ дълбоко Π²ΡŠΠ·Π΄ΡƒΡ…. ΠšΠ°Π·Π°Ρ…ΠΌΠ΅: "Π‘Π΅Π³Π°, НСо, знаСш ΠΊΡƒΠ½Π³-Ρ„Ρƒ! Π‘Π΅Π³Π° Π½Π°ΡˆΠΈΡΡ‚ ΠΎΠΏΠΈΡ‚ Π΅ Π½Π° Π΅ΠΊΡ€Π°Π½Π° Ρ‚ΠΈ. Π‘Π΅Π³Π° моТСш Π΄Π° Π³ΠΎ използваш." [статия]

ΠšΠΎΠ½ΡΠΎΠ»ΠΈΠ΄Π°Ρ†ΠΈΡ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅

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

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

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

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

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

И послСдният ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” липсата Π½Π° "Ρ„Π°ΠΊΡ‚ΠΈ". ВоСст, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС адрСсира ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ СкзСмпляр Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° заявка β€” няма Ρ‚Π°ΠΊΡŠΠ², ΠΈΠΌΠ° само Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π° статистика. Π‘ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ слоТно.

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

Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° сС Π±ΠΎΡ€ΠΈΠΌ с "копипастата" ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° пишСм ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€.

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

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

Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π½ΠΈΠ΅ β€žΠ΄ΡŠΡ€ΠΏΠ°ΠΌΠ΅β€œ Π΄Π²Π΅ Π²Ρ€ΡŠΠ·ΠΊΠΈ: ΠΏΡŠΡ€Π²Π°Ρ‚Π°, Π·Π° Π΄Π° β€žΡΠ»ΡƒΡˆΠ°ΠΌΠ΅β€œ самия Π»ΠΎΠ³ ΠΈ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€ΠΈ нас, Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° - Π·Π° Π΄Π° ΠΏΠΈΡ‚Π°ΠΌΠ΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π±Π°Π·Π°Ρ‚Π°. β€žΠ Π΅Ρ‚ΠΎ, Π² Π»ΠΎΠ³Π° Π΄ΠΎΠΉΠ΄Π΅, Ρ‡Π΅ Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° с oid 123β€œ, Π½ΠΎ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΌΡƒ Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½ΠΈΡ‰ΠΎ ΠΈ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΏΠΎΠΏΠΈΡ‚Π° Π±Π°Π·Π°Ρ‚Π° β€žΠ ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ OID = 123?β€œ И Ρ‚Π°ΠΊΠ° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ ΠΏΠΈΡ‚Π°ΠΌΠ΅ Π±Π°Π·Π°Ρ‚Π° Π·Π° Π½Π΅Ρ‰Π°, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‰Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ.

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

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

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

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

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

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

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

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

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

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

А сСга си прСдставСтС, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² която просто прСброяватС количСството заявки, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ хост: +1, +1, +1, ..., +1. А Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π²ΠΈ Π΅ Π½ΡƒΠΆΠ½ΠΎ β€” всичко Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС сумира Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π² Π±Π°Π·Π°Ρ‚Π° Π·Π° Π΅Π΄ΠΈΠ½ ΠΏΡŠΡ‚ +10.

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

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

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

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

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

Как ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС записват Π΄Π°Π½Π½ΠΈ? ИмамС някакъв Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ Π³ΠΎ Π½Π° няколко Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° COPY β€” ΠΏΡŠΡ€Π²ΠΎ Π² ΠΏΡŠΡ€Π²Π°Ρ‚Π°, послС във Π²Ρ‚ΠΎΡ€Π°Ρ‚Π°, Π² трСтата… НС Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΡƒΠΆ записвамС Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½ΠΈ Π½Π° Ρ‚Ρ€ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ послСдоватСлно. НСприятно. МоТС Π»ΠΈ Π΄Π° станС ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ? МоТС!

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

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

ВоСст, ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° стрийм, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠ³Π° Π΄Π° запиша Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ ΠΌΠΈ Π΄Π°Π½Π½ΠΈ. Но Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈ Π±Π°Π·Π°Ρ‚Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π° някой Π΄Π° Π½Π΅ бъдС Π±Π»ΠΎΠΊΠΈΡ€Π°Π½, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ сС Π·Π°ΠΏΠΈΡˆΠ°Ρ‚, COPY трябва Π΄Π° сС ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π° с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° пСриодичност. Π—Π° нас Π½Π°ΠΉ-СфСктивният ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ сС ΠΎΠΊΠ°Π·Π° ΠΎΠΊΠΎΠ»ΠΎ 100мс β€” затварямС ΠΈ Π²Π΅Π΄Π½Π°Π³Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ отварямС Π½Π° ΡΡŠΡ‰Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°. А Π°ΠΊΠΎ Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ само Π½ΠΈ достига ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΈΠΊΠΈ, Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡƒΠ» Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΡ€Π΅Π΄Π΅Π».

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

Π—Π° Π΄Π° сС ΠΈΠ·Π±Π°Π²ΠΈΠΌ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ²Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, просто Π½Π΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°ΠΉΡ‚Π΅ Π½ΠΈΡ‰ΠΎ, Π½Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ. И Π°ΠΊΠΎ всС ΠΏΠ°ΠΊ възникнС Π±ΡƒΡ„Π΅Ρ€ΠΈΡ€Π°Π½Π΅ към диска (Π·Π° щастиС, Stream 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'. Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄, Π±Π΅ΠΊΠ΅Π½Π΄, обработка… И сС замислятС, Π·Π°Ρ‰ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Ρ‡Π΅Ρ‚Π΅ потрСбитСля, Π°ΠΊΠΎ Ρ‚ΠΎΠΉ Π½Π΅ взаимодСйства с Π½Π΅Π³ΠΎ.

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

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

Π‘Π»Π΅Π΄ извСстно Π²Ρ€Π΅ΠΌΠ΅ ΠΎΡΡŠΠ·Π½Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Π½ΠΈ липсва Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π° статистика ΠΏΠΎ възли Π² ΠΏΠ»Π°Π½Π°. Π˜Π·Π²Π»ΡΠΊΠΎΡ…ΠΌΠ΅ ΠΎΡ‚ ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅ само Ρ‚Π΅Π·ΠΈ възли, ΠΊΠΎΠΈΡ‚ΠΎ правят Π½Π΅Ρ‰ΠΎ с Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° самитС Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (Ρ‡Π΅Ρ‚Π°/пиша ΠΏΠΎ индСкс ΠΈΠ»ΠΈ Π½Π΅). По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ, относно ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° сС добавя само Π΅Π΄ΠΈΠ½ аспСкт – ΠΊΠΎΠ»ΠΊΠΎ записа Ρ‚ΠΎΠ·ΠΈ възСл Π½ΠΈ Π΅ донСсъл, Π° ΠΊΠΎΠ»ΠΊΠΎ Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΠΈΠ» (Rows Removed by Filter).

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

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

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

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

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

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

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

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

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