Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Apache Ignite. ΠžΠΏΡ‹Ρ‚ Π‘Π±Π΅Ρ€Π°

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Apache Ignite. ΠžΠΏΡ‹Ρ‚ Π‘Π±Π΅Ρ€Π°ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ остро Π²ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ мСста Π½Π° дисках. Одним ΠΈΠ· способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся сТатиС, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ, Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ сСбС ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ хранСния. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сТатиС Π΄Π°Π½Π½Ρ‹Ρ… Π² Apache Ignite. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ описаны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° способы сТатия Π½Π° дискС. Π”Ρ€ΡƒΠ³ΠΈΠ΅ способы сТатия Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎ сСти, Π² памяти) ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ‚ останутся Π·Π° Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ.

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ persistence Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΡΡˆΠ°Ρ…, Ignite Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π° диск:

  1. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ кэшСй
  2. Π–ΡƒΡ€Π½Π°Π» ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ записи (Write Ahead Log, Π΄Π°Π»Π΅Π΅ просто WAL)

Для сТатия WAL ΡƒΠΆΠ΅ довольно Π΄Π°Π²Π½ΠΎ сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся WAL compaction. Π’ Π½Π΅Π΄Π°Π²Π½ΠΎ Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠ΅ΠΌ Apache Ignite 2.8 появилось Π΅Ρ‰Π΅ Π΄Π²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° дискС, это disk page compression для сТатия содСрТимого кэшСй ΠΈ WAL page snapshot compression для сТатия Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… записСй WAL. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ всСх этих Ρ‚Ρ€Π΅Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… Π½ΠΈΠΆΠ΅.

Disk page compression

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Для Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ остановимся Π½Π° Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ Ignite Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅. Для хранСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ страничная ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π Π°Π·ΠΌΠ΅Ρ€ страницы задаСтся Π½Π° стартС ΡƒΠ·Π»Π° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… этапах, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π²ΠΎΠΉΠΊΠΈ ΠΈ ΠΊΡ€Π°Ρ‚Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² RAM с диска ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ объСм Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ RAM. Π’ случаС Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ мСста Π² RAM для ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы с диска старыС, ΡƒΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ страницы Π±ΡƒΠ΄ΡƒΡ‚ вытСснСны ΠΈΠ· RAM.

На дискС Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅: Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ кэш-Π³Ρ€ΡƒΠΏΠΏΡ‹ создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π² этом Ρ„Π°ΠΉΠ»Π΅, Π² порядкС возрастания индСкса, ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ΄ΡƒΡ‚ страницы. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ страницы содСрТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ кэш-Π³Ρ€ΡƒΠΏΠΏΡ‹, Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΈ индСкс страницы Π² Ρ„Π°ΠΉΠ»Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ страницы ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ оффсСт Π² Ρ„Π°ΠΉΠ»Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± устройствС страничной памяти ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π° Apache Ignite Wiki: Ignite Persistent Store β€” under the hood.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ disk page compression, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ ΠΈΠ· названия, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° страничном ΡƒΡ€ΠΎΠ²Π½Π΅. ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² RAM выполняСтся ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ, Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ компрСссии, Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ сохранСния страниц ΠΈΠ· RAM Π½Π° диск выполняСтся ΠΈΡ… сТатиС.

Но ΡΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ страницу Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ это Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы пСрСстаСт Π±Ρ‹Ρ‚ΡŒ фиксированным, ΠΌΡ‹ ΡƒΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ страницы Π² Ρ„Π°ΠΉΠ» ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

  • ΠœΡ‹ Π½Π΅ смоТСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСкса страницы Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ оффсСт ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½Π° располагаСтся Π² Ρ„Π°ΠΉΠ»Π΅.
  • НС понятно, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ со страницами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π½Π΅ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ свой Ρ€Π°Π·ΠΌΠ΅Ρ€. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, мСсто ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½Π° высвободила ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы увСличиваСтся, для Π½Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½ΠΎΠ²ΠΎΠ΅ мСсто Π² Ρ„Π°ΠΉΠ»Π΅.
  • Если страница смСстится Π½Π° Π½Π΅ ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы число Π±Π°ΠΉΡ‚, Ρ‚ΠΎ для Π΅Π΅ чтСния ΠΈΠ»ΠΈ записи, потрСбуСтся Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы большС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° своСм ΡƒΡ€ΠΎΠ²Π½Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ disk page compression Π² Apache Ignite ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ sparse Ρ„Π°ΠΉΠ»Ρ‹. Sparse (Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹ΠΉ) Ρ„Π°ΠΉΠ» β€” это Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ нулями Ρ€Π΅Π³ΠΈΠΎΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Β«Π΄Ρ‹Ρ€Ρ‹Β». ΠŸΡ€ΠΈ этом Π±Π»ΠΎΠΊΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы для хранСния этих Π΄Ρ‹Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ достигаСтся экономия мСста Π½Π° дискС.

Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Ρ‹Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ большС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π΅Π½ Π±Π»ΠΎΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ‡Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы Π° Apache Ignite: Ρ‡Ρ‚ΠΎΠ±Ρ‹ сТатиС Π΄Π°Π²Π°Π»ΠΎ Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ эффСкт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы Π±Ρ‹Π» строго большС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π±Π»ΠΎΠΊΠ°, Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смоТСм ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ СдинствСнный Π±Π»ΠΎΠΊ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ сТатая страница Π·Π°Π½ΠΈΠΌΠ°Π»Π° 0 Π±Π°ΠΉΡ‚. Если ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ 2-Ρ… Π»ΠΈΠ±ΠΎ 4-Ρ… Π±Π»ΠΎΠΊΠΎΠ², ΠΌΡ‹ ΡƒΠΆΠ΅ смоТСм Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ Ссли наша страница соТмСтся ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄ΠΎ 50% Π»ΠΈΠ±ΠΎ Π΄ΠΎ 75% соотвСтствСнно.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ описаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°: ΠŸΡ€ΠΈ записи страницы Π½Π° диск, производится ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΆΠ°Ρ‚ΡŒ страницу. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатой страницы позволяСт Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΎΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ‚ΠΎ страница записываСтся Π² сТатом Π²ΠΈΠ΄Π΅, Π½Π° мСстС высвобоТдСнных Π±Π»ΠΎΠΊΠΎΠ² пробиваСтся Β«Π΄Ρ‹Ρ€ΠΊΠ°Β» (выполняСтся систСмный Π²Ρ‹Π·ΠΎΠ² fallocate() с Ρ„Π»Π°Π³ΠΎΠΌ Β«punch holeΒ»). Если Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатой страницы Π½Π΅ позволяСт Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈ, страница сохраняСтся ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ, Π² нСсТатом Π²ΠΈΠ΄Π΅. ВсС оффсСты страниц ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π±Π΅Π· компрСссии, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ индСкса страницы Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы. Никакой Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ страниц своими силами Π½Π΅ трСбуСтся. ΠžΡ„Ρ„ΡΠ΅Ρ‚Ρ‹ страниц ΠΊΠ°ΠΊ ΠΈ Π±Π΅Π· компрСссии ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±Π»ΠΎΠΊΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Apache Ignite. ΠžΠΏΡ‹Ρ‚ Π‘Π±Π΅Ρ€Π°

Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ignite ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со sparse Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ ОБ Linux, соотвСтствСнно disk page compression ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании Ignite Π½Π° этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС.

Алгоритмы сТатия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для disk page compression: ZSTD, LZ4, Snappy. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ (SKIP_GARBAGE), ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ выкидываСтся Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² страницС мСсто Π±Π΅Π· примСнСния компрСссии Π½Π° ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° CPU ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с пСрСчислСнными Ρ€Π°Π½Π΅Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ.

ВлияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

К соТалСнию фактичСского Π·Π°ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… стСндах я Π½Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас Π½Π΅ планируСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ€Π°ΡΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ тСорСтичСски, Π³Π΄Π΅ ΠΌΡ‹ потСряСм, Π° Π³Π΄Π΅ Π²Ρ‹ΠΈΠ³Ρ€Π°Π΅ΠΌ.

Для этого Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ выполняСтся Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись страниц ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ:

  • ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния сначала выполняСтся Π΅Π΅ поиск Π² RAM, Ссли поиск Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ страница подгруТаСтся Π² RAM c диска Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.
  • ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, страница Π² RAM помСчаСтся ΠΊΠ°ΠΊ грязная, ΠΏΡ€ΠΈ этом физичСскоС сохранСниС страницы Π½Π° диск сразу Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌ запись Π½Π΅ происходит. ВсС грязныС страницы ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° диск ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² процСссС Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, влияниС Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния:

  • ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ (disk IO), Π·Π° счСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ (CPU), Π·Π° счСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со sparse Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ здСсь нСявно появятся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ IO ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для сохранСния Π±ΠΎΠ»Π΅Π΅ слоТной структуры sparse Ρ„Π°ΠΉΠ»Π° (со всСми дСталями Ρ€Π°Π±ΠΎΡ‚Ρ‹ sparse Ρ„Π°ΠΉΠ»ΠΎΠ² я, ΠΊ соТалСнию, Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ).
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ (CPU), Π·Π° счСт нСобходимости дСкомпрСссии страниц.
  • Влияния Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π½Π΅Ρ‚.
  • ВлияниС Π½Π° процСсс Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° (здСсь всС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ опСрациям чтСния):
  • ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ (disk IO), Π·Π° счСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства записанных Π±Π»ΠΎΠΊΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ (CPU, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ disk IO), Π·Π° счСт Ρ€Π°Π±ΠΎΡ‚Ρ‹ со sparse Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ (CPU), Π·Π° счСт нСобходимости сТатия страниц.

Какая Ρ‡Π°ΡˆΠ° вСсов пСрСвСсит? Π­Ρ‚ΠΎ всС ΠΎΡ‡Π΅Π½ΡŒ зависит ΠΎΡ‚ окруТСния, Π½ΠΎ я склоняюсь ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ disk page compression ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ скорСС ΠΊ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ систСм. Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ тСсты Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π‘Π£Π‘Π” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ со sparse Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ сТатии.

Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, минимальная вСрсия Apache Ignite, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ disk page compression: 2.8 ΠΈ поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опСрационная систСма Linux. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ настройка выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Π’ class-path Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ignite-compression. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ находится Π² дистрибутивС Apache Ignite Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ libs/optional ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² class-path. МоТно просто пСрСнСсти Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Π²Π΅Ρ€Ρ… Π² libs ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ запускС Ρ‡Π΅Ρ€Π΅Π· ignite.sh ΠΎΠ½ автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½.
  • Persistence Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ (Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· DataRegionConfiguration.setPersistenceEnabled(true)).
  • Π Π°Π·ΠΌΠ΅Ρ€ страницы Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ большС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы (Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DataStorageConfiguration.setPageSize() ).
  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ кэша, Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ сТатия ΠΈ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сТатия (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ CacheConfiguration.setDiskPageCompression() , CacheConfiguration.setDiskPageCompressionLevel()).

WAL compaction

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ WAL ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½? ΠžΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ: это ΠΆΡƒΡ€Π½Π°Π» Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ всС события ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Π² ΠΈΡ‚ΠΎΠ³Π΅ страничноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. НуТСн ΠΎΠ½ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для возмоТности восстановлСния Π² случаС падСния. Π›ΡŽΠ±Π°Ρ опСрация ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π΄ΠΎΠ»ΠΆΠ½Π° сначала Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ событиС Π² WAL, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС падСния ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΏΠΎ ΠΆΡƒΡ€Π½Π°Π»Ρƒ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, Π΄Π°ΠΆΠ΅ Ссли эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ успСли отразится Π² страничном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° дискС (Π²Ρ‹ΡˆΠ΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ описано, Ρ‡Ρ‚ΠΎ фактичСская запись Π² страничноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ выполняСтся Π² процСссС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Β«Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Β» с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°ΠΏΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ).

Записи Π² WAL дСлятся Π½Π° логичСскиС ΠΈ физичСскиС. ЛогичСскиС β€” это сами ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния. ЀизичСскиС β€” ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ измСнСния страниц Π² страничном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Если логичСскиС записи ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π΅Ρ‰Π΅ для ΠΊΠ°ΠΊΠΈΡ…-Π½ΠΈΠ±ΡƒΠ΄ΡŒ случаСв, физичСскиС записи Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для восстановлСния Π² случаС падСния ΠΈ Π½ΡƒΠΆΠ½Ρ‹ записи Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСго ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π°. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² подробности ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, Π½ΠΎ ΠΊΠΎΠΌΡƒ интСрСсно, ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΡƒΠΆΠ΅ упомянутой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π° Apache Ignite Wiki: Ignite Persistent Store β€” under the hood.

На ΠΎΠ΄Π½Ρƒ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ запись часто приходится нСсколько физичСских записСй. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ΄Π½Π° опСрация put Π² кэш Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ нСсколько страниц Π² страничной памяти (страницу с самими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, страницы с индСксами, страницы с free-list’Π°ΠΌΠΈ). На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… синтСтичСских тСстах Ρƒ мСня ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ физичСскиС записи Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π΄ΠΎ 90% объСма WAL Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈ этом Π½ΡƒΠΆΠ½Ρ‹ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π°ΠΌΠΈ β€” 3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹). Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π±Ρ‹Π»ΠΎ-Π±Ρ‹ ΠΎΡ‚ этих Π΄Π°Π½Π½Ρ‹Ρ… послС ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΈΡ… Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·Π±Π°Π²Π»ΡΡ‚ΡŒΡΡ. ИмСнно это ΠΈ выполняСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ WAL compaction, избавляСтся ΠΎΡ‚ физичСских записСй ΠΈ сТимаСт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ zip ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ логичСскиС записи, ΠΏΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (ΠΈΠ½ΠΎΠ³Π΄Π° Π² дСсятки Ρ€Π°Π·).

ЀизичСски WAL состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСгмСнтов (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 10) фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 64Мб), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΡ€ΡƒΠ³Ρƒ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сСгмСнт заполняСтся, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ назначаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π½ΠΈΠΌ сСгмСнт, Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ сСгмСнт копируСтся Π² Π°Ρ€Ρ…ΠΈΠ² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. WAL compaction ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹ΠΌΠΈ сСгмСнтами. Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΎΠ½ отслСТиваСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ сТатиС ΠΏΠΎ Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹ΠΌ сСгмСнтам, физичСскиС записи для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Apache Ignite. ΠžΠΏΡ‹Ρ‚ Π‘Π±Π΅Ρ€Π°

ВлияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ WAL compaction Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Ρ‚ΠΎ прямого влияния Π½Π° выполняСмыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ. Но ΠΎΠ½ всС Ρ‚Π°ΠΊΠΈ Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΠΎΠ½ΠΎΠ²ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° CPU (сТатиС) ΠΈ диск (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ WAL сСгмСнта ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° ΠΈ запись сТатых сСгмСнтов), поэтому Ссли систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Π΅Π»Π΅ возмоТностСй, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ WAL compaction ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства WalCompactionEnabled Π² DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)). Π’Π°ΠΊΠΆΠ΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DataStorageConfiguration.setWalCompactionLevel() ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия, Ссли Π½Π΅ устраиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΈΡŽ (BEST_SPEED).

WAL page snapshot compression

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π Π°Π½Π΅Π΅ ΡƒΠΆΠ΅ выяснили, Ρ‡Ρ‚ΠΎ Π² WAL записи дСлятся Π½Π° логичСскиС ΠΈ физичСскиС. На ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы Π² страничной памяти формируСтся физичСская запись WAL. ЀизичСскиС записи Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚ΠΎΠΆΠ΅ дСлятся Π½Π° 2 ΠΏΠΎΠ΄Π²ΠΈΠ΄Π°: page snapshot record ΠΈ delta record. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ мСняСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° страницС ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Π΅Π΅ ΠΈΠ· чистого состояния Π² грязноС, Π² WAL сохраняСтся полная копия этой страницы (page snapshot record β€” ΡΠ½ΡΠΏΡˆΠΎΡ‚ страницы). Π”Π°ΠΆΠ΅ Ссли ΠΌΡ‹ помСняли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚ Π² WAL сохранится запись Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° страницы. Если ΠΆΠ΅ ΠΌΡ‹ мСняСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° ΡƒΠΆΠ΅ грязной страницС Ρ‚ΠΎ Π² WAL формируСтся delta record, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ состояниСм страницы, Π½ΠΎ Π½Π΅ вся страница Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сброс состояния страниц с грязного Π½Π° чистый выполняСтся Π² процСссС Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π°, сразу послС Π½Π°Ρ‡Π°Π»Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° практичСски всС физичСскиС записи Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΡΠ½ΡΠΏΡˆΠΎΡ‚ΠΎΠ² страниц (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС страницы сразу послС Π½Π°Ρ‡Π°Π»Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° чистыС), Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ приблиТСния ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Ρƒ доля delta record Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ расти ΠΈ ΠΎΠΏΡΡ‚ΡŒ сбрасываСтся Π½Π° Π½Π°Ρ‡Π°Π»Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π°. Π—Π°ΠΌΠ΅Ρ€Ρ‹ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… синтСтичСских тСстах ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ доля ΡΠ½ΡΠΏΡˆΠΎΡ‚ΠΎΠ² страниц Π² ΠΎΠ±Ρ‰Π΅ΠΌ объСмС физичСских записСй достигаСт 90%.

ИдСя WAL page snapshot compression Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΡΠ½ΡΠΏΡˆΠΎΡ‚Ρ‹ страниц ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ инструмСнт для сТатия страниц (см. disk page compression). ΠŸΡ€ΠΈ этом Π² WAL записи ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² append-only Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π½Π΅Ρ‚ нСобходимости привязки записСй ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌ Π±Π»ΠΎΠΊΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, поэтому здСсь, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° disk page compression, Π½Π°ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ sparse Ρ„Π°ΠΉΠ»Ρ‹, соотвСтствСнно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ОБ Linux. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°ΠΌ ΡƒΠΆΠ΅ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ сильно ΠΌΡ‹ смогли ΡΠΆΠ°Ρ‚ΡŒ страницу. Π”Π°ΠΆΠ΅ Ссли ΠΌΡ‹ высвободили 1 Π±Π°ΠΉΡ‚ это ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² WAL сТатыС Π΄Π°Π½Π½Ρ‹Π΅, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ disk page compression, Π³Π΄Π΅ ΠΌΡ‹ сохраняСм ΡΠΆΠ°Ρ‚ΡƒΡŽ страницу Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли освободили Π±ΠΎΠ»Π΅Π΅ 1 Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ β€” Ρ…ΠΎΡ€ΠΎΡˆΠΎ сТимаСмыС Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡ… доля Π² ΠΎΠ±Ρ‰Π΅ΠΌ объСмС WAL ΠΎΡ‡Π΅Π½ΡŒ высока, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ мСняя Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ WAL Ρ„Π°ΠΉΠ»Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сокращСниС Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ числС логичСских записСй ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ совмСстимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсны логичСскиС записи, ΠΏΡ€ΠΈ этом Π½Π΅ принСсло Π±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ объСма Ρ„Π°ΠΉΠ»Π°.

Как ΠΈ для disk page compression для WAL page snapshot compression ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сТатия ZSTD, LZ4, Snappy, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΆΠΈΠΌ SKIP_GARBAGE.

ВлияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Как Π½Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ WAL page snapshot compression влияСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡΡ‚Ρ€Π°Π½ΠΈΡ‡Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Ρ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΡΡˆΠ°Ρ…. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· WAL физичСских записСй происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎ, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ поднятия ΡƒΠ·Π»Π° послС падСния (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС падСния Π² процСссС Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π°).

На ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ это влияСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ эффСкт (CPU) Π·Π° счСт нСобходимости ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ страницу ΠΏΠ΅Ρ€Π΅Π΄ записью Π½Π° диск ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ эффСкт (disk IO) Π·Π° счСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства записываСмых Π΄Π°Π½Π½Ρ‹Ρ…. БоотвСтствСнно, здСсь всС просто, Ссли ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы упираСтся Π² CPU, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΡŽ, Ссли Π² дисковый Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ прирост.

КосвСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° WAL Ρ‚Π°ΠΊΠΆΠ΅ влияСт (ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΊΠΈΠ΄Ρ‹Π²Π°ΡŽΡ‚ Π² Π°Ρ€Ρ…ΠΈΠ² сСгмСнты WAL ΠΈ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ WAL compaction.

Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ тСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° нашСм ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π½Π° синтСтичСских Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ нСбольшой прирост (Π½Π° 10%-15% вырос throughput, Π½Π° 10%-15% ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ latency).

Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ

Минимальная вСрсия Apache Ignite: 2.8. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ настройка выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Π’ class-path Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ignite-compression. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ находится Π² дистрибутивС Apache Ignite Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ libs/optional ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² class-path. МоТно просто пСрСнСсти Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Π²Π΅Ρ€Ρ… Π² libs ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ запускС Ρ‡Π΅Ρ€Π΅Π· ignite.sh ΠΎΠ½ автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½.
  • Persistence Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ (Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· DataRegionConfiguration.setPersistenceEnabled(true)).
  • Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ Ρ€Π΅ΠΆΠΈΠΌ сТатия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DataStorageConfiguration.setWalPageCompression(), ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сТатиС ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ (Ρ€Π΅ΠΆΠΈΠΌ DISABLED).
  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DataStorageConfiguration.setWalPageCompression(), допустимыС значСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² смотри Π² javadoc ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

РассмотрСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ сТатия Π΄Π°Π½Π½Ρ‹Ρ… Π² Apache Ignite ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ допустимы ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ. ПониманиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ насколько ΠΎΠ½ΠΈ подходят ΠΏΠΎΠ΄ ваши Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° вашСм ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ‡Π΅ΠΌ придСтся ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΡ… использовании. Disk page compression ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для сТатия основного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия. WAL page snapshot compression даст ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия ΡƒΠΆΠ΅ WAL Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΡ€ΠΈ этом вСроятнСС всСго Π΄Π°ΠΆΠ΅ повысит ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. WAL compaction Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ повлияСт, Π½ΠΎ максимально сократит Ρ€Π°Π·ΠΌΠ΅Ρ€ WAL Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π° счСт удалСния физичСских записСй.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ