ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ΅ΠΌΡ Π·Π°ΠΏΠΈΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΠ΄Π½ΡΡΡΡ
Π Π΅ΡΡ ΠΏΠΎΠΉΠ΄Π΅Ρ ΠΏΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ TOAST ΠΈ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ . Β«Π ΡΡΠ΅Π΄Π½Π΅ΠΌΒ» ΡΡΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ², Π·Π°ΡΠΎ β Π²ΠΎΠΎΠ±ΡΠ΅ Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π½Π°Ρ ΠΎΠΏΡΡ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π²Π΅ΡΡΠΌΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΡΠΌ Π² ΡΡΠΎΠΌ ΠΏΠ»Π°Π½Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΏΠΎΡΡΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΡΡ append-only Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ
Π΄Π°Π½Π½ΡΡ
. Π Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΠΈΡΡ Π±Π°Π·Ρ ΠΏΠΈΡΠ°ΡΡ Π½Π° Π΄ΠΈΡΠΊ Π²ΠΌΠ΅ΡΡΠΎ 200MB/s Π²Π΄Π²ΠΎΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ β ΠΏΡΠΎΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
ΠΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΠΎ ΠΏΡΠΎΡΠΈΠ»Ρ ΡΠ°Π±ΠΎΡΡ
Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Β«ΡΡΡΡΠ΅Β» Π΄Π°Π½Π½ΡΠ΅ β ΡΠΎ Π΅ΡΡΡ Π²ΠΎΡ ΠΏΡΡΠΌΠΎ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΈΠ· Π·Π°ΠΏΠΈΡΠΈ Π»ΠΎΠ³Π°:
CREATE TABLE rawdata_orig(
pack -- PK
uuid NOT NULL
, recno -- PK
smallint NOT NULL
, dt -- ΠΊΠ»ΡΡ ΡΠ΅ΠΊΡΠΈΠΈ
date
, data -- ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅
text
, PRIMARY KEY(pack, recno)
);
Π’ΠΈΠΏΠΈΡΠ½Π°Ρ ΡΠ°ΠΊΠ°Ρ ΡΠ°Π±Π»ΠΈΡΠΊΠ° (ΡΠΆΠ΅ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎ β ΡΠ°Π±Π»ΠΎΠ½ ΡΠ΅ΠΊΡΠΈΠΈ), Π³Π΄Π΅ ΡΠ°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ β ΡΠ΅ΠΊΡΡ. ΠΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ½ΡΠΉ.
ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Β«ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉΒ» ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² PG Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΡ
, Π½ΠΎ Β«Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉΒ» ΡΠ°Π·ΠΌΠ΅Ρ β ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡΠ΅ΠΌΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (varchar/text/bytea) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
PostgreSQL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ (ΠΎΠ±ΡΡΠ½ΠΎ 8 ΠΠ), ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΆΠ°ΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ»Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΠΆΠΈΠΌΠ°ΡΡΡΡ ΠΈ/ΠΈΠ»ΠΈ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π½Π° Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ²Π΅ΡΠ° Π²Π»ΠΈΡΠ΅Ρ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΠΊ TOAST …
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Ρ Β«ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈΒ» ΠΏΠΎΠ»ΡΠΌΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
TOAST(
chunk_id
integer
, chunk_seq
integer
, chunk_data
bytea
, PRIMARY KEY(chunk_id, chunk_seq)
);
Π’ΠΎ Π΅ΡΡΡ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ Ρ Β«Π±ΠΎΠ»ΡΡΠΈΠΌΒ» Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ data
, ΡΠΎ ΡΠ΅Π°Π»ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ Π΅Π΅ PK, Π½ΠΎ ΠΈ Π² TOAST ΠΈ Π΅Π΅ PK.
Π£ΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ TOAST-Π²Π»ΠΈΡΠ½ΠΈΠ΅
ΠΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ Π½Π°Ρ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΈ Π²Π΅Π»ΠΈΠΊΠΈ, Π² 8KB Π΄ΠΎΠ»ΠΆΠ½Ρ Π±Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ β ΠΊΠ°ΠΊ Π±Ρ Π½Π° ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ?..
Π’ΡΡ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡ Π°ΡΡΠΈΠ±ΡΡ STORAGE
- EXTENDED Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΠΆΠ°ΡΠΈΠ΅, ΡΠ°ΠΊ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅. ΠΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ Ρ TOAST. Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΏΡΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΆΠ°ΡΠΈΠ΅, Π·Π°ΡΠ΅ΠΌ β ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²Π½Π΅ ΡΠ°Π±Π»ΠΈΡΡ, Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° Π²ΡΡ Π΅ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠ°.
- MAIN Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΆΠ°ΡΠΈΠ΅, Π½ΠΎ Π½Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅. (Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ², Π½ΠΎ Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΠΊΡΠ°ΠΉΠ½ΡΡ ΠΌΠ΅ΡΠ°, ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΡΡΠΎΠΊΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π»Π°ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅.)
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΡΠΎ ΡΠΎΠ²Π½ΠΎ ΡΠΎ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ° β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΆΠ°ΡΡ, ΠΈ ΡΠΆ Π΅ΡΠ»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»Π΅Π·Π»ΠΎ β Π²ΡΠ½Π΅ΡΡΠΈ Π² TOAST. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΡΠΌΠΎ Β«Π½Π° Π»Π΅ΡΡΒ», ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;
ΠΠ°ΠΊ ΠΎΡΠ΅Π½ΠΈΡΡ ΡΡΡΠ΅ΠΊΡ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ ΡΠΈΡΡΡ, Π½ΠΎ Π² ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΡΡ Π΄ΠΎΠ»Ρ ΠΌΡ Π·Π°ΠΏΠΈΡΠ°Π»ΠΈ Π² TOAST β ΡΠ΅ΠΌ Π»ΡΡΡΠ΅. ΠΠΎ ΡΡΡ Π΅ΡΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ β ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Ρ Π½Π°Ρ Β«ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉΒ» ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ, ΡΠ΅ΠΌ Β«ΡΠΈΡΠ΅Β» ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΏΠΎΡΠΎΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
Π‘Π΅ΠΊΡΠΈΡ Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:
heap = 37GB (39%)
TOAST = 54GB (57%)
PK = 4GB ( 4%)
Π‘Π΅ΠΊΡΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:
heap = 37GB (67%)
TOAST = 16GB (29%)
PK = 2GB ( 4%)
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΌΡ ΡΡΠ°Π»ΠΈ ΠΏΠΈΡΠ°ΡΡ Π² TOAST Π² 2 ΡΠ°Π·Π° ΡΠ΅ΠΆΠ΅, ΡΡΠΎ ΡΠ°Π·Π³ΡΡΠ·ΠΈΠ»ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΈΡΠΊ, Π½ΠΎ ΠΈ CPU:
ΠΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΌΡ Π΅ΡΠ΅ ΠΈ Β«ΡΠΈΡΠ°ΡΡΒ» Π΄ΠΈΡΠΊ ΡΡΠ°Π»ΠΈ ΠΌΠ΅Π½ΡΡΠ΅, Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Β«ΠΏΠΈΡΠ°ΡΡΒ» β ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈ Π²ΡΡΠ°Π²ΠΊΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ Β«Π²ΡΡΠΈΡΡΠ²Π°ΡΡΒ» Π΅ΡΠ΅ ΠΈ ΡΠ°ΡΡΡ Π΄Π΅ΡΠ΅Π²Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΅Π΅ Π±ΡΠ΄ΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² Π½ΠΈΡ
.
ΠΠΎΠΌΡ Π½Π° PostgreSQL 11 ΠΆΠΈΡΡ Ρ ΠΎΡΠΎΡΠΎ
ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎ PG11 ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Β«ΡΡΠ½ΠΈΠ½Π³Β» TOAST ΠΈ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ°Π» Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ toast_tuple_target
ΠΠΎΠ΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ TOAST ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ TOAST_TUPLE_THRESHOLD Π±Π°ΠΉΡ (ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ 2 ΠΠ±). ΠΠΎΠ΄ TOAST Π±ΡΠ΄Π΅Ρ ΡΠΆΠΈΠΌΠ°ΡΡ ΠΈ/ΠΈΠ»ΠΈ Π²ΡΠ½ΠΎΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ°Π±Π»ΠΈΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ TOAST_TUPLE_TARGET Π±Π°ΠΉΡ (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Π°, ΡΠ°ΠΊ ΠΆΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ 2 ΠΠ±) ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΎΠ±ΡΡΠΌ ΡΡΠ°Π½Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Ρ Π½Π°Ρ ΠΎΠ±ΡΡΠ½ΠΎ Π±ΡΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΡΠΆ Β«ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅Β» ΠΈΠ»ΠΈ ΡΡΠ°Π·Ρ Β«ΠΎΡΠ΅Π½Ρ ΡΠΆ Π΄Π»ΠΈΠ½Π½ΡΠ΅Β», ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ-Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ:
ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π½ΠΎΠ²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΊΠ°Π·Π°Π»ΠΈΡΡ Π½Π° Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π΄ΠΈΡΠΊΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ:
ΠΠ΅ΠΏΠ»ΠΎΡ
ΠΎ! Π‘ΡΠ΅Π΄Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΊ Π΄ΠΈΡΠΊΡ ΡΠΎΠΊΡΠ°ΡΠΈΠ»Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 1.5 ΡΠ°Π·Π°, Π° Β«Π·Π°Π½ΡΡΠΎΡΡΡΒ» Π΄ΠΈΡΠΊΠ° β ΠΏΡΠΎΡΠ΅Π½ΡΠΎΠ² Π½Π° 20! ΠΠΎ ΠΌΠΎΠΆΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π° CPU?
ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Ρ
ΡΠΆΠ΅ ΡΠΎΡΠ½ΠΎ Π½Π΅ ΡΡΠ°Π»ΠΎ. Π₯ΠΎΡΡ, ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΡΠ΄ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΌΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄Π½ΡΡΡ ΡΡΠ΅Π΄Π½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ CPU Π²ΡΡΠ΅ 5%.
ΠΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΡ ΡΠ»Π°Π³Π°Π΅ΠΌΡΡ ΡΡΠΌΠΌΠ°β¦ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ!
ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠΎΠΏΠ΅ΠΉΠΊΠ° ΡΡΠ±Π»Ρ Π±Π΅ΡΠ΅ΠΆΠ΅Ρ, ΠΈ ΠΏΡΠΈ Π½Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠ°Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° 10TB/ΠΌΠ΅ΡΡΡ Π΄Π°ΠΆΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π½Π° Π΄Π°ΡΡ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎΠΉ ΠΏΡΠΎΡΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ²ΠΎΠΈΡ Π΄Π°Π½Π½ΡΡ β ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Β«ΡΠ»ΠΎΠΆΠ΅Π½ΡΒ» ΠΏΠΎΠ»Ρ Π²Π½ΡΡΡΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡ.
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ·-Π·Π°
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΡΠ»ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° 32-Π±ΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ x86 ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° (ΡΠΈΠΏ integer, Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 4 Π±Π°ΠΉΡΠ°) Π±ΡΠ΄ΡΡ Π²ΡΡΠΎΠ²Π½Π΅Π½Ρ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ΅ 4-Π±Π°ΠΉΡΠ½ΡΡ ΡΠ»ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ (ΡΠΈΠΏ double precision, 8 Π±Π°ΠΉΡ). Π Π½Π° 64-Π±ΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ double Π±ΡΠ΄ΡΡ Π²ΡΡΠΎΠ²Π½Π΅Π½Ρ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ΅ 8-Π±Π°ΠΉΡΠ½ΡΡ ΡΠ»ΠΎΠ². ΠΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΠΏΡΠΈΡΠΈΠ½Π° Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠ·-Π·Π° Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎΡ ΡΡΡΠ΅ΠΊΡ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠ΅Π½, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ ΠΏΠΎΠ»Ρ ΡΠΈΠΏΠΎΠ² char(1) ΠΈ integer Π²ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠΊΡ, ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΠΏΡΡΡΡΡ ΠΏΡΠΎΠΏΠ°Π΄Π°ΡΡ 3 Π±Π°ΠΉΡΠ°.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ:
SELECT pg_column_size(ROW(
'0000-0000-0000-0000-0000-0000-0000-0000'::uuid
, 0::smallint
, '2019-01-01'::date
));
-- 48 Π±Π°ΠΉΡ
SELECT pg_column_size(ROW(
'2019-01-01'::date
, '0000-0000-0000-0000-0000-0000-0000-0000'::uuid
, 0::smallint
));
-- 46 Π±Π°ΠΉΡ
ΠΡΠΊΡΠ΄Π° Π½Π°Π±Π΅ΠΆΠ°Π»Π° ΠΏΠ°ΡΠ° Π»ΠΈΡΠ½ΠΈΡ Π±Π°ΠΉΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅? ΠΡΠ΅ ΠΏΡΠΎΡΡΠΎ β 2-Π±Π°ΠΉΡΠΎΠ²ΡΠΉ smallint Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ 4-Π±Π°ΠΉΡΠΎΠ²ΠΎΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ, Π° ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ β Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π½Π΅ΡΠ΅Π³ΠΎ ΠΈ Π½Π΅Π·Π°ΡΠ΅ΠΌ.
Π ΡΠ΅ΠΎΡΠΈΠΈ β Π²ΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»Ρ ΠΊΠ°ΠΊ ΡΠ³ΠΎΠ΄Π½ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡ, ΡΡΡΠΎΡΠ½Π°Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎ 10-15GB.
ΠΡΡ ΠΎΠ΄Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°:
CREATE TABLE public.plan_20190220
(
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: pack uuid NOT NULL,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: recno smallint NOT NULL,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: host uuid,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: ts timestamp with time zone,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: exectime numeric(32,3),
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: duration numeric(32,3),
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: bufint bigint,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: bufmem bigint,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: bufdsk bigint,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: apn uuid,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: ptr uuid,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: dt date,
CONSTRAINT plan_20190220_pkey PRIMARY KEY (pack, recno),
CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),
CONSTRAINT plan_20190220_dt_check CHECK (dt = '2019-02-20'::date)
)
INHERITS (public.plan)
Π‘Π΅ΠΊΡΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΠΌΠ΅Π½Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΡΠΎΠ»Π±ΡΠΎΠ² β ΡΠΎΠ²Π½ΠΎ ΡΠ΅ ΠΆΠ΅ ΠΏΠΎΠ»Ρ, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄ΡΡΠ³ΠΎΠΉ:
CREATE TABLE public.plan_20190221
(
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: dt date NOT NULL,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: ts timestamp with time zone,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: pack uuid NOT NULL,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: recno smallint NOT NULL,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: host uuid,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: apn uuid,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: ptr uuid,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: bufint bigint,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: bufmem bigint,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: bufdsk bigint,
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: exectime numeric(32,3),
-- Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° from table plan: duration numeric(32,3),
CONSTRAINT plan_20190221_pkey PRIMARY KEY (pack, recno),
CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),
CONSTRAINT plan_20190221_dt_check CHECK (dt = '2019-02-21'::date)
)
INHERITS (public.plan)
ΠΠ±ΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Β«ΡΠ°ΠΊΡΠΎΠ²Β» ΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ Π²Π½Π΅ΡΠ½ΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ heap (pg_relation_size
) Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Π½Π΅ΠΉ β ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΠ΅Π΄Π½ΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ Ρ
ΡΠ°Π½ΠΈΠΌΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ:
ΠΠΈΠ½ΡΡ 6% ΠΎΠ±ΡΠ΅ΠΌΠ°, ΠΎΡΠ»ΠΈΡΠ½ΠΎ!
ΠΠΎ Π²ΡΠ΅, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π΄ΡΠΆΠ½ΠΎ β Π²Π΅Π΄Ρ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ
-ΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Π° ΠΏΠΎΡΡΠΎΠΌΡ Β«Π² ΡΠ΅Π»ΠΎΠΌΒ» (pg_total_relation_size
)β¦
β¦ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΈ ΡΡΡ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΠ»ΠΈ 1.5%, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π½ΠΈ ΡΡΡΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΈ Π΄Π°!
ΠΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ»Π΅ΠΉ β Π½Π΅ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅ Ρ
ΠΎΡΠ΅ΡΡΡ Β«ΡΠ°Π·ΡΡΠ²Π°ΡΡΒ» ΡΠΆΠ΅ ΠΏΠΎ ΡΡΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΡΡ (pack, recno)
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ PK Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ.
Π ΡΠ΅Π»ΠΎΠΌ ΠΆΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Β«ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉΒ» ΡΠ°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ»Π΅ΠΉ β ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ Β«ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ½Π°ΡΒ» Π·Π°Π΄Π°ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° ΡΠ²ΠΎΠΈΡ
Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π°ΠΆΠ΅ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Ρ Π½Π°Ρ β ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com