Актуализация Π·Π° ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈΡ‚Π΅: ΠΊΠ°ΠΊ PostgreSQL 12 повишава производитСлността

Актуализация Π·Π° ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈΡ‚Π΅: ΠΊΠ°ΠΊ PostgreSQL 12 повишава производитСлността

PostgreSQL 12, послСдната вСрсия Π½Π° β€žΠ½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π°Ρ‚Π° Π² свСта Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄β€œ Ρ‰Π΅ ΠΈΠ·Π»Π΅Π·Π΅ слСд няколко сСдмици (Π°ΠΊΠΎ всичко Π²ΡŠΡ€Π²ΠΈ ΠΏΠΎ ΠΏΠ»Π°Π½). Π’ΠΎΠ²Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° обичайния Π³Ρ€Π°Ρ„ΠΈΠΊ β€” Π½ΠΎΠ²Π° вСрсия с мноТСство Π½ΠΎΠ²ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° вСднъТ годишно ΠΈ, чСстно ΠΊΠ°Π·Π°Π½ΠΎ, Ρ‚ΠΎΠ²Π° Π΅ впСчатляващо. Π—Π°Ρ‚ΠΎΠ²Π° ΠΈ станах Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ‡Π»Π΅Π½ Π½Π° общността PostgreSQL.

Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠ΅Π½, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ вСрсии, PostgreSQL 12 Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΅Π΄Π½Π°-Π΄Π²Π΅ Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСкциониранС ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ Π½Π° заявкитС). Π¨Π΅Π³ΡƒΠ²Π°Ρ… сС, Ρ‡Π΅ основната характСристика Π½Π° PostgreSQL 12 Π΅ Π² ΠΏΠΎ-голямата стабилност. А Π½Π°Π»ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ управляватС ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π²Π°ΠΆΠ½ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° вашия бизнСс?

Но PostgreSQL 12 Π½Π΅ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° само Π΄ΠΎ Ρ‚ΠΎΠ²Π°: с Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΈ подобрСния прилоТСнията Ρ‰Π΅ работят ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, Π° ΠΎΡ‚ вас сС иска просто Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΡŠΠΏΠ³Ρ€Π΅ΠΉΠ΄!

(МоТС Π±ΠΈ Ρ‰Π΅ трябва ΠΈ Π΄Π° рСконструиратС индСкситС, Π½ΠΎ Π² Ρ‚ΠΎΠ²Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ смС свикнали.)

Π©Π΅ бъдС чудСсно β€” Π΄Π° ΡŠΠΏΠ³Ρ€Π΅ΠΉΠ΄Π½Π΅Ρ‚Π΅ PostgreSQL ΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° сС насладитС Π½Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ подобрСния Π±Π΅Π· излишни усилия. ΠŸΡ€Π΅Π΄ΠΈ няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ PostgreSQL 9.4 Π΄ΠΎ PostgreSQL 10 ΠΈ видях ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ускори Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° подобрСния ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ Π½Π° заявкитС Π² PostgreSQL 10. И, Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ, ΠΎΡ‚ ΠΌΠ΅Π½ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ сС изисквашС Π½ΠΈΡ‰ΠΎ (само Π΄Π° Π·Π°Π΄Π°ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π·Π° конфигурация, max_parallel_workers).

Π‘ΡŠΠ³Π»Π°ΡΠ΅Ρ‚Π΅ сС, приятно Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π΅Π΄Π½Π°Π³Π° слСд ΡŠΠΏΠ³Ρ€Π΅ΠΉΠ΄Π° прилоТСнията работят ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅. А Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ сС стараСм Π΄Π° Ρ€Π°Π΄ΠΈΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ PostgreSQL ΠΈΠΌΠ° всС ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ тях.

И ΠΊΠ°ΠΊ простият ΡŠΠΏΠ³Ρ€Π΅ΠΉΠ΄ Π΄ΠΎ PostgreSQL 12 Ρ‰Π΅ Π²ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈ щастливи? Π‘Π΅Π³Π° Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ°.

Π‘Π΅Ρ€ΠΈΠΎΠ·Π½ΠΈ подобрСния Π² индСкситС

Π‘Π΅Π· индСксиранСто, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ няма Π΄Π° постигнС ΠΌΠ½ΠΎΠ³ΠΎ. А ΠΊΠ°ΠΊ ΠΈΠ½Π°Ρ‡Π΅ Π΄Π° сС Π½Π°ΠΌΠΈΡ€Π° информация Π±ΡŠΡ€Π·ΠΎ? ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° систСма Π·Π° индСксиранС Π½Π° PostgreSQL сС Π½Π°Ρ€ΠΈΡ‡Π° B- Π΄ΡŠΡ€Π²ΠΎ. Π’ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ индСкс Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ Π·Π° систСми Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° CREATE INDEX ON some_table (some_column), Π° PostgreSQL ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° голямата Ρ€Π°Π±ΠΎΡ‚Π°, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° актуалността Π½Π° индСкса, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ постоянно вмъквамС, обновявамС ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅ стойности. Всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ само ΠΏΠΎ сСбС си, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‡ΡƒΠ΄ΠΎ.

Но индСксиранСто Π½Π° PostgreSQL ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” Ρ‚Π΅ нарастват ΠΈ Π·Π°Π΅ΠΌΠ°Ρ‚ излишно място Π½Π° диска, Π° производитСлността Π½Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ намалява. Под "Ρ€Π°Π·Π΄ΡƒΠ²Π°Π½Π΅" ΠΈΠΌΠ°ΠΌ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° индСксната структура. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС β€” Π° ΠΌΠΎΠΆΠ΅ ΠΈ Π΄Π° Π½Π΅ бъдС β€” ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с излишни ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ VACUUM (благодаря Π·Π° информацията Π½Π° ΠŸΠΈΡ‚ΡŠΡ€ Π“Π΅ΠΉΠ³Π°Π½ (Peter Geoghegan)). Π Π°Π·Π΄ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° индСкса Π΅ особСно Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ Π² Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ натоварвания, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ сС промСня.

PostgreSQL 12 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ подобрява Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° B-Π΄Π΅Ρ€Π΅Π²Π½ΠΈΡ‚Π΅ индСкси, Π° СкспСримСнтитС с тСстовС ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° TPC-C ΠΏΠΎΠΊΠ°Π·Π°Ρ…Π°, Ρ‡Π΅ пространството сСга сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π² срСдно, с 40% ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ. Π‘Π΅Π³Π° Ρ…Π°Ρ€Ρ‡ΠΈΠΌ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ само Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° B-Π΄Π΅Ρ€Π΅Π²Π½ΠΈΡ‚Π΅ индСкси (тоСст ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° запис), Π½ΠΎ ΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ индСкситС са станали ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ своитС Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ β€” ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ‚ΠΎΠ²Π° са OLTP-прилоТСния (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅) β€” Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ диска ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈ Ρ‰Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ запитвания. ΠšΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ място ΠΈΠΌΠ° Π½Π° диска, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ пространство ΠΈΠΌΠ° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° растСТ Π±Π΅Π· Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° инфраструктурата.

Някои стратСгии Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ изискват ΠΏΡ€Π΅ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° B-Π΄Π΅Ρ€Π΅Π²Π½ΠΈΡ‚Π΅ индСкси, Π·Π° Π΄Π° сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ прСдимства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, pg_upgrade Π½Π΅ ΠΏΡ€Π΅ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° индСкситС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ). Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ вСрсии Π½Π° PostgreSQL ΠΏΡ€Π΅ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ индСкси Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ водСшС Π΄ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ прСстой, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ бСшС възмоТно Π΄Π° сС правят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Но Π² PostgreSQL 12 ΠΈΠΌΠ° ΠΎΡ‰Π΅ Π΅Π΄Π½Π° чудСсна функция: сСга ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚ индСкситС ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ напълно прСстой. REINDEX CONCURRENTLYΠ’ PostgreSQL 12 ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ подобрСния Π½Π° инфраструктурата Π·Π° индСксиранС. ΠžΡ‰Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½Π΅ сС ΠΌΠΈΠ½Π° Π±Π΅Π· магия, β€”

ΠΆΡƒΡ€Π½Π°Π» Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ записванС , извСстСн ΠΈ ΠΊΠ°Ρ‚ΠΎ WAL (write-ahead log). Π–ΡƒΡ€Π½Π°Π»ΡŠΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ записванС записва всяка транзакция Π² PostgreSQL Π·Π° случай Π½Π° срив ΠΈ рСпликация. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ ΠΈΠ²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ . Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΆΡƒΡ€Π½Π°Π»ΡŠΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ записванС сС записва Π½Π° диска, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° повлияС Π½Π° производитСлността.. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΆΡƒΡ€Π½Π°Π» ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ записи записываСтся Π½Π° диск, Π° это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π’ PostgreSQL 12 Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ записитС WAL, създавани ΠΎΡ‚ индСкситС GiST, GIN ΠΈ SP-GiST ΠΏΡ€ΠΈ построяванС Π½Π° индСкс, намаляват. Π’ΠΎΠ²Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π° няколко Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ прСдимства: записитС WAL Π·Π°Π΅ΠΌΠ°Ρ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ място Π½Π° диска ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ слСд срив ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° индСкси Π² прилоТСнията си (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, гСопространствСни прилоТСния, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° PostGIS, ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ индСкса GiST), Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‰Π΅ Π΅Π΄Π½ΠΎ прСдимство, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ подобрява Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ усилия ΠΎΡ‚ ваша страна.

Π‘Π΅ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅ β€” ΠΏΠΎΠ²Π΅Ρ‡Π΅, ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΎ, ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ

Π’ PostgreSQL 10 бСшС въвСдСно Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ сСкциониранС. Π’ PostgreSQL 11 стана ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-лСсно Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. Π’ PostgreSQL 12 ΠΌΠΎΠΆΠ΅ Π΄Π° сС промСня ΠΌΠ°Ρ‰Π°Π±ΡŠΡ‚ Π½Π° сСкциитС.

Π’ PostgreSQL 12 производитСлността Π½Π° систСмата Π·Π° сСкциониранС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ, особСно Π°ΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ΠΈΠΌΠ° хиляди сСкции. НапримСр, Π°ΠΊΠΎ заявката засяга само няколко сСкции Π² Ρ‚Π°Π±Π»ΠΈΡ†Π° с хиляди, тя Ρ‰Π΅ сС изпълнява ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° Π½Π΅ само Π·Π° Ρ‚Π°ΠΊΠΈΠ²Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ заявки. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ INSERT Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ сСкции сС ускориха.

ЗаписванСто Π½Π° Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· COPY β€” ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° масова Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΅Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΏΡ€ΠΈΠ΅ΠΌ JSON β€” Π² сСкционирани Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² PostgreSQL 12 ΡΡŠΡ‰ΠΎ стана ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π‘ COPY ΠΈ Π±Π΅Π· Ρ‚ΠΎΠ²Π° бСшС Π±ΡŠΡ€Π·ΠΎ, Π° Π² PostgreSQL 12 Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΎ Π±ΡŠΡ€Π·ΠΎ.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅Π·ΠΈ прСдимства Π² PostgreSQL ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ с ΠΎΡ‰Π΅ ΠΏΠΎ-голям Ρ€Π°Π·ΠΌΠ΅Ρ€, Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ стана ΠΏΠΎ-лСсно. И Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ усилия ΠΎΡ‚ ваша страна. Ако ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π²ΠΈ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ сСкции, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ записва Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅, простата актуализация Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ подобрява Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° производитСлност.

И ΠΌΠ°ΠΊΠ°Ρ€ Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π΄Π° Π½Π΅ Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΡ‚ катСгорията β€žΠ°ΠΏΠ³Ρ€Π΅ΠΉΠ΄ ΠΈ сС Ρ€Π°Π΄Π²Π°Ρˆβ€œ, Π² PostgreSQL 12 ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ външни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сочат към сСкционирани Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с сСкциониранСто Π΄Π° бъдС удоволствиС.

Запитванията WITH станаха ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΈ

ΠšΠΎΠ³Π°Ρ‚ΠΎ бСшС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΠΏΠ°Ρ‡ Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΎΠ²ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ (Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са CTE, Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са запитвания WITH), нямам Ρ‚ΡŠΡ€ΠΏΠ΅Π½ΠΈΠ΅ Π΄Π° напиша статия Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прилоТСния с PostgreSQL сС Π·Π°Ρ€Π°Π΄Π²Π°Ρ…Π°. Π’ΠΎΠ²Π° Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ускорят ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Ако, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ CTE.

ЧСсто забСлязвам, Ρ‡Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈΡ‚Π΅ Π² SQL ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ CTE: Π°ΠΊΠΎ Π³ΠΈ напишСш ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½, наистина ΡƒΡΠ΅Ρ‰Π°Ρˆ, Ρ‡Π΅ пишСш ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. Π›ΠΈΡ‡Π½ΠΎ Π°Π· ΠΎΠ±ΠΈΡ‡Π°Ρ… Π΄Π° прСнаписвам Ρ‚Π΅Π·ΠΈ заявки, Π·Π° Π΄Π° сС справя Π±Π΅Π· с CTE ΠΈ Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π° производитСлността. Π‘Π΅Π³Π° всичко Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ.

PostgreSQL 12 позволява Π²Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΈΠΏ CTE Π±Π΅Π· странични Π΅Ρ„Π΅ΠΊΡ‚ΠΈ (SELECT), ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само вСднъТ ΠΏΠΎ-Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ края Π½Π° заявката. Ако Π²ΠΎΠ΄Π΅Ρ… статистика Π½Π° заявкитС с CTE, ΠΊΠΎΠΈΡ‚ΠΎ прСнаписвах, ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ тях щяха Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ‚ Π² Ρ‚Π°Π·ΠΈ катСгория. Π’ΠΎΠ²Π° ΠΏΠΎΠΌΠ°Π³Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ сСга Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Π±ΡŠΡ€Π·ΠΎ.

ΠžΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅, PostgreSQL 12 ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° SQL сам, няма Π΄Π° сС Π½Π°Π»Π°Π³Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½ΠΈΡ‰ΠΎ. И ΠΌΠ°ΠΊΠ°Ρ€ Ρ‡Π΅ сСга сигурно няма Π΄Π° ΠΌΠΈ сС Π½Π°Π»Π°Π³Π° Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌ Ρ‚Π°ΠΊΠΈΠ²Π° заявки, Π΅ страхотно, Ρ‡Π΅ PostgreSQL ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°Π΄ оптимизацията Π½Π° заявкитС.

Just-in-Time (JIT) β€” сСга ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅

Π’ систСмитС PostgreSQL 12 с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° LLVM JIT компилацията Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. ΠŸΡŠΡ€Π²ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° JIT Π·Π° някои Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π° Π²Ρ‚ΠΎΡ€ΠΎ, заявкитС с ΠΈΠ·Ρ€Π°Π·ΠΈ (Π½Π°ΠΉ-простият ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” x + y) Π² ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π±ΠΎΡ€ (ΠΊΠΎΠΈΡ‚ΠΎ стоят слСд SELECT), Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈΡ‚Π΅, ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ с условия WHERE ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ JIT Π·Π° повишаванС Π½Π° производитСлността.

Въй ΠΊΠ°Ρ‚ΠΎ JIT Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² PostgreSQL 12 ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, производитСлността Ρ‰Π΅ сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ сама ΠΏΠΎ сСбС си, Π½ΠΎ ΡΡŠΠ²Π΅Ρ‚Π²Π°ΠΌ Π²ΠΈ Π΄Π° тСстватС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² PostgreSQL 11, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ JIT Π΅Π΄Π²Π° сС появи, Π·Π° Π΄Π° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ производитСлността Π½Π° заявкитС ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ трябва Π½Π΅Ρ‰ΠΎ Π΄Π° сС настройва.

А ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° PostgreSQL 12?

Π’ PostgreSQL 12 ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΈ страхотни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС изслСдват Π΄Π°Π½Π½ΠΈ JSON с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° стандартни SQL/JSON ΠΈΠ·Ρ€Π°Π·ΠΈ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡ„Π°ΠΊΡ‚ΠΎΡ€Π½Π° автСнтикация с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° clientcert=verify-full, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ. Π”ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΅ Π·Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ пост.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ PostgreSQL 10, PostgreSQL 12 Ρ‰Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚Π° производитСлност Π²Π΅Π΄Π½Π°Π³Π° слСд ΡŠΠΏΠ³Ρ€Π΅ΠΉΠ΄Π°. Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ свой Π½Π°Ρ‡ΠΈΠ½ β€” тСствайтС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈ сходни условия Π² Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° систСма, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ подобрСнията, ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ… Π°Π· с PostgreSQL 10. Π”ΠΎΡ€ΠΈ Π΄Π° Π΅ стабилно PostgreSQL 12 сСга ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ…, Π½Π΅ сС ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡ‚Π΅ Π΄Π° тСстватС качСствСно прилоТСнията, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΈ пуснСтС Π² продукция.

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

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