πŸ”₯ Энтузиаст Π·Π°ΠΌΠ΅Π΄Π»ΠΈΠ» PostgreSQL Π² 42 000 Ρ€Π°Π· с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 32 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² β€” ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ строчки ΠΊΠΎΠ΄Π°

Π’ΠΎ Π΅ΡΡ‚ΡŒ всС сугубо Π·Π° счСт настроСк, Ρ‡Ρ‚ΠΎ впСчатляСт

πŸ”₯ Энтузиаст Π·Π°ΠΌΠ΅Π΄Π»ΠΈΠ» PostgreSQL Π² 42 000 Ρ€Π°Π· с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 32 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² — ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ строчки ΠΊΠΎΠ΄Π°

Один энтузиаст Ρ€Π΅ΡˆΠΈΠ» Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ Π½Π΅ ΠΊΠ°ΠΊ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ, Π° ΠΊΠ°ΠΊ максимально Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ PostgreSQL.

И Π΅ΠΌΡƒ это ΡƒΠ΄Π°Π»ΠΎΡΡŒ: ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΠ°Π»Π° с 7082 Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² сСкунду Π΄ΠΎ 0,016 TPS, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 42 000 Ρ€Π°Π·.

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ½ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π» ΠΆΠ΅Π»Π΅Π·ΠΎ, Π½Π΅ удалял индСксы ΠΈ Π½Π΅ вмСшивался Π² ΠΊΠΎΠ΄ β€” всС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· postgresql.conf.

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ autovacuum

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг β€” ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ кэш: shared_buffers = 2MB. Π­Ρ‚ΠΎ Ρ€Π΅Π·ΠΊΠΎ сниТаСт Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ страниц ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ обращСния ΠΊ диску.

Π—Π°Ρ‚Π΅ΠΌ β€” Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Postgres Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ autovacuum ΠΈ analyze послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ вставки. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² Π»ΠΎΠ³ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ дСсятки ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду. ΠŸΠΎΡ‡Ρ‚ΠΈ Π±Π΅Π· ΠΏΠΎΠ»ΡŒΠ·Ρ‹, Π½ΠΎ с большим I/O.

WAL, ΠΊΠ°ΠΊ Ρƒ Брэндона БандСрсона

ΠŸΠΎΡ‚ΠΎΠΌ Π°Π²Ρ‚ΠΎΡ€ услоТнил систСму Π»ΠΎΠ³ΠΎΠ² WAL: настроил частыС Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Ρ‹ (checkpoint_timeout = 30, max_wal_size = 32MB) ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΠ» Postgres ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ максимально ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ (wal_sync_method = open_datasync, wal_level = logical).

πŸ”₯ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ развСял ΠΌΠΈΡ„Ρ‹ ΠΎ чистом ΠΊΠΎΠ΄Π΅, Ρ‚Ρ€Π΅Π½Π΄Π°Ρ… ΠΈ идСальном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈtproger.ru

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΠ°Π»Π° Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ 1 TPS.

πŸ”₯ Энтузиаст Π·Π°ΠΌΠ΅Π΄Π»ΠΈΠ» PostgreSQL Π² 42 000 Ρ€Π°Π· с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 32 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² — ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ строчки ΠΊΠΎΠ΄Π°

ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ индСксов ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ I/O

Π‘Π΅Π· удалСния самих индСксов Π°Π²Ρ‚ΠΎΡ€ просто сдСлал ΠΈΡ… бСссмыслСнными для ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° запросов: random_page_cost ΠΈ cpu_index_tuple_cost Π±Ρ‹Π»ΠΈ Π·Π°Π΄Ρ€Π°Π½Ρ‹ Π΄ΠΎ 1e300.

Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ, Postgres Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ Π½Π° io_method = worker с io_workers = 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС дисковоС I/O Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Π€ΠΈΠ½Π°Π»

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Postgres смог ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всСго 11 Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π·Π° 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ со 100 ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ.

ЭкспСримСнт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰ΠΈΠΉ, Π½ΠΎ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ: ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, насколько Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Postgres Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ ΠΎΡ‚ «случайного самоуничтоТСния». Но Ссли ΠΎΡ‡Π΅Π½ΡŒ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ β€” ΠΌΠΎΠΆΠ½ΠΎ всС.

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ? ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ:
CyberSafe: ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ