ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π Π°Π·ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ‚ 2015 Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Илия КосмодСмянски "Linux настройка Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL"

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ отговорност: ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ Π΅ Π΄Π°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΡ€Π΅Π· Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ 2015 Π³ΠΎΠ΄ΠΈΠ½Π° β€” ΠΌΠΈΠ½Π°Π»ΠΈ са ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 4 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΎ. ВСрсията Π½Π° PostgreSQL, обсъТдана Π² Π΄ΠΎΠΊΠ»Π°Π΄Π° 9.4, Π²Π΅Ρ‡Π΅ Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°. ΠŸΡ€Π΅Π· послСднитС 4 Π³ΠΎΠ΄ΠΈΠ½ΠΈ излязоха 5 Π½ΠΎΠ²ΠΈ вСрсии Π½Π° PostgreSQL ΠΈ 15 вСрсии Π½Π° ядрото Π½Π° Linux. Ако ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅ΠΌ Ρ‚Π΅Π·ΠΈ мСста, Ρ‰Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π΄Ρ€ΡƒΠ³ Π΄ΠΎΠΊΠ»Π°Π΄. Но Ρ‚ΡƒΠΊ Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎΡ‚ΠΎ настройванС Π½Π° Linux Π·Π° PostgreSQL, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΎ ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский


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

Казвам сС Илия КосмодСмянски. Работя Π² компанията PostgreSQL-Consulting. Π‘Π΅Π³Π° Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΌΠ°Π»ΠΊΠΎ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ с Linux ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ ΠΈ PostgreSQL Π² частност, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ са доста сходни.

Π—Π° ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ? Ако ΠΎΠ±Ρ‰ΡƒΠ²Π°Ρ‚Π΅ с PostgreSQL, Π΄ΠΎ някаква стСпСн трябва Π΄Π° Π±ΡŠΠ΄Π΅Ρ‚Π΅ UNIX администратор. Какво ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°? Ако сравним Oracle ΠΈ PostgreSQL, Π² Oracle трябва Π΄Π° Π±ΡŠΠ΄Π΅Ρ‚Π΅ Π½Π° 80 % DBA администратор Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π½Π° 20 % администратор Π½Π° Linux.

Π‘ PostgreSQL Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-слоТно. Π‘ PostgreSQL трябва ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Linux. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° трябва ΠΌΠ°Π»ΠΊΠΎ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ Ρ‚Π΅ΠΌΠΏΠΎΡ‚ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² послСдно Π²Ρ€Π΅ΠΌΠ΅ всичко сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°. И Π½ΠΎΠ²ΠΈ ядра ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚, ΠΈ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сС появяват, производитСлността сС подобрява ΠΈ Ρ‚.Π½.

Π—Π°Ρ‰ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Linux? Π’ΡŠΠΎΠ±Ρ‰Π΅ Π½Π΅ Π·Π°Ρ‰ΠΎΡ‚ΠΎ смС Π½Π° конфСрСнцията Linux ΠŸΠΈΡ‚Π΅Ρ€, Π° Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ условия Π΅Π΄Π½Π°Ρ‚Π° ΠΎΡ‚ Π½Π°ΠΉ-обоснованитС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ систСми Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ ΠΈ с PostgreSQL Π² частност Π΅ Linux. Π—Π°Ρ‰ΠΎΡ‚ΠΎ FreeBSD, Π·Π° съТалСниС, сС Ρ€Π°Π·Π²ΠΈΠ²Π° Π² странна посока. И Ρ‰Π΅ ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ с производитСлността, Ρ‚Π°ΠΊΠ° ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° PostgreSQL Π½Π° Windows – Ρ‚ΠΎΠ²Π° Π΅ изцяло ΠΎΡ‚Π΄Π΅Π»Π½Π° сурова Ρ‚Π΅ΠΌΠ°, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Windows няма Ρ‚Π°ΠΊΠΎΠ²Π° сподСлСно ΠΏΠ°ΠΌΠ΅Ρ‚, ΠΊΠ°ΠΊΡ‚ΠΎ UNIX, Π° PostgreSQL Π΅ зависим ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π΅ многопроцСсна систСма.

И Π΅ΠΊΠ·ΠΎΡ‚ΠΈΡ‡Π½ΠΈ систСми ΠΊΠ°Ρ‚ΠΎ Solaris, мисля, интСрСсуват ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Ρ…ΠΎΡ€Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π’ ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ дистрибутив Π½Π° Linux ΠΈΠΌΠ° Π½Π°Π΄ 1000 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° syctl, Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΎ ядрото. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π°ΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π³Π°ΠΉΠΊΠΈ, Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° сС настройва ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Ρ‡ΠΈΠ½ΠΈ. Има ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‚Π΅ систСми, ΠΊΠ°ΠΊ Π΄Π° сС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Ρ‚. Ако ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΊΠ°ΠΊ Π΄Π° стартиратС: ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π² BIOS, ΠΊΠ°ΠΊ Π΄Π° настроитС ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ Ρ‚.Π½.

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

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Какви Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΈ tuning targets ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π² Linux? Мисля, Ρ‡Π΅ Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ всички Π²ΠΈΠ΅ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ‚Π΅ с администриранС Π½Π° Linux, Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° обяснявам ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват targets.

МоТС Π΄Π° сС Ρ‚ΡŽΠ½ΠΈΠ½Π³ΡƒΠ²Π°:

  • ЦП.
  • ΠŸΠ°ΠΌΠ΅Ρ‚.
  • Π‘ΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅.
  • Π”Ρ€ΡƒΠ³ΠΎ. Π—Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² края Π·Π° дСсСрт. Π”ΠΎΡ€ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π·Π° пСстСнС Π½Π° СнСргия, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΊΠ°ΠΆΠ°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ нСпрСдсказуСмо ΠΈ Π½Π΅ особСно приятно влияниС Π²ΡŠΡ€Ρ…Ρƒ производитСлността.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Каква спСцифика ΠΈΠΌΠ° PostgreSQL ΠΈ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° настроитС някакъв ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π΄Π΅Ρ‚Π°ΠΉΠ» ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ производитСлността Π½ΠΈ Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°.

Π”Π°, Ρ‚Π°ΠΊΠΈΠ²Π° Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚, Π½ΠΎ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΅ слоТна систСма. Вя взаимодСйства с всички рСсурси Π½Π° ΡΡŠΡ€Π²Π΅Ρ€Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π° Π΄Π° взаимодСйства ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ. Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈ Π½Π° Oracle Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° хостващата ОБ, Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π² Π°Π½Π΅ΠΊΠ΄ΠΎΡ‚Π° Π·Π° монголския космонавт – Π½Π°Ρ…Ρ€Π°Π½Π΅Ρ‚Π΅ ΠΊΡƒΡ‡Π΅Ρ‚ΠΎ ΠΈ Π½Π΅ ΠΏΠΈΠΏΠ°ΠΉΡ‚Π΅ Π½ΠΈΡ‰ΠΎ. Π”Π°ΠΉΡ‚Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° всички рСсурси, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ сама всичко Ρ‰Π΅ управлява.

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, донякъдС ситуацията с PostgreSQL Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ°Π²Π°. Π Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π΅ Π² Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π±Π°Π·Π°Ρ‚Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ сама Π΄Π° си Π²Π·Π΅ΠΌΠ΅ всичкитС рСсурси, тоСст, някъдС Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π° Π½ΠΈΠ²ΠΎ Linux всичко Ρ‚ΠΎΠ²Π° Π΄Π° сС управлява Ρ€ΡŠΡ‡Π½ΠΎ.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° идСя Π΅ Π΄Π° Π½Π΅ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ само Π΅Π΄ΠΈΠ½ target ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Ρ‚ΡŽΠ½ΠΈΠ½Π³ΡƒΠ²Π°Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ°ΠΌΠ΅Ρ‚, ЦП ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ, Π° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΎΡ‚ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ ΠΈ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ максимално Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ пропускната способност, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€Π΅Π· Π±Π°Π·Π°Ρ‚Π° Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° максимално Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄ΠΎΠ±Ρ€ΠΈ програмисти Π½ΠΈ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…Π°, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π•Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°Π²Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π·Π° пояснСниС Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ Π΅. Има Π±ΡƒΡ„Π΅Ρ€ Π½Π° ОБ Linux, ΠΈΠΌΠ° сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ ΠΈΠΌΠ° сподСлСни Π±ΡƒΡ„Π΅Ρ€ΠΈ Π½Π° PostgreSQL. PostgreSQL, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Oracle, Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ само ΠΏΡ€Π΅Π· Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° ядрото, Ρ‚.Π΅. Π·Π° Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π΅ страница ΠΎΡ‚ диска Π² Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚, тя трябва Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΠΏΡ€Π΅Π· Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° ядрата, Π° послС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΡŠΡ‰Π°Ρ‚Π° ситуация.

Под Ρ‚Π°Π·ΠΈ систСма ТивСят дисковСтС. Набросих Π³ΠΎ ΠΊΠ°Ρ‚ΠΎ дисковС. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° RAID ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΠΈ Ρ‚.Π½.

И Ρ‚ΠΎΠ·ΠΈ Π²Ρ…ΠΎΠ΄-ΠΈΠ·Ρ…ΠΎΠ΄ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ сС случва Ρ‡Ρ€Π΅Π· всичко Ρ‚ΠΎΠ²Π°.

PostgreSQL Π΅ класичСска Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π’Π°ΠΌ Π²ΡŠΡ‚Ρ€Π΅ ΠΈΠΌΠ° страници. И цСлият Π²Ρ…ΠΎΠ΄-ΠΈΠ·Ρ…ΠΎΠ΄ сС случва с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° страници. НиС ΠΏΠΎΠ²Π΄ΠΈΠ³Π°ΠΌΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° със страници. И Π°ΠΊΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ сС Π΅ случило, просто смС Π³ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π»ΠΈ, Ρ‚Π΅ постСпСнно Π·Π°Ρ‚ΡŠΠ²Π°Ρ‚ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ кСш, ΠΎΡ‚ сподСлСнитС Π±ΡƒΡ„Π΅Ρ€ΠΈ ΠΈ ΠΎΡ‚ΠΈΠ²Π°Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° диска.

Ако някъдС Π½Π΅Ρ‰ΠΎ смС Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ, Ρ‚ΠΎ цялата страница сС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ ΠΌΡ€ΡŠΡΠ½Π°. Π’ΡƒΠΊ съм Π³ΠΈ отбСлязал с син цвят. И Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ страница трябва Π΄Π° бъдС синхронизирана с Π±Π»ΠΎΡ‡Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’.Π΅. ΠΊΠΎΠ³Π°Ρ‚ΠΎ я Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΡ€ΡŠΡΠ½Π°, ΠΏΡ€Π°Π²ΠΈΠΌ запис Π² WAL. И Π² някакъв прСкрасСн ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠΉΠ΄Π΅ явлСниСто, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΎ checkpoint. И Π² Ρ‚ΠΎΠ·ΠΈ Π»ΠΎΠ³ бСшС записана информация Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Ρ‚ΠΎΠΉ Π΅ дошъл. И Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всички ΠΌΡ€ΡŠΡΠ½ΠΈ страници, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚ΡƒΠΊ бяха Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² сподСлСнитС Π±ΡƒΡ„Π΅Ρ€ΠΈ, Ρ‚Π΅ сС синхронизираха с диска Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° fsync Ρ‡Ρ€Π΅Π· Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° ядрото.

Π—Π°Ρ‰ΠΎ сС ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°? Ако ΠΈΠ·Π³ΡƒΠ±ΠΈΠΌ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅Ρ‚ΠΎ, няма Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ситуация, ΠΏΡ€ΠΈ която всички Π΄Π°Π½Π½ΠΈ са ΠΈΠ·Ρ‡Π΅Π·Π½Π°Π»ΠΈ. ΠŸΠ΅Ρ€ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Π·Π° която Π½ΠΈ Ρ€Π°Π·ΠΊΠ°Π·Π²Π°Ρ…Π°, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ Π² тСорията Π½Π° Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ – Ρ‚ΠΎΠ²Π° Π΅ свСтлото Π±ΡŠΠ΄Π΅Ρ‰Π΅, към ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ сС стрСмим ΠΈ Π½ΠΈ харСсва, Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° всС ΠΎΡ‰Π΅ ΠΆΠΈΠ²Π΅Π΅ΠΌ Π² минус 20 Π³ΠΎΠ΄ΠΈΠ½ΠΈ. И, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π·Π° всичко Ρ‚ΠΎΠ²Π° трябва Π΄Π° сС слСди.

И Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° максимизиранС Π½Π° пропускната способност Π΅ Π΄Π° нагласим всички Ρ‚Π΅Π·ΠΈ Π΅Ρ‚Π°ΠΏΠΈ, Π·Π° Π΄Π° работят Π±ΡŠΡ€Π·ΠΎ. Π‘ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ – Ρ‚ΠΎΠ²Π° Π΅ основно кСш Π½Π° страницитС. Π’ PostgreSQL ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ select Π½Π΅Ρ‰ΠΎ Ρ‚Π°ΠΌ, Ρ‚ΠΎΠΉ Π²Π·ΠΈΠΌΠ° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ диска. Π’Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π² сподСлСнитС Π±ΡƒΡ„Π΅Ρ€ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, трябва Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚.

Π—Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ всичко Π΄ΠΎΠ±Ρ€Π΅ ΠΈ Π±ΡŠΡ€Π·ΠΎ, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° настроитС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π½Π° всички Π΅Ρ‚Π°ΠΏΠΈ. И трябва Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ балансирано ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π°ΠΊΠΎ Π² някоС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ° дисбаланс, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚, Π½ΠΎ тя Ρ‰Π΅ сС обслуТва с Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° скорост.

И Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ всСки ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π—Π° Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚ Ρ‚Π΅Π·ΠΈ страници ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ, трябва Π΄Π° сС постигнС слСдното:

  • На ΠΏΡŠΡ€Π²ΠΎ място, трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°.
  • На Π²Ρ‚ΠΎΡ€ΠΎ място, ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΡŠΡ‚, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ страницитС ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π½Π° диска, трябва Π΄Π° бъдС ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½.
  • И Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΎ място, трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Ρ…ΡƒΠ±Π°Π²ΠΈ дисковС.

Ако ΠΈΠΌΠ°Ρ‚Π΅ 512 GB ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π² ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ всичко Ρ‚ΠΎΠ²Π° Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΎΡ‚ΠΈΠ²Π° Π½Π° SATA Ρ‚Π²ΡŠΡ€Π΄ диск Π±Π΅Π· никакъв кСш, Ρ‚ΠΎ цСлият ΡΡŠΡ€Π²ΡŠΡ€ с Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π΅ просто Ρ‰Π΅ сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ Π² Ρ‚ΠΈΠΊΠ²Π°, Π° Π² Ρ‚ΠΈΠΊΠ²Π° със SATA интСрфСйс. Π©Π΅ сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ с Ρ‚ΠΎΠ²Π°. И Π½ΠΈΡ‰ΠΎ няма Π΄Π° Π²ΠΈ спаси.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π©ΠΎ сС отнася Π΄ΠΎ ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΈΠΌΠ° Ρ‚Ρ€ΠΈ Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ сСриозно Π΄Π° затруднят ΠΆΠΈΠ²ΠΎΡ‚Π°.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΎΡ‚ тях Π΅ NUMA. NUMA Π΅ концСпция, която Π΅ създадСна, Π·Π° Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ производитСлността. Π’ зависимост ΠΎΡ‚ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π΅Ρ‰Π°. И Π² настоящия ΠΉ Π²ΠΈΠ΄, тя Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π° Π·Π° прилоТСния ΠΊΠ°Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ page cache.shared Π±ΡƒΡ„Π΅Ρ€ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π‘ Π΄Π²Π΅ Π΄ΡƒΠΌΠΈ. Как Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ с NUMA Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄? Π˜ΠΌΠ°Ρ‚Π΅ нСприятни ΡƒΠ΄Π°Ρ€ΠΈ, извСднъТ някой CPU сС ΠΎΠΊΠ°Π·Π²Π° ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π²ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ заявкитС Π² PostgreSQL ΠΈ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Ρ‡Π΅ Π½ΠΈΡ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚Π°ΠΌ няма. Π’Π΅Π·ΠΈ заявки Π½Π΅ трябва Π΄Π° консумират Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ CPU. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π»ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° дълго Π²Ρ€Π΅ΠΌΠ΅. По-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΡ‚ самото Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ° ΠΊΠ°ΠΊ Π΄Π° настроитС NUMA Π·Π° PostgreSQL.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Какво Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС случва? NUMA – Ρ‚ΠΎΠ²Π° Π΅ Non-Uniform Memory Access. Какво ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°? Π˜ΠΌΠ°Ρ‚Π΅ CPU, Π΄ΠΎ Π½Π΅Π³ΠΎ ΠΈΠΌΠ° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° ΠΌΡƒ ΠΏΠ°ΠΌΠ΅Ρ‚. И Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ interconnects ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ²Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ CPU.

Ако стартиратС numactl --hardware, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ голямо количСство информация. Π‘Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ Ρ‚Π°ΠΌ Ρ‰Π΅ ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ distances. Π©Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ†ΠΈΡ„Ρ€ΠΈ – 10-20, Π½Π΅Ρ‰ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π°. Π’Π΅Π·ΠΈ Ρ†ΠΈΡ„Ρ€ΠΈ Π½Π΅ са Π½ΠΈΡ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ освСн Π±Ρ€ΠΎΠΉ Π½Π° Ρ…ΠΎΠΏΠΎΠ²Π΅Ρ‚Π΅, Π·Π° Π΄Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ Π΄Π° я ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π΄ΠΎΠ±Ρ€Π° идСя. Π’ΠΎΠ²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ подобрява производитСлността ΠΏΡ€ΠΈ Ρ€Π΅Π΄ΠΈΡ†Π° натоварвания.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Π΅Π΄ΠΈΠ½ CPU, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° си ΠΏΠ°ΠΌΠ΅Ρ‚, Π° слСд Ρ‚ΠΎΠ²Π° сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ Π΄Ρ€ΡƒΠ³Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΏΡ€Π΅Π· interconnect Π·Π° Π½Π΅Ρ‰ΠΎ. И Π½Π° Ρ‚ΠΎΠ·ΠΈ CPU ΠΏΠΎΠΏΠ°Π΄Π° цСлият Π²ΠΈ page cache Π½Π° PostgreSQL – всичкитС Ρ‚Π΅Π·ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ. Π’ΠΈΠ½Π°Π³ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Π½Π°ΠΉ-лошия случай, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π° CPU Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΡƒΠ» ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΠΌΠ°Π»ΠΊΠΎ. Цялата ΠΏΠ°ΠΌΠ΅Ρ‚, която сС обслуТва, ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· Ρ‚Π΅Π·ΠΈ interconnects. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π° сС Π±Π°Π²Π½ΠΎ ΠΈ Ρ‚ΡŠΠΆΠ½ΠΎ. И ΠΈΠΌΠ°Ρ‚Π΅ процСсор, ΠΊΠΎΠΉΡ‚ΠΎ постоянно Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ възСл. И Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ Π΅ лошо, Π±Π°Π²Π½ΠΎ. Π’ΠΎΠ²Π° Π΅ ситуацията, която Π½Π΅ искатС, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚ΠΎΠ²Π° Π·Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΏΠΎ-правилният Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Linux изцяло Π΄Π° Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠ²ΠΎ сС случва Ρ‚Π°ΠΌ. Π”Π° сС отнася към ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ.

Π—Π°Ρ‰ΠΎ Π΅ Ρ‚Π°ΠΊΠ°? ИзглСТда, Ρ‡Π΅ трябва Π΄Π° Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ. Π’ΠΎΠ²Π° сС случва ΠΏΠΎ Π΅Π΄Π½Π° проста ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°: Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ сС ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° page cache – дСсСтки, стотици Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ.

Ако смС Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ всичко Ρ‚ΠΎΠ²Π° ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°Π»ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ си Ρ‚Π°ΠΌ, ΠΏΠ΅Ρ‡Π°Π»Π±Π°Ρ‚Π° ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° кСша Ρ‰Π΅ бъдС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-голяма, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠ΅Ρ‡Π°Π»Π±Π°Ρ‚Π° ΠΎΡ‚ Ρ…ΠΈΡ‚Ρ€ΠΎΡ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ към ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Ρ‰Π΅ спСчСлим нСсравнимо ΠΏΠΎΠ²Π΅Ρ‡Π΅, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π°ΠΊΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅ Π΄Π° сС Ρ‚Ρ€ΡƒΠ΄ΠΈΠΌ Π·Π° ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Ρ‡Ρ€Π΅Π· NUMA.

Π’Π°ΠΊΠ° Ρ‡Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠΌΠ° Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ свСтлото Π±ΡŠΠ΄Π΅Ρ‰Π΅ Π½Π΅ Π½Π°ΡΡ‚ΡŠΠΏΠΈ ΠΈ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π΅ Π½Π°ΡƒΡ‡ΠΈ сама Π½Π° ΠΊΠΎΠΈ CPU Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ ΠΎΡ‚ къдС ѝ трябва Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ Π½Π΅Ρ‰ΠΎ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, правилният ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΄Π° сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈ NUMA, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ рСстартиранС. Π’ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ случаи ΠΏΠ΅Ρ‡Π°Π»Π±ΠΈΡ‚Π΅ са Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π³ΠΎΠ»Π΅ΠΌΠΈ, Ρ‡Π΅ Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ ΠΊΠ°ΠΊ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ възниква.

Има ΠΈ Π΄Ρ€ΡƒΠ³ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. НиС Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ-чСсто ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈΡ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ΄Π²Π° ΠΏΡ€ΠΈ нас Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°, рСстартиранСто Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π΅ цяло Π΄Π΅Π»ΠΎ. Има бизнСс, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ. А ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с NUMA, Π³ΠΈ ΠΈΠ·ΠΏΠΈΡ‚Π²Π°Ρ‚. Π—Π°Ρ‚ΠΎΠ²Π° сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ½Π²Π°Π·ΠΈΠ²Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ‡Ρ€Π΅Π· рСстарт, Π½ΠΎ Ρ‚ΡƒΠΊ Π²Π½ΠΈΠΌΠ°Π²Π°ΠΉΡ‚Π΅ ΠΈ провСрявайтС, Ρ‡Π΅ Π΅ Π±ΠΈΠ»ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ. Π—Π°Ρ‰ΠΎΡ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΠΏΠΈΡ‚ΡŠΡ‚, ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° NUMA Π² родитСлския процСс Π½Π° PostgreSQL Π΅ Π΄ΠΎΠ±Ρ€Π΅, Π½ΠΎ съвсСм Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сработи. Врябва Π΄Π° провСряватС ΠΈ Π΄Π° Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ‚Π΅, Ρ‡Π΅ Ρ‚ΠΎ наистина Π΅ Π±ΠΈΠ»ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ.

Има Π΄ΠΎΠ±ΡŠΡ€ пост Π½Π° Robert Haas. Π’ΠΎΠΉ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° PostgreSQL. Π•Π΄ΠΈΠ½ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° всичкитС нискоуровнСви части. И Π°ΠΊΠΎ посСтитС Π»ΠΈΠ½ΠΊΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ пост, Ρ‚Π°ΠΌ сС описват няколко ΠΊΠΎΠ»ΠΎΡ€ΠΈΡ‚Π½ΠΈ истории Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ NUMA Π΅ затруднявала ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π°. ΠŸΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅, изслСдвайтС Ρ‡Π΅ΠΊ-листа Π·Π° систСмни администратори, ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° сС настрои Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΄ΠΎΠ±Ρ€Π΅. Π’Π΅Π·ΠΈ настройки трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ записани ΠΈ провСрявани, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай няма Π΄Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅.

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° сС отнася Π·Π° всички настройки, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ говоря. ОбикновСно Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ сС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ master-slave Π·Π° отказоустойчивост. НС забравяйтС Π΄Π° внСсСтС Ρ‚Π΅Π·ΠΈ настройки Π½Π° slave, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² Π΅Π΄ΠΈΠ½ прСкрасСн ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС случи авария ΠΈ Π²ΠΈΠ΅ Ρ‰Π΅ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π½Π° slave, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ станС master.

Π’ Π°Π²Π°Ρ€ΠΈΠΉΠ½Π° ситуация, ΠΊΠΎΠ³Π°Ρ‚ΠΎ всичко Π΅ ΠΌΠ½ΠΎΠ³ΠΎ лошо, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΡŠΡ‚ Π²ΠΈ постоянно звъни ΠΈ Π½Π°Ρ‡Π°Π»Π½ΠΈΠΊΡŠΡ‚ ΠΈΠ΄Π²Π° с голяма ΠΏΠ°Π»ΠΊΠ°, няма Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° мислитС Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. И Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ доста ΠΏΠ»Π°Ρ‡Π΅Π²Π½ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

БлСдващият ΠΌΠΎΠΌΠ΅Π½Ρ‚ – Ρ‚ΠΎΠ²Π° са huge pages. Huge pages Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС тСства ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΈ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ няма смисъл, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΈΠΌΠ° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π³ΠΎ правят. Π’Π΅ лСсно ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС намСрят Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

Π’ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΡΠΌΠΈΡΡŠΠ»ΡŠΡ‚? Π˜ΠΌΠ°Ρ‚Π΅ Π½Π΅ особСно скъп ΡΡŠΡ€Π²ΡŠΡ€ с ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 30 GB. НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ huge pages. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ясна overhead Π·Π° ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚. И Ρ‚ΠΎΠ·ΠΈ overhead Π½Π΅ Π΅ Π½Π°ΠΉ-приятният.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π—Π°Ρ‰ΠΎ Π΅ Ρ‚Π°ΠΊΠ°? Какво сС случва? ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма разпрСдСля ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π°. Π’Π°ΠΊΠ° Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ρ‚Π°ΠΊΠ° Π΅ историчСски установСно. И Π°ΠΊΠΎ Π²Π»Π΅Π·Π΅ΠΌ Π² подробности, ОБ трябва Π΄Π° трансформира Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ адрСси Π² физичСски. И Ρ‚ΠΎΠ·ΠΈ процСс Π½Π΅ Π΅ Π½Π°ΠΉ-простият, Π·Π°Ρ‚ΠΎΠ²Π° ОБ ΠΊΠ΅ΡˆΠΈΡ€Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ опСрация Π² Translation Lookaside Buffer (TLB).

И Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ TLB Π΅ кСш, Π² Ρ‚Π°ΠΊΠ°Π²Π° ситуация Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ всички ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡ€ΠΈΡΡŠΡ‰ΠΈ Π·Π° кСша. На ΠΏΡŠΡ€Π²ΠΎ място, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ тя Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π½Π° ΠΌΠ°Π»ΠΊΠΈ части, Ρ‚ΠΎΠ·ΠΈ Π±ΡƒΡ„Π΅Ρ€ става ΠΌΠ½ΠΎΠ³ΠΎ голям. А Π°ΠΊΠΎ ΠΊΠ΅ΡˆΡŠΡ‚ Π΅ голям, Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π² Π½Π΅Π³ΠΎ става ΠΏΠΎ-Π±Π°Π²Π½ΠΎ. Здравият overhead Π·Π°Π΅ΠΌΠ° пространство, Ρ‚.Π΅. ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ сС потрСбява Π½Π΅ ΠΏΠΎ Π½Π°ΠΉ-добрия Π½Π°Ρ‡ΠΈΠ½. Π’ΠΎΠ²Π° Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°.

Π”Π²Π΅ – ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ нараства ΠΊΠ΅ΡˆΡŠΡ‚ Π² Ρ‚Π°ΠΊΠ°Π²Π° ситуация, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-голяма Π΅ вСроятността Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ кСш пропуски. И СфСктивността Π½Π° Ρ‚ΠΎΠ·ΠΈ кСш Π±ΡŠΡ€Π·ΠΎ спада с нарастващия ΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€. Π—Π°Ρ‚ΠΎΠ²Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ систСми Π΅ измислСн прост ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π’ Linux Ρ‚ΠΎΠΉ ΠΎΡ‚Π΄Π°Π²Π½Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π’ FreeBSD Π½Π΅ΠΎΡ‚Π΄Π°Π²Π½Π° сС появи. Но Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Linux. Π’ΠΎΠ²Π° са huge pages.

И Ρ‚ΡƒΠΊ трябва Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈΠΌ, Ρ‡Π΅ huge pages, ΠΊΠ°Ρ‚ΠΎ идСя, ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ бСшС Π½Π°Π»ΠΎΠΆΠ΅Π½Π° ΠΎΡ‚ общности, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ Oracle ΠΈ IBM, Ρ‚.Π΅. ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ сСриозно обмислиха, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

И ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с PostgreSQL? ΠŸΡŠΡ€Π²ΠΎ, Π² ядрото Π½Π° Linux трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ huge pages.

На Π²Ρ‚ΠΎΡ€ΠΎ място, Ρ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ явно посочСни Ρ‡Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° sysctl – ΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ‚ тях. Числата Ρ‚ΡƒΠΊ са ΠΎΡ‚ някой стар ΡΡŠΡ€Π²ΡŠΡ€. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° изчислитС ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ shared buffers, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ huge pages Π΄Π° сС Π²ΠΏΠΈΡˆΠ°Ρ‚ Ρ‚Π°ΠΌ.

Ако цСлият Π²ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ Π΅ ΠΎΡ‚Π΄Π°Π΄Π΅Π½ Π½Π° PostgreSQL, Ρ‚ΠΎ Π΄ΠΎΠ±Ρ€Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π΅ Π΄Π° ΠΎΡ‚Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ 25 % ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° shared buffers, ΠΈΠ»ΠΈ 75 %, Π°ΠΊΠΎ стС сигурни, Ρ‡Π΅ Π²Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ със сигурност Ρ‰Π΅ сС ΠΏΠΎΠ±Π΅Ρ€Π΅ Π² Ρ‚Π΅Π·ΠΈ 75 %. ΠŸΡŠΡ€Π²Π°Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°. И изчислСтС, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ 256 GB ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ 64 GB Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ shared buffers. Π˜Π·Ρ‡ΠΈΡΠ»Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ с извСстно Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ – Π² ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ трябва Π΄Π° бъдС поставСна Ρ‚Π°Π·ΠΈ Ρ†ΠΈΡ„Ρ€Π°.

Π”ΠΎ вСрсия 9.2 (Π°ΠΊΠΎ Π½Π΅ сС лъТа, ΠΎΡ‚ вСрсия 8.2) моТСшС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° външна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ PostgreSQL с huge pages. А Ρ‚ΠΎΠ²Π° Π²ΠΈΠ½Π°Π³ΠΈ трябва Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ. ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ ядрото Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° разпрСдСля huge pages ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. А Π²Ρ‚ΠΎΡ€ΠΎ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ с тях, трябва Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ° няма Π΄Π° ΠΌΠΎΠΆΠ΅. ПонСТС PostgreSQL разпрСдСля ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π² стил system 5, Ρ‚ΠΎΠ²Π° моТСшС Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° libhugetlbfs β€” Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡŠΠ»Π½ΠΎΡ‚ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°.

Π’ вСрсия 9.3 бСшС ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° производитСлността Π½Π° PostgreSQL ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ сС ΠΎΡ‚ΠΊΠ°Π·Π°Ρ…Π° ΠΎΡ‚ систСмата Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° 5. Всички бяха ΠΌΠ½ΠΎΠ³ΠΎ щастливи, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚Π΅ Π΄Π° стартиратС Π΄Π²Π° инстанса Π½Π° PostgreSQL Π½Π° Π΅Π΄Π½Π° машина, Ρ‚ΠΎΠΉ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΌΡƒ липсва сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚. И ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ трябва Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ sysctl. А Ρ‚Π°ΠΌ Ρ‚Π°ΠΊΡŠΠ² sysctl, Ρ‡Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС рСстартира ΠΈ Ρ‚.Π½. ΠšΠ°Ρ‚ΠΎ цяло, всички бяха Ρ€Π°Π·Π²ΡŠΠ»Π½ΡƒΠ²Π°Π½ΠΈ. Но Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ mmap Π΅ счупило ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° huge pages. ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π½ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ сподСлСни Π±ΡƒΡ„Π΅Ρ€ΠΈ. И силно ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Ρ…ΠΌΠ΅ Π΄Π° Π½Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ Π½Π° 9.3, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚Π°ΠΌ overhead Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° сС усСща Π² Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈ.

Но пък общността ΠΎΠ±ΡŠΡ€Π½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π² 9.4 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚Π°Π·ΠΈ функция. Π’ 9.4 сС Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π² postgresql.conf, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΊΠ»ΡŽΡ‡ΠΈ try, on ΠΈΠ»ΠΈ off.

Try – Π½Π°ΠΉ-бСзопасният ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. ΠŸΡ€ΠΈ стартиранС Π½Π° PostgreSQL, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠΉ разпрСдСля сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚, сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΎΡ‚ huge pages. И Π°ΠΊΠΎ Π½Π΅ успСС, сС Π²Ρ€ΡŠΡ‰Π° към ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. И Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ FreeBSD ΠΈΠ»ΠΈ Solaris, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС try, Ρ‚ΠΎΠ²Π° Π΅ Π²ΠΈΠ½Π°Π³ΠΈ бСзопасно.

Ако Π΅ on, Ρ‚ΠΎΠΉ просто Π½Π΅ стартира, Π°ΠΊΠΎ Π½Π΅ Π΅ успял Π΄Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈ ΠΎΡ‚ huge pages. Π’ΡƒΠΊ Π²Π΅Ρ‡Π΅ – Π½Π° ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΠΎ-ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Но Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ try, провСрявайтС Π΄Π°Π»ΠΈ наистина Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ място Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. Π‘Π΅Π³Π° Ρ‚Π°Π·ΠΈ функция Ρ€Π°Π±ΠΎΡ‚ΠΈ само Π½Π° Linux.

ΠžΡ‰Π΅ Π΅Π΄Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ. Transparent huge pages – Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΎΡ‰Π΅ Π·Π° PostgreSQL. Π’ΠΎΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС възползва ΠΎΡ‚ тях Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ. И ΠΏΡ€ΠΈ Transparent huge pages Π·Π° Ρ‚Π°ΠΊΡŠΠ² workload, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ голям Π±Π»ΠΎΠΊ сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚, прСдимствата сС проявяват само ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ. Ако ΠΈΠΌΠ°Ρ‚Π΅ Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ³Ρ€Π°Π΅ роля. Ако Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΏΠΎ-ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΈ прилоТСния, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ 32, 64, 128, 256 GB ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ‚Π΅ huge pages са Ok, Π° Transparent просто ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°ΠΌΠ΅.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

И послСдната Ρ‚ΠΎΡ‡ΠΊΠ°, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π½Π΅ Π΅ пряко ΡΠ²ΡŠΡ€Π·Π°Π½Π° с производитСлността, Π½ΠΎ ΠΌΠΎΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π° Ρ€Π°Π·Π²Π°Π»ΠΈ ΠΆΠΈΠ²ΠΎΡ‚Π°. Цялата пропускна способност ΠΌΠΎΠΆΠ΅ Π΄Π° пострада сСриозно ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ постоянно swap-Π²Π°.

И Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС ΠΌΠ½ΠΎΠ³ΠΎ нСприятно Π² Ρ€Π΅Π΄ΠΈΡ†Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΈ. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° нСприятност Π΅, Ρ‡Π΅ Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ ядра ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠ°Π»ΠΊΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Ρ‚ΠΎΠ²Π° Π² ΠΏΠΎ-старитС ядра Π½Π° Linux. И Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ доста нСприятно Π΄Π° ΡΡ‚ΡŠΠΏΠ²Π°Ρˆ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с swap, Ρ‚ΠΎΠ²Π° Π½Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° с Π½Π°Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΡ‚ΠΎ пристиганС Π½Π° OOM-killer. И OOM-killer, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ пристигнал Π½Π°Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π΅ ΡƒΠ±ΠΈΠ» PostgreSQL, Π΅ нСприятно. Всички Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‚.Π΅. Π΄ΠΎ послСдния ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π».

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Какво сС случва? Π˜ΠΌΠ°Ρ‚Π΅ голямо количСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅. Но ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ зацикля Π² swap ΠΈ забавя. ИзглСТда, Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Ρ‚Π°ΠΊΠ° сС случва.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

По-Ρ€Π°Π½ΠΎ ΡΡŠΠ²Π΅Ρ‚Π²Π°Ρ…ΠΌΠ΅ vm.swappiness Π΄Π° сС настрои Π½Π° Π½ΡƒΠ»Π°, Ρ‚.Π΅. Π΄Π° сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈ swap. По-Ρ€Π°Π½ΠΎ изглСТдашС, Ρ‡Π΅ 32 GB ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ сподСлСни Π±ΡƒΡ„Π΅Ρ€ΠΈ са ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ количСство. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° swap Π΅ Π΄Π° ΠΈΠΌΠ° място, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΄Π° сС постави Π½Π΅Ρ‰ΠΎ, Π°ΠΊΠΎ сС случи ΠΎΡ‚ΠΊΠ°Π·. И Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π½Π΅ сС изпълнява ΠΌΠ½ΠΎΠ³ΠΎ. А ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ ΠΏΡ€Π°Π²ΠΈΠΌ послС с Ρ‚ΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ? Π’ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π΅ Π·Π°Π΄Π°Ρ‡Π°, ΠΏΡ€ΠΈ която Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ясно Π·Π°Ρ‰ΠΎ swap Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, ΠΎΡ‰Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π² Ρ‚Π°ΠΊΡŠΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€.

Но Π² ΠΏΠΎ-соврСмСннитС, Ρ‚.Π΅. Π² Ρ‚Ρ€Π΅Ρ‚ΠΈΡ‚Π΅ вСрсии Π½Π° ядрото, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ. И Π°ΠΊΠΎ настройтС swap Π½Π° Π½ΡƒΠ»Π°, Ρ‚.Π΅. Π΄Π° Π³ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅, Ρ‚ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ късно, Π΄ΠΎΡ€ΠΈ ΠΈ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° извСстно количСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, OOM-killer Ρ‰Π΅ Π΄ΠΎΠΉΠ΄Π΅, Π·Π° Π΄Π° ΡƒΠ±ΠΈΠ΅ Π½Π°ΠΉ-ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠΉ Ρ‰Π΅ смята, Ρ‡Π΅ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½ΠΈ Π΅ останало ΠΎΡ‰Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΈ Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΡƒΠ±ΠΈΠ΅ Π½Π΅ систСмния процСс, Π° Π½Π΅Ρ‰ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ. Π’ΠΎΠ²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ Ρ‰Π΅ Π΅ интСнзивният ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ postmaster. И слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Π΄ΠΎΠ±Ρ€Π΅, Π°ΠΊΠΎ Π½Π΅ сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ Π±Π°Π·Π°Ρ‚Π°.

Π—Π°Ρ‚ΠΎΠ²Π° сСга ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π΄ΠΎΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ помня, ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ дистрибуции са ΠΎΠΊΠΎΠ»ΠΎ 6, Ρ‚.Π΅. Π² ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ swap Π² зависимост ΠΎΡ‚ количСството останала ΠΏΠ°ΠΌΠ΅Ρ‚. Π‘Π΅Π³Π° ΡΡŠΠ²Π΅Ρ‚Π²Π°ΠΌΠ΅ Π΄Π° настроитС vm.swappiness Π½Π° 1, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π° практичСски Π³ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°, Π½ΠΎ Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈ, ΠΊΠ°Ρ‚ΠΎ Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΎ пристигнал OOM-killer, ΠΊΠΎΠΉΡ‚ΠΎ всичко Ρ‚ΠΎΠ²Π° ΡƒΠ±ΠΈΠ²Π°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Какво слСдва? ΠšΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° производитСлността Π½Π° Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΈ постСпСнно сС насочвамС към дисковСтС, всички Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° сС Ρ…Π²ΡŠΡ€Π»ΡΡ‚ Π² Π³Π»Π°Π²ΠΎΠ±Π»ΡŠΡΠΊΠ°Π½ΠΈΡ†Π°. Π˜ΡΡ‚ΠΈΠ½Π°Ρ‚Π°, Ρ‡Π΅ Π΄ΠΈΡΠΊΡŠΡ‚ Π΅ Π±Π°Π²Π΅Π½, Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π±ΡŠΡ€Π·Π°, Π΅ ΠΏΠΎΠ·Π½Π°Ρ‚Π° Π½Π° всички ΠΎΡ‚ дСтството. И всички знаят, Ρ‡Π΅ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с производитСлността Π½Π° диска.

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с производитСлността Π½Π° PostgreSQL, ΡΠ²ΡŠΡ€Π·Π°Π½ с ΠΏΠΈΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° checkpoints, Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π»ΠΈΠ·Π° ΠΎΡ‚ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π΄ΠΈΡΠΊΡŠΡ‚ Π΅ Π±Π°Π²Π΅Π½. По-скоро, Ρ‚ΠΎΠΉ Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ пропускатСлната способност Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ диска Π½Π΅ Π΅ балансирана. ОсвСн Ρ‚ΠΎΠ²Π°, Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π΅ΠΌΠ΅Π½Π΅Π½ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ мСста. PostgreSQL Π½Π΅ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Π½Π΅ Π΅ настроСна, Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€ΡŠΡ‚ Π½Π΅ Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ ΠΈ ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€ Π΅ Π³Ρ€Π΅ΡˆΠ΅Π½. Π’Π°Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ възниква само Π² случай, Ρ‡Π΅ всичко Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ трябва, Ρ‚.Π΅. ΠΈΠ»ΠΈ няма Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅, ΠΈΠ»ΠΈ настройкитС ΠΈ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€ΡŠΡ‚ са Π΄ΠΎΠ±Ρ€Π΅ ΠΏΠΎΠ΄Π±Ρ€Π°Π½ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Какво прСдставлява Ρ‚ΠΎΠ²Π° ΠΈ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°? ОбикновСно, Ρ…ΠΎΡ€Π°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ работят с PostgreSQL, ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ·ΠΈ процСс. Π©Π΅ поясня. ΠšΠ°ΠΊΡ‚ΠΎ ΠΊΠ°Π·Π°Ρ…, PostgreSQL ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° checkpoints, Π·Π° Π΄Π° запишС Π·Π°ΠΌΡŠΡ€ΡΠ΅Π½ΠΈΡ‚Π΅ странички Π² сподСлСната ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° диска. Ако ΠΈΠΌΠ°ΠΌΠ΅ голям ΠΎΠ±Π΅ΠΌ сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ‚ΠΎΠ³Π°Π²Π° checkpoint Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° ΠΎΠΊΠ°Π·Π²Π° ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ влияниС Π²ΡŠΡ€Ρ…Ρƒ диска, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ записва Ρ‚Π΅Π·ΠΈ странички Ρ‡Ρ€Π΅Π· fsync. Π’Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π² ядрСния Π±ΡƒΡ„Π΅Ρ€ ΠΈ сС записват Π½Π° дисковСтС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° fsync. И Π°ΠΊΠΎ ΠΎΠ±Π΅ΠΌΡŠΡ‚ бъдС ΠΌΠ½ΠΎΠ³ΠΎ голям, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° наблюдавамС нСприятСн Π΅Ρ„Π΅ΠΊΡ‚, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ висока утилизация Π½Π° дисковСтС.

Π’ΡƒΠΊ ΠΈΠΌΠ°ΠΌ Π΄Π²Π΅ изобраТСния. Π‘Π΅Π³Π° Ρ‰Π΅ поясня ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват. Π’ΠΎΠ²Π° са Π΄Π²Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° с Π²Ρ€Π΅ΠΌΠ΅Π²Π° коррСлация. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊ – Π΅ утилизацията Π½Π° диска. Π’ΡƒΠΊ тя достига ΠΏΠΎΡ‡Ρ‚ΠΈ 90 % Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Ако Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π²ΠΈ Π΅ Π½Π° физичСски дисковС с RAID ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΠΈ утилизацията Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ 90 %, Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° са лоши Π½ΠΎΠ²ΠΈΠ½ΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ скоро Ρ‰Π΅ достигнС 100 ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎ-ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‰Π΅ спрат.

Ако ΠΈΠΌΠ°Ρ‚Π΅ дисков масив, Ρ‚ΠΎΠ³Π°Π²Π° историята Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ€Π°Π·Π»ΠΈΡ‡Π½Π°. Π’Π°ΠΌ зависи ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΅ настроСн, какъв Ρ‚ΠΈΠΏ масив Π΅ ΠΈ Ρ‚.Π½.

А ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Ρ‚ΡƒΠΊ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° postgres Π²ΡŽΡ…Π°, която ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΡ‡Π° checkpoint. И Π² Π·Π΅Π»Π΅Π½ΠΎ Ρ‚ΡƒΠΊ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ количСство Π±ΡƒΡ„Π΅Ρ€ΠΈ, Ρ‚Π΅Π·ΠΈ ΠΌΡ€ΡŠΡΠ½ΠΈ странички, Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ са дошли Π² Ρ‚ΠΎΠ·ΠΈ checkpoint Π·Π° синхронизация. И Ρ‚ΠΎΠ²Π° Π΅ основното, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅. Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Ρ‚ΡƒΠΊ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ странички ΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ достигамС Π΄ΠΎ ограничСния, Ρ‚.Π΅. пишСм-пишСм, Ρ‚ΡƒΠΊ Π΅ явно, Ρ‡Π΅ дисковата систСма Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π΅Ρ‚Π°. И Π½Π°ΡˆΠΈΡΡ‚ checkpoint ΠΎΠΊΠ°Π·Π²Π° голямо влияниС Π½Π° диска. Π’ идСалния случай ситуацията трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ-скоро Ρ‚Π°ΠΊΠ°, Ρ‚.Π΅. Ρ‚ΡƒΠΊ Π΅ ΠΈΠΌΠ°Π»ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ записванС. И с настройки ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Ρ‚Π°ΠΊΠ°. Π’.Π΅. утилизацията Π΅ ΠΌΠ°Π»ΠΊΠ°, Π½ΠΎ ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈ Π΄Π° Π΅, Π½ΠΈΠ΅ Ρ‚ΡƒΠΊ пишСм.

Какво трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π·Π° Π΄Π° ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ? Ако IO ΠΏΠΎΠ΄ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΅ спряло, Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всички ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са дошли Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ своитС заявки, Ρ‰Π΅ Ρ‡Π°ΠΊΠ°Ρ‚.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Linux, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π΄ΠΎΠ±Ρ€ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅, ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ стС Π³ΠΎ настроили ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ стС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π»ΠΈ PostgreSQL, Π·Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈ Ρ‚Π΅Π·ΠΈ checkpoints ΠΏΠΎ-рядко ΠΈ Π΄Π° Π³ΠΈ разпрСдСля във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³, Ρ‚ΠΎ Π²Π»ΠΈΠ·Π°Ρ‚Π΅ Π² стандартнитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Debian. Π—Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ дистрибуции Π½Π° Linux Ρ‚Π°ΠΊΡŠΠ² Π΅ сцСнарият: vm.dirty_ratio=20, vm.dirty_background_ratio=10.

Какво ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°? Π‘ ядрото 2.6 сС появи Π΅Π΄ΠΈΠ½ Π΄Π΅ΠΌΠΎΠ½ Π·Π° flushing. Pgflush, Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, ΠΊΠΎΠΉΡ‚ΠΎ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° с Ρ„ΠΎΠ½ΠΎΠ²ΠΎ изтСглянС Π½Π° ΠΌΡ€ΡŠΡΠ½ΠΈ странички ΠΎΡ‚ kernel buffer ΠΈ изтСглянС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° сС изтСглят ΠΌΡ€ΡŠΡΠ½ΠΈ странички, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΡ‚ΠΎ изтСглянС Π²Π΅Ρ‡Π΅ Π½Π΅ ΠΏΠΎΠΌΠ°Π³Π°.

Кога Π½Π°ΡΡ‚ΡŠΠΏΠ²Π° background? ΠšΠΎΠ³Π°Ρ‚ΠΎ 10% ΠΎΡ‚ цялата ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, която Π΅ Π½Π° ΡΡŠΡ€Π²Π΅Ρ€Π°, Π΅ Π·Π°Π΅Ρ‚Π° с ΠΌΡ€ΡŠΡΠ½ΠΈ странички Π² kernel buffer, сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° спСциална функция Π·Π° изписванС във Ρ„ΠΎΠ½Π°. Π—Π°Ρ‰ΠΎ Π΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΎ? Вя ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° си ΠΊΠΎΠ»ΠΊΠΎ странички Π΄Π° ΠΈΠ·Π³ΠΎΡ‚Π²ΠΈ. И, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, изготвя N странички. И Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ‚ΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ заспива. А слСд Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈΠ΄Π²Π° ΠΈ изготвя ΠΎΡ‰Π΅ извСстно количСство странички.

Π’ΠΎΠ²Π° Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ проста история. Π’ΡƒΠΊ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΅ ΠΊΠ°Ρ‚ΠΎ с басСйн, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π² Π΅Π΄Π½Π° Ρ‚Ρ€ΡŠΠ±Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°, Π² Π΄Ρ€ΡƒΠ³Π° Π²Π»ΠΈΠ²Π°. ΠΠ°ΡˆΠΈΡΡ‚ checkpoint Π΅ дошъл ΠΈ Π°ΠΊΠΎ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» ΠΌΠ°Π»ΠΊΠΎ ΠΌΡ€ΡŠΡΠ½ΠΈ странички Π·Π° изтСглянС, постСпСнно ΠΎΡ‚ kernel buffer pgflush всичко Ρ‚ΠΎΠ²Π° Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ сС разсСС.

Ако Ρ‚Π΅Π·ΠΈ ΠΌΡ€ΡŠΡΠ½ΠΈ страници ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Ρ‚ Π΄Π° сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°Ρ‚, Ρ‚Π΅ Ρ‰Π΅ достигнат 20%, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Ρ‰Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚ΠΈΠ·ΠΈΡ€Π° записванСто ΠΈΠΌ Π½Π° диска, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ всичко Ρ‰Π΅ бъдС лошо. Π©Π΅ Π·Π°Π³ΡƒΠ±ΠΈΠΌ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Какъв Π΅ Ρ‚Ρ€ΠΈΠΊΡŠΡ‚? Π’Ρ€ΠΈΠΊΡŠΡ‚ Π΅, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ свят – 20 ΠΈ 10% ΠΎΡ‚ ΠΎΠ±Ρ‰Π°Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° – са напълно Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΈ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° пропускната способност Π½Π° всяка дискова систСма, която ΠΈΠΌΠ°Ρ‚Π΅.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ 128 GB ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚. 12,8 GB ΠΎΡ‚ΠΈΠ²Π°Ρ‚ във Π²Π°ΡˆΠ°Ρ‚Π° дискова систСма. И ΠΊΠ°ΠΊΡŠΠ²Ρ‚ΠΎ ΠΈ кэш Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊΡŠΠ²Ρ‚ΠΎ ΠΈ масив Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅, Ρ‚ΠΎΠΉ няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° понСсС Ρ‚ΠΎΠ²Π° количСство.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Π—Π°Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌΠ΅ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° настроитС Ρ‚Π΅Π·ΠΈ Ρ†ΠΈΡ„Ρ€ΠΈ спрямо Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° вашия RAID ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€. Имам Π²Π΅Π΄Π½Π°Π³Π° Ρ‚ΡƒΠΊ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ° Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π° с 512 MB кэш.

Всичко Π΅ ΠΌΠ½ΠΎΠ³ΠΎ просто. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ vm.dirty_background Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅. И Ρ‚Π΅Π·ΠΈ настройки отмСнят ΠΏΡ€Π΅Π΄Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π²Π΅. Или ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ratio, ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ с Π±Π°ΠΉΡ‚ΠΎΠ²Π΅, Ρ‚ΠΎ Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ работят Ρ‚Π΅Π·ΠΈ с Π±Π°ΠΉΡ‚ΠΎΠ²Π΅. Но Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ съм консултант DBA ΠΈ работя с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, сС старая Π΄Π° прСдвидя всичко ΠΈ Π·Π°Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π΅ Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅, Ρ‚ΠΎ Π΅ Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅. Никой Π½Π΅ Π΅ Π΄Π°Π» Π½ΠΈΠΊΠ°ΠΊΠ²Π° гаранция, Ρ‡Π΅ добрият Π°Π΄ΠΌΠΈΠ½ няма Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, няма Π΄Π° Π³ΠΎ рСстартира ΠΈ Ρ†ΠΈΡ„Ρ€Π°Ρ‚Π° Π΄Π° останС ΡΡŠΡ‰Π°Ρ‚Π°. ΠŸΡ€ΠΎΡΡ‚ΠΎ изчислявайтС Ρ‚Π΅Π·ΠΈ Ρ†ΠΈΡ„Ρ€ΠΈ, Π·Π° Π΄Π° стС сигурни, Ρ‡Π΅ всичко Ρ‰Π΅ Π²Π»Π΅Π·Π΅.

Какво Ρ‰Π΅ сС случи, Π°ΠΊΠΎ Π½Π΅ успССтС Π΄Π° Π²Π»Π΅Π·Π΅Ρ‚Π΅? Написано Π΅, Ρ‡Π΅ всяко flushing Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ спира, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚ΠΎΠ²Π° Π΅ Ρ„ΠΈΠ³ΡƒΡ€Π° Π½Π° Ρ€Π΅Ρ‡Ρ‚Π°. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма ΠΈΠΌΠ° голям ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ – ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΡ€ΡŠΡΠ½ΠΈ страници, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ наистина сС спира Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ IO-Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ‚ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, Ρ‚.Π΅. ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ SQL заявка към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Ρ‚ΠΎ Ρ‡Π°ΠΊΠ°. ВсСки Π²Ρ…ΠΎΠ΄-ΠΈΠ·Ρ…ΠΎΠ΄ към нСя Π΅ Π½Π° Π½Π°ΠΉ-нисък ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π±Π°Π·Π°Ρ‚Π° Π΅ Π·Π°Π΅Ρ‚Π° с checkpoint. И ΠΊΠΎΠ³Π° Ρ‰Π΅ я Π·Π°Π²ΡŠΡ€ΡˆΠΈ Π΅ напълно нСясно. И ΠΊΠΎΠ³Π°Ρ‚ΠΎ достигнСтС Π½Π΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΡ‚ΠΎ, Π½Π΅ Π±Π΅ΠΊΠ³Ρ€Π°ΡƒΠ½Π΄Π½ΠΎΡ‚ΠΎ flushing, Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ цялото Π²ΠΈ IO Π΅ Π·Π°Π΅Ρ‚ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ. И Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½ΠΈΡ‰ΠΎ.

Π’ΡƒΠΊ ΠΈΠΌΠ° ΠΎΡ‰Π΅ Π΄Π²Π° Π²Π°ΠΆΠ½ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ извън Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π·ΠΈ прСзСнтация. НастройкитС трябва Π΄Π° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚ с настройкитС Π² postgresql.conf, Ρ‚.Π΅. настройкитС Π·Π° checkpoints. И Π²Π°ΡˆΠ°Ρ‚Π° дискова систСма трябва Π΄Π° бъдС Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ настроСна. Ако ΠΈΠΌΠ°Ρ‚Π΅ кСш Π½Π° RAID, трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ батСрия. Π₯ΠΎΡ€Π°Ρ‚Π° ΠΊΡƒΠΏΡƒΠ²Π°Ρ‚ RAID с Π΄ΠΎΠ±ΡŠΡ€ кСш Π±Π΅Π· Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ. Ако ΠΈΠΌΠ°Ρ‚Π΅ SSD Π² RAID, Ρ‚Π΅ трябва Π΄Π° са ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ, трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΊΠΎΠ½Π΄Π΅Π½Π·Π°Ρ‚ΠΎΡ€ΠΈ. Π’ΡƒΠΊ Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ чСклист. На Ρ‚ΠΎΠ·ΠΈ Π»ΠΈΠ½ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ моя Π΄ΠΎΠΊΠ»Π°Π΄ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° настроитС производитСлността Π½Π° диска Π² PostgreSQL. Всички Ρ‚Π΅Π·ΠΈ чСклистовС са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Какво Π΄Ρ€ΡƒΠ³ΠΎ Π±ΠΈ ΠΌΠΎΠ³Π»ΠΎ Π΄Π° услоТни ΠΆΠΈΠ²ΠΎΡ‚Π°? Има Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°. Π’Π΅ са относитСлно Π½ΠΎΠ²ΠΈ. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния. И ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° услоТнят ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ, Π°ΠΊΠΎ Π±ΡŠΠ΄Π°Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

Има Π΄Π²Π΅ относитСлно Π½ΠΎΠ²ΠΈ Π½Π΅Ρ‰Π°. Π’Π΅ Π²Π΅Ρ‡Π΅ сС появиха Π² Ρ‚Ρ€Π΅Ρ‚ΠΈΡ‚Π΅ ядра. Π’ΠΎΠ²Π° Π΅ sched_migration_cost Π² наносСкунди ΠΈ sched_autogroup_enabled, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ.

И ΠΊΠ°ΠΊ Ρ‚Π΅ услоТняват ΠΆΠΈΠ²ΠΎΡ‚Π°? Какво Π΅ sched_migration_cost? Linux scheduler ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π° процСс ΠΎΡ‚ Π΅Π΄Π½ΠΎ CPU Π½Π° Π΄Ρ€ΡƒΠ³ΠΎ. И Π·Π° PostgreSQL, ΠΊΠΎΠΉΡ‚ΠΎ изпълнява заявки, миграцията Π½Π° Π΄Ρ€ΡƒΠ³ΠΎ CPU Π΅ напълно нСясна Π·Π°Ρ‰ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°. ΠžΡ‚ Π³Π»Π΅Π΄Π½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ openoffice ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΅ Π΄ΠΎΠ±Ρ€Π΅, Π½ΠΎ Π·Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ – Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ лошо. Π•Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Ρ†Π΅Π½Π° Π½Π° голямо Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ½Π΅ няколко хиляди наносСкунди.

Какво ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Ρ‚ΠΎΠ²Π° Π·Π° scheduler? Π©Π΅ счита, Ρ‡Π΅ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ процСс всС ΠΎΡ‰Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½. Π’.Π΅. Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ дълга транзакция, която ΠΏΡ€Π°Π²ΠΈ Π½Π΅Ρ‰ΠΎ дълго, scheduler Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ Ρ‚ΠΎΠ²Π°. Π©Π΅ счита, Ρ‡Π΅ Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΈΠ·Ρ‚Π΅Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚, Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π° Ρ‚ΠΎΠ·ΠΈ процСс никъдС. Ако Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π΅Ρ‰ΠΎ ΠΏΡ€Π°Π²ΠΈ, Ρ‚ΠΎΠΉ няма Π΄Π° бъдС ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½, Π° Ρ‰Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈ Π½Π° Ρ‚ΠΎΠ²Π° CPU, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΡƒ Π΅ Π±ΠΈΠ»ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π΅Π½ΠΎ. И Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½.

Вторият ΠΌΠΎΠΌΠ΅Π½Ρ‚ – Ρ‚ΠΎΠ²Π° Π΅ autogroup. Има Π΄ΠΎΠ±Ρ€Π° идСя Π·Π° спСцифични Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ натоварвания, ΠΊΠΎΠΈΡ‚ΠΎ нямат ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ към ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ – Π΄Π° сС Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚ процСситС ΠΏΠΎ виртуалния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ са стартирани. Π’ΠΎΠ²Π° Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° PostgreSQL Π΅ многопроцСсорна систСма с prefork, която стартира ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π». Π˜ΠΌΠ°Ρ‚Π΅ lock writer, checkpoint ΠΈ всичкитС Π²ΠΈ клиСнтски заявки Ρ‰Π΅ сС Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ scheduler, Π½Π° Π΅Π΄ΠΈΠ½ CPU. Π’Π΅ Ρ‰Π΅ Ρ‡Π°ΠΊΠ°Ρ‚ Π΄Ρ€ΡƒΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС освободи, Π·Π° Π΄Π° Π½Π΅ си ΠΏΡ€Π΅Ρ‡Π°Ρ‚ ΠΈ Π΄Π° Π·Π°Π΅ΠΌΠ°Ρ‚ процСсора ΠΏΠΎ-дълго. Π’ΠΎΠ²Π° Π΅ история, която ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠ°Π²Π° натоварСност ΠΈ Π·Π°Ρ‚ΠΎΠ²Π° трябва Π΄Π° сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

ΠœΠΎΡΡ‚ ΠΊΠΎΠ»Π΅Π³Π° АлСксСй ЛСсовски ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΡˆΠ΅ тСстовС с прост pgbench, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°ΡˆΠ΅ ΠΏΠΎΡ€ΡΠ΄ΡŠΠΊΠ° Π½Π° migration_cost ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°ΡˆΠ΅ autogroup. Π Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π»ΠΎΡˆΠΎΡ‚ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅ Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ 10 %.Има обсъТданС Π² ΠΈΠΌΠ΅ΠΉΠ» списъка Π½Π° PostgreSQL, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° прСдставят Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ влияят Π½Π° скоростта Π½Π° заявкитС. влияли Π½Π° 50 %.Π’Π°ΠΊΠΈΠ²Π° истории ΠΈΠΌΠ° доста.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

И накрая Π·Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π·Π° пСстСнС Π½Π° СнСргия. Π”ΠΎΠ±Ρ€Π΅ Π΅, Ρ‡Π΅ сСга Linux ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏ. И Ρ‚ΠΎΠΉ ΡƒΠΆ Ρ‰Π΅ пСсти батСрията. Но извСднъТ сС ΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€.

По-Π²ΠΎ Π΄Π°, Π°ΠΊΠΎ Π½Π°Π΅ΠΌΠ°Ρ‚Π΅ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΎΡ‚ някой хостинг, Ρ‚ΠΎ β€žΠ΄ΠΎΠ±Ρ€ΠΎΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅β€œ хостСри Π½Π΅ сС Π³Ρ€ΠΈΠΆΠ°Ρ‚ Π·Π° производитСлността Π²ΠΈ. НиС смС поставСни Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ Π΄Π° сС ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€Π° максимално Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π—Π°Ρ‚ΠΎΠ²Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Ρ€Π΅ΠΆΠΈΠΌ Π½Π° пСстСнС Π½Π° СнСргия Π·Π° Π»Π°ΠΏΡ‚ΠΎΠΏΠΈ.

Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ с Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΏΠΎΠ΄ ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ, Ρ‚ΠΎ Π²Π°ΡˆΠΈΡΡ‚ ΠΈΠ·Π±ΠΎΡ€ Π΅ acpi_cpufreq + performance. Π”ΠΎΡ€ΠΈ с ondemand Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Intel_pstate – Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. И сСга ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ към Π½Π΅Π³ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ ΠΏΠΎ-Π½ΠΎΠ² ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰.

И, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, governor само performance. Ondemand, powersave ΠΈ всичко останало – Π½Π΅ Π΅ Π·Π° вас.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ explain analyze Π² PostgreSQL ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ с няколко ΠΏΠΎΡ€ΡΠ΄ΡŠΠΊΠ°, Π°ΠΊΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ powersave, Π·Π°Ρ‰ΠΎΡ‚ΠΎ практичСски CPU-Ρ‚ΠΎ Π²ΠΈ Ρ‰Π΅ бъдС ΡˆΠ΅Π΄ΡƒΠ»ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎ напълно нСпрСдсказуСм Π½Π°Ρ‡ΠΈΠ½.

Π’Π΅Π·ΠΈ Π½Π΅Ρ‰Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ – Π΄Π°Π»ΠΈ Π½Π΅ са Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС наистина голям ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° подобряванС Π½Π° производитСлността Π½Π° PostgreSQL. Илья КосмодСмьянский

И Π² края Π½Π° ΠΊΡ€Π°ΠΈΡ‰Π°Ρ‚Π° искам Π΄Π° благодаря Π½Π° Π΅ΠΊΠΈΠΏΠ° ΠΎΡ‚ Π½Π°ΡˆΠ°Ρ‚Π° DBA ΠΊΠΎΠΌΠ°Π½Π΄Π° PosgreSQL-Consulting, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Макс Π‘ΠΎΠ³ΡƒΠΊ ΠΈ АлСксСй ЛСсовски, ΠΊΠΎΠΈΡ‚ΠΎ всСки Π΄Π΅Π½ Π½Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°Ρ‚ ΠΎΠΏΠΈΡ‚ Π² Ρ‚Π°Π·ΠΈ сфСра. Π—Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅ Π΄Π° осигурим всичко Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ максимално Π΄ΠΎΠ±Ρ€Π΅. Π’ΡƒΠΊ Π΅ ΠΊΠ°Ρ‚ΠΎ с инструкциитС Π·Π° Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Π° бСзопасност. Всичко Π΅ написано с ΠΊΡ€ΡŠΠ². Всяка ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π³Π°ΠΉΠΊΠΈ Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚Π° Π² процСса Π½Π° възникнала ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°. Π‘ удоволствиС Π³ΠΈ сподСлям с вас.

Вопроси:

Благодаря! Ако, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, компания иска Π΄Π° спСсти ΠΈ Π΄Π° хоства Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€ ΠΈΠ»ΠΈ Π°ΠΊΠΎ компанията слСдва ΠΌΠΎΠ΄Π½Π°Ρ‚Π° тСндСнция Π½Π° микросСрвизнитС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ PostgreSQL сС стартира Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Каква Π΅ особСността? Sysctl Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ влияС Π½Π° ядрото. НС съм Ρ‡ΡƒΠ» sysctl Π΄Π° сС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Има само cgroup ΠΈ Ρ‚Π°ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Π΄ΠΎ част ΠΎΡ‚ рСсурситС. Как Π΄Π° сС справим с Ρ‚ΠΎΠ²Π°? Или, Π°ΠΊΠΎ искатС производитСлност, стартирайтС PostgreSQL Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ физичСски ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π³ΠΎ настройтС.

ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ смС Π½Π° вашия Π²ΡŠΠΏΡ€ΠΎΡ ΠΏΠΎ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°. Ако става Π²ΡŠΠΏΡ€ΠΎΡ Π½Π΅ Π·Π° физичСски ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС настрои ΠΈ Ρ‚.Π½., просто сС отпуснСтС, всичко Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅ ΠΈ Π±Π΅Π· Ρ‚Π΅Π·ΠΈ настройки. Ако ΠΈΠΌΠ°Ρ‚Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅, ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ настройки, Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ към физичСски ΡΡŠΡ€Π²ΡŠΡ€ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° достигнСтС Π΄ΠΎ тях.

Π’ какъв Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚? Ако Ρ‚ΠΎΠ²Π° Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина, вСроятно Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈΠΌΠ°Ρ‚ доста нСконсистСнтна латСнтност Π½Π° диска. Π”ΠΎΡ€ΠΈ Π΄Π° Π΅ Π΄ΠΎΠ±Ρ€Π° пропускната способност Π½Π° дисковСтС, Π΅Π΄Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π΅Π½Π° транзакция ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° въвСТданС-ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅, която Π½Π΅ влияС ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° срСдната пропускна способност, случваща сС ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° checkpoint ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ запис Π² WAL, сСриозно Ρ‰Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€ΠΈ Π±Π°Π·Π°Ρ‚Π°. И Π²ΠΈΠ΅ Ρ‰Π΅ Π³ΠΎ усСтитС ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚Π΅ с Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Ако ΠΈΠΌΠ°Ρ‚Π΅ NGINX Π½Π° ΡΡŠΡ‰ΠΈΡ ΡΡŠΡ€Π²ΡŠΡ€, ΡΡŠΡ‰ΠΎ Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΡΡŠΡ‰ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ΠΎΠΉ Ρ‰Π΅ сС Π±ΠΎΡ€ΠΈ Π·Π° сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚. И няма Π΄Π° достигнСтС Π΄ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, описани Ρ‚ΡƒΠΊ.

Но ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, някои ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ всС ΠΏΠ°ΠΊ Ρ‰Π΅ Π²ΠΈ Π±ΡŠΠ΄Π°Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ. НапримСр, с sysctl Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ dirty_ratio, Π·Π° Π΄Π° Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π±Π΅Π·ΡƒΠΌΠ½ΠΎ – Ρ‚Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅. По Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½, Π²ΠΈΠ΅ Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ взаимодСйствиС с диска. И Ρ‚ΠΎ Ρ‰Π΅ бъдС ΠΏΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° схСма. Π’ΠΎΠ²Π° са ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ…. И във всСки случай Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π³ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅.

А с NUMA ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. VmWare, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅ с NUMA с Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΈ настройки. И Ρ‚ΡƒΠΊ трябва Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅ – ΠΆΠ΅Π»Π΅Π·Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ ΠΈΠ»ΠΈ Π½Π΅.

Имам Π²ΡŠΠΏΡ€ΠΎΡ, ΡΠ²ΡŠΡ€Π·Π°Π½ с Amazon AWS. Π’Π΅ ΠΈΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ настроСни ΠΈΠΌΠΈΠ΄ΠΆΠΈ. Π•Π΄ΠΈΠ½ ΠΎΡ‚ тях сС Π½Π°Ρ€ΠΈΡ‡Π° Amazon RDS. Има Π»ΠΈ Ρ‚Π°ΠΌ някакви пСрсонализирани настройки Π·Π° тяхната ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма?

Π’Π°ΠΌ ΠΈΠΌΠ° настройки, Π½ΠΎ Ρ‚ΠΎΠ²Π° са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ настройки. Π’ΡƒΠΊ настранявамС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π°Π·ΠΈ информация. А Ρ‚Π°ΠΌ ΠΈΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ опрСдСлят накъдС Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅ΠΌ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Ρ‚.Π΅. ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° рСсурси, ΠΊΠΎΠΈΡ‚ΠΎ сСга Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Amazon RDS Ρ‚Π΅Π·ΠΈ рСсурси прикрСпя ΠΈ производитСлността ΠΏΠ°Π΄Π°. Има ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ истории, ΠΊΠ°ΠΊ Ρ…ΠΎΡ€Π°Ρ‚Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° СкспСримСнтират с Ρ‚ΠΎΠ²Π°. Понякога Π΄ΠΎΡ€ΠΈ доста ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. Но Ρ‚ΠΎΠ²Π° няма ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ към настройкитС Π½Π° ОБ. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎ-скоро Ρ…Π°ΠΊΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π»Π°ΠΊΠ°. Π’ΠΎΠ²Π° Π΅ Π΄Ρ€ΡƒΠ³Π° Ρ‚Π΅ΠΌΠ°.

Π—Π°Ρ‰ΠΎ Transparent huge pages Π½Π΅ Π΄Π°Π²Π°Ρ‚ Π΅Ρ„Π΅ΠΊΡ‚ Π² сравнСниС с Huge TLB?

НС Π΄Π°Π²Π°Ρ‚. МоТС Π΄Π° сС обясни ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Ρ‡ΠΈΠ½ΠΈ. Но фактичСски Ρ‚Π΅ просто Π½Π΅ Π΄Π°Π²Π°Ρ‚ Ρ‚Π°ΠΊΡŠΠ² Π΅Ρ„Π΅ΠΊΡ‚. Каква Π΅ историята с PostgreSQL? ΠŸΡ€ΠΈ старта Ρ‚ΠΎΠΉ задСля голямо количСство сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚. Π”Π°Π»ΠΈ Transparent ΠΈΠ»ΠΈ Π½Π΅ transparent – съвсСм Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ. Π€Π°ΠΊΡ‚ΡŠΡ‚, Ρ‡Π΅ Ρ‚Π΅ сС задСлят ΠΏΡ€ΠΈ старта, обяснява всичко. И Π°ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ трябва Π΄Π° сС рСструктурира shared_memory сСгмСнт, Ρ‚ΠΎΠ³Π°Π²Π° Transparent huge pages Ρ‰Π΅ бъдС Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½. Π’ PostgreSQL Ρ‚ΠΎΠΉ просто Π΅ Π·Π°Π΄Π΅Π»Π΅Π½ ΠΊΠ°Ρ‚ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ Π±Π»ΠΎΠΊ ΠΏΡ€ΠΈ старта ΠΈ всичко, ΠΈ слСд Ρ‚ΠΎΠ²Π° Π½ΠΈΡ‰ΠΎ особСно Π½Π΅ сС случва. Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π½ΠΎ ΠΈΠΌΠ° риск ΠΎΡ‚ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° shared_memory, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‰Π΅ сС ΠΏΡ€Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅Ρ‰ΠΎ. PostgreSQL Π½Π΅ Π·Π½Π°Π΅ Π·Π° Ρ‚ΠΎΠ²Π°.

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

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