Надстройка Π·Π° ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈΡ‚Π΅: ΠΊΠ°ΠΊ 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 ΠΈΠΌΠ°Ρ‚ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ - Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΡ‚ΠΈ ΠΈ Π·Π°Π΅ΠΌΠ°Ρ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ дисково пространство ΠΈ производитСлността Π½Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ сС намалява. Под β€žΡ€Π°Π·Π΄ΡƒΠ²Π°Π½Π΅β€œ ΠΈΠΌΠ°ΠΌ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° структурата Π½Π° индСкса. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈΡ‚Π΅ Π·Π° Π±ΠΎΠΊΠ»ΡƒΠΊ, ΠΊΠΎΠΈΡ‚ΠΎ Π’ΠΠšΠ£Π£Πœ (Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Peter Gagan Π·Π° информацията)ΠŸΠΈΡ‚ΡŠΡ€ Π“Π΅ΠΎΡ…Π΅Π³Π°Π½)). Π Π°Π·Π΄ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° индСкса Π΅ особСно Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ натоварвания, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ сС промСня Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ.

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

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

Някои стратСгии Π·Π° Π½Π°Π΄Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ изискват Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ индСкситС Π½Π° B-Π΄ΡŠΡ€Π²ΠΎ, Π·Π° Π΄Π° сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ прСдимства (Π½Π°ΠΏΡ€. pg_upgrade няма Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π° индСкситС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ). Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ вСрсии Π½Π° PostgreSQL ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ индСкси Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ прСстой, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° сС правят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Но PostgreSQL 12 ΠΈΠΌΠ° Π΄Ρ€ΡƒΠ³Π° страхотна функция: сСга ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Ρ‚Π΅ индСкси ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π Π•Π˜ΠΠ”Π•ΠšΠ‘ Π•Π”ΠΠžΠ’Π Π•ΠœΠ•ΠΠΠžΠ·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ напълно прСстой.

PostgreSQL 12 ΠΈΠΌΠ° Π΄Ρ€ΡƒΠ³ΠΈ подобрСния Π² инфраструктурата Π·Π° индСксиранС. Π”Ρ€ΡƒΠ³ΠΎ Π½Π΅Ρ‰ΠΎ, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ имашС някаква магия - Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ записванС, извСстСн ΠΎΡ‰Π΅ ΠΊΠ°Ρ‚ΠΎ WAL (Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ записванС). Π Π΅Π³ΠΈΡΡ‚ΡŠΡ€ΡŠΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ запис записва всяка транзакция Π² 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 queries), ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΈ сС искашС Π΄Π° напиша статия Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ»ΠΊΠΎ Π²ΡŠΠ·Ρ…ΠΈΡ‚Π΅Π½ΠΈ бяха Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прилоТСния с PostgreSQL. Π’ΠΎΠ²Π° Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ ΠΎΠ½Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ускорят ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. ОсвСн Π°ΠΊΠΎ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ CTE.

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

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

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

Π’ΠΎΡ‡Π½ΠΎ Π½Π°Π²Ρ€Π΅ΠΌΠ΅ (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 Π²Π΅Ρ‡Π΅ Π΅ ΠΏΠΎ-стабилСн, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΎΡ‡Π°ΠΊΠ²Π°Ρ…, Π½Π΅ Π±ΡŠΠ΄Π΅Ρ‚Π΅ ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈ Π΄Π° тСстватС прилоТСния Π΄ΠΎΠ±Ρ€Π΅, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΈ пуснат Π² производство.

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

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