Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a véglegesítési időbélyeg-gyorsítótárhoz használt dedikált pufferkészlet méretét. Adja meg a 0 értéket, ha ezt az értéket a shared_buffers törtrészeként kell meghatározni. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 0-131072 |
| Paraméter típusa | statikus |
| Documentation | commit_timestamp_buffers |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
hash_mem_multiplier (hash-memória-szorzó)
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kivonattáblákhoz használandó "work_mem" többszöröse. |
| Adattípus | Numerikus |
| Alapértelmezett érték | 2 |
| Engedélyezett értékek | 1-1000 |
| Paraméter típusa | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Hatalmas oldalak használata Linuxon vagy Windowson. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
huge_page_size
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kérendő hatalmas oldal mérete. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az adatolvasások és írások méretének korlátozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | 16 |
| Engedélyezett értékek | 1-128 |
| Paraméter típusa | dynamic |
| Documentation | io_combine_limit |
io_max_combine_limit
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az io_combine_limit korlátozása kiszolgálószinten. |
| Adattípus | egész szám |
| Alapértelmezett érték | 16 |
| Engedélyezett értékek | 1-128 |
| Paraméter típusa | dynamic |
| Documentation | io_max_combine_limit |
io_max_egyidejűség
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az egy folyamat által egyidejűleg végrehajtható IOS-ek maximális száma. |
| Adattípus | egész szám |
| Alapértelmezett érték | 64 |
| Engedélyezett értékek | -1-1024 |
| Paraméter típusa | statikus |
| Documentation | io_max_concurrency |
io_method
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja az aszinkron I/O végrehajtásának módját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | worker |
| Engedélyezett értékek | worker,sync |
| Paraméter típusa | statikus |
| Documentation | io_method |
io_workers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az I/O feldolgozói folyamatok száma io_method=feldolgozó esetén. |
| Adattípus | egész szám |
| Alapértelmezett érték | 3 |
| Engedélyezett értékek | 1-32 |
| Paraméter típusa | dynamic |
| Documentation | io_workers |
logical_decoding_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a logikai dekódoláshoz használandó memória maximális méretét. Ennyi memóriát használhatnak az egyes belső átrendezési pufferek, mielőtt a lemezre kerülnek. |
| Adattípus | egész szám |
| Alapértelmezett érték | 65536 |
| Engedélyezett értékek | 64-2147483647 |
| Paraméter típusa | dynamic |
| Documentation | logical_decoding_work_mem |
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a karbantartási műveletekhez használandó memória maximális méretét. Ide tartoznak az olyan műveletek, mint a VACUUM és a CREATE INDEX. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az indításkor fenntartott dinamikus megosztott memória mennyisége. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a MultiXact-taggyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 32 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a MultiXact eltolási gyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 16 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a LISTEN/NOTIFY üzenetgyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 16 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | notify_buffers |
szerializálható_pufferek
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a szerializálható tranzakciós gyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 32 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | serializable_buffers |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a fő megosztott memóriaterülethez használt megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | mmap |
| Engedélyezett értékek | mmap |
| Paraméter típusa | csak olvasható |
| Documentation | megosztott_memória_típus |
subtransaction_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az altranszmitálási gyorsítótárhoz használt dedikált pufferkészlet méretét. Adja meg a 0 értéket, ha ezt az értéket a shared_buffers törtrészeként kell meghatározni. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 0-131072 |
| Paraméter típusa | statikus |
| Documentation | subtransaction_buffers |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes munkamenetek által használt ideiglenes pufferek maximális számát. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
transaction_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a dedikált pufferkészlet méretét a tranzakciós állapot gyorsítótárhoz. Adja meg a 0 értéket, ha ezt az értéket a shared_buffers törtrészeként kell meghatározni. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 0-131072 |
| Paraméter típusa | statikus |
| Documentation | transaction_buffers |
vacuum_buffer_usage_limit
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a pufferkészlet méretét a VACUUM, az ANALYZE és az autovacuum esetében. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 0-16777216 |
| Paraméter típusa | dynamic |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a lekérdezési munkaterületekhez használandó memória maximális méretét. Ennyi memóriát használhatnak az egyes belső rendezési műveletek és kivonattáblák, mielőtt ideiglenes lemezfájlokra váltanak. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a véglegesítési időbélyeg-gyorsítótárhoz használt dedikált pufferkészlet méretét. Adja meg a 0 értéket, ha ezt az értéket a shared_buffers törtrészeként kell meghatározni. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 0-131072 |
| Paraméter típusa | statikus |
| Documentation | commit_timestamp_buffers |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
hash_mem_multiplier (hash-memória-szorzó)
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kivonattáblákhoz használandó "work_mem" többszöröse. |
| Adattípus | Numerikus |
| Alapértelmezett érték | 2 |
| Engedélyezett értékek | 1-1000 |
| Paraméter típusa | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Hatalmas oldalak használata Linuxon vagy Windowson. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
huge_page_size
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kérendő hatalmas oldal mérete. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az adatolvasások és írások méretének korlátozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | 16 |
| Engedélyezett értékek | 16 |
| Paraméter típusa | csak olvasható |
| Documentation | io_combine_limit |
logical_decoding_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a logikai dekódoláshoz használandó memória maximális méretét. Ennyi memóriát használhatnak az egyes belső átrendezési pufferek, mielőtt a lemezre kerülnek. |
| Adattípus | egész szám |
| Alapértelmezett érték | 65536 |
| Engedélyezett értékek | 64-2147483647 |
| Paraméter típusa | dynamic |
| Documentation | logical_decoding_work_mem |
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a karbantartási műveletekhez használandó memória maximális méretét. Ide tartoznak az olyan műveletek, mint a VACUUM és a CREATE INDEX. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az indításkor fenntartott dinamikus megosztott memória mennyisége. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a MultiXact-taggyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 32 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a MultiXact eltolási gyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 16 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a LISTEN/NOTIFY üzenetgyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 16 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | notify_buffers |
szerializálható_pufferek
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a szerializálható tranzakciós gyorsítótárhoz használt dedikált pufferkészlet méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 32 |
| Engedélyezett értékek | 16-131072 |
| Paraméter típusa | statikus |
| Documentation | serializable_buffers |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a fő megosztott memóriaterülethez használt megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | mmap |
| Engedélyezett értékek | mmap |
| Paraméter típusa | csak olvasható |
| Documentation | megosztott_memória_típus |
subtransaction_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az altranszmitálási gyorsítótárhoz használt dedikált pufferkészlet méretét. Adja meg a 0 értéket, ha ezt az értéket a shared_buffers törtrészeként kell meghatározni. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 0-131072 |
| Paraméter típusa | statikus |
| Documentation | subtransaction_buffers |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes munkamenetek által használt ideiglenes pufferek maximális számát. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
transaction_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a dedikált pufferkészlet méretét a tranzakciós állapot gyorsítótárhoz. Adja meg a 0 értéket, ha ezt az értéket a shared_buffers törtrészeként kell meghatározni. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 0-131072 |
| Paraméter típusa | statikus |
| Documentation | transaction_buffers |
vacuum_buffer_usage_limit
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a pufferkészlet méretét a VACUUM, az ANALYZE és az autovacuum esetében. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 0-16777216 |
| Paraméter típusa | dynamic |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a lekérdezési munkaterületekhez használandó memória maximális méretét. Ennyi memóriát használhatnak az egyes belső rendezési műveletek és kivonattáblák, mielőtt ideiglenes lemezfájlokra váltanak. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
hash_mem_multiplier (hash-memória-szorzó)
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kivonattáblákhoz használandó work_mem többszöröse. |
| Adattípus | Numerikus |
| Alapértelmezett érték | 2 |
| Engedélyezett értékek | 1-1000 |
| Paraméter típusa | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Engedélyezi/letiltja a hatalmas memórialapok használatát. Ez a beállítás nem alkalmazható a 4 virtuális magnál kevesebb virtuális magot futtató kiszolgálókra. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
huge_page_size
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kérendő hatalmas oldal mérete. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a logikai dekódoláshoz használandó memória maximális méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 65536 |
| Engedélyezett értékek | 64-2147483647 |
| Paraméter típusa | dynamic |
| Documentation | logical_decoding_work_mem |
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az olyan karbantartási műveletekhez használandó maximális memóriát, mint a VACUUM, az Index létrehozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. Replikakiszolgáló futtatásakor ezt a paramétert ugyanarra vagy magasabbra kell állítania, mint az elsődleges kiszolgálón. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az indításkor fenntartott dinamikus megosztott memória mennyisége. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. Az egység 8kb. Az engedélyezett értékek a rendelkezésre álló memória 10%- 75%-ának tartományán belül vannak. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a fő megosztott memóriaterülethez használt megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | mmap |
| Engedélyezett értékek | mmap |
| Paraméter típusa | csak olvasható |
| Documentation | megosztott_memória_típus |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az egyes adatbázis-munkamenetek által használt ideiglenes pufferek maximális számát adja meg. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
vacuum_buffer_usage_limit
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a pufferkészlet méretét a VACUUM, az ANALYZE és az autovacuum esetében. |
| Adattípus | egész szám |
| Alapértelmezett érték | 256 |
| Engedélyezett értékek | 0-16777216 |
| Paraméter típusa | dynamic |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a belső rendezési műveletek és kivonattáblák által használandó memória mennyiségét, mielőtt ideiglenes lemezfájlokba ír. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
hash_mem_multiplier (hash-memória-szorzó)
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kivonattáblákhoz használandó work_mem többszöröse. |
| Adattípus | Numerikus |
| Alapértelmezett érték | 2 |
| Engedélyezett értékek | 1-1000 |
| Paraméter típusa | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Engedélyezi/letiltja a hatalmas memórialapok használatát. Ez a beállítás nem alkalmazható a 4 virtuális magnál kevesebb virtuális magot futtató kiszolgálókra. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
huge_page_size
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kérendő hatalmas oldal mérete. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a logikai dekódoláshoz használandó memória maximális méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 65536 |
| Engedélyezett értékek | 64-2147483647 |
| Paraméter típusa | dynamic |
| Documentation | logical_decoding_work_mem |
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az olyan karbantartási műveletekhez használandó maximális memóriát, mint a VACUUM, az Index létrehozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. Replikakiszolgáló futtatásakor ezt a paramétert ugyanarra vagy magasabbra kell állítania, mint az elsődleges kiszolgálón. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az indításkor fenntartott dinamikus megosztott memória mennyisége. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. Az egység 8kb. Az engedélyezett értékek a rendelkezésre álló memória 10%- 75%-ának tartományán belül vannak. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a fő megosztott memóriaterülethez használt megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | mmap |
| Engedélyezett értékek | mmap |
| Paraméter típusa | csak olvasható |
| Documentation | megosztott_memória_típus |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az egyes adatbázis-munkamenetek által használt ideiglenes pufferek maximális számát adja meg. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a belső rendezési műveletek és kivonattáblák által használandó memória mennyiségét, mielőtt ideiglenes lemezfájlokba ír. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
hash_mem_multiplier (hash-memória-szorzó)
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kivonattáblákhoz használandó work_mem többszöröse. |
| Adattípus | Numerikus |
| Alapértelmezett érték | 1 |
| Engedélyezett értékek | 1-1000 |
| Paraméter típusa | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Engedélyezi/letiltja a hatalmas memórialapok használatát. Ez a beállítás nem alkalmazható a 4 virtuális magnál kevesebb virtuális magot futtató kiszolgálókra. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
huge_page_size
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kérendő hatalmas oldal mérete. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a logikai dekódoláshoz használandó memória maximális méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 65536 |
| Engedélyezett értékek | 64-2147483647 |
| Paraméter típusa | dynamic |
| Documentation | logical_decoding_work_mem |
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az olyan karbantartási műveletekhez használandó maximális memóriát, mint a VACUUM, az Index létrehozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. Replikakiszolgáló futtatásakor ezt a paramétert ugyanarra vagy magasabbra kell állítania, mint az elsődleges kiszolgálón. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az indításkor fenntartott dinamikus megosztott memória mennyisége. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0 |
| Paraméter típusa | csak olvasható |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. Az egység 8kb. Az engedélyezett értékek a rendelkezésre álló memória 10%- 75%-ának tartományán belül vannak. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a fő megosztott memóriaterülethez használt megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | mmap |
| Engedélyezett értékek | mmap |
| Paraméter típusa | csak olvasható |
| Documentation | megosztott_memória_típus |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az egyes adatbázis-munkamenetek által használt ideiglenes pufferek maximális számát adja meg. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a belső rendezési műveletek és kivonattáblák által használandó memória mennyiségét, mielőtt ideiglenes lemezfájlokba ír. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
hash_mem_multiplier (hash-memória-szorzó)
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kivonattáblákhoz használandó work_mem többszöröse. |
| Adattípus | Numerikus |
| Alapértelmezett érték | 1 |
| Engedélyezett értékek | 1-1000 |
| Paraméter típusa | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Engedélyezi/letiltja a hatalmas memórialapok használatát. Ez a beállítás nem alkalmazható a 4 virtuális magnál kevesebb virtuális magot futtató kiszolgálókra. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
logical_decoding_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a logikai dekódoláshoz használandó memória maximális méretét. |
| Adattípus | egész szám |
| Alapértelmezett érték | 65536 |
| Engedélyezett értékek | 64-2147483647 |
| Paraméter típusa | dynamic |
| Documentation | logical_decoding_work_mem |
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az olyan karbantartási műveletekhez használandó maximális memóriát, mint a VACUUM, az Index létrehozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. Replikakiszolgáló futtatásakor ezt a paramétert ugyanarra vagy magasabbra kell állítania, mint az elsődleges kiszolgálón. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. Az egység 8kb. Az engedélyezett értékek a rendelkezésre álló memória 10%- 75%-ának tartományán belül vannak. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a fő megosztott memóriaterülethez használt megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | mmap |
| Engedélyezett értékek | mmap |
| Paraméter típusa | csak olvasható |
| Documentation | megosztott_memória_típus |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az egyes adatbázis-munkamenetek által használt ideiglenes pufferek maximális számát adja meg. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a belső rendezési műveletek és kivonattáblák által használandó memória mennyiségét, mielőtt ideiglenes lemezfájlokba ír. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
hash_mem_multiplier (hash-memória-szorzó)
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A kivonattáblákhoz használandó work_mem többszöröse. |
| Adattípus | Numerikus |
| Alapértelmezett érték | 1 |
| Engedélyezett értékek | 1-1000 |
| Paraméter típusa | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Engedélyezi/letiltja a hatalmas memórialapok használatát. Ez a beállítás nem alkalmazható a 4 virtuális magnál kevesebb virtuális magot futtató kiszolgálókra. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az olyan karbantartási műveletekhez használandó maximális memóriát, mint a VACUUM, az Index létrehozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. Replikakiszolgáló futtatásakor ezt a paramétert ugyanarra vagy magasabbra kell állítania, mint az elsődleges kiszolgálón. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. Az egység 8kb. Az engedélyezett értékek a rendelkezésre álló memória 10%- 75%-ának tartományán belül vannak. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a fő megosztott memóriaterülethez használt megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | mmap |
| Engedélyezett értékek | mmap |
| Paraméter típusa | csak olvasható |
| Documentation | megosztott_memória_típus |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az egyes adatbázis-munkamenetek által használt ideiglenes pufferek maximális számát adja meg. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a belső rendezési műveletek és kivonattáblák által használandó memória mennyiségét, mielőtt ideiglenes lemezfájlokba ír. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.
autovacuum_work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyes autovacuum-feldolgozó folyamatok által használandó maximális memóriát. |
| Adattípus | egész szám |
| Alapértelmezett érték | -1 |
| Engedélyezett értékek | -1-2097151 |
| Paraméter típusa | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_megosztott_memória_típus
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Kiválasztja a használt dinamikus megosztott memória implementációját. |
| Adattípus | enumerálás |
| Alapértelmezett érték | posix |
| Engedélyezett értékek | posix |
| Paraméter típusa | csak olvasható |
| Documentation | dinamikus_megosztott_memória_típus |
huge_pages
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Engedélyezi/letiltja a hatalmas memórialapok használatát. Ez a beállítás nem alkalmazható a 4 virtuális magnál kevesebb virtuális magot futtató kiszolgálókra. |
| Adattípus | enumerálás |
| Alapértelmezett érték | try |
| Engedélyezett értékek | on,off,try |
| Paraméter típusa | statikus |
| Documentation | nagy_oldalak |
Description
A hatalmas lapok olyan funkciók, amelyek lehetővé teszik a memória nagyobb blokkokban való kezelését. A szabványos 4 KB-os oldalak helyett általában legfeljebb 2 MB méretű blokkokat kezelhet.
A hatalmas oldalak használata olyan teljesítménybeli előnyöket kínálhat, amelyek hatékonyan ki tudják kapcsolni a processzort:
- Csökkentik a memóriakezelési feladatokhoz, például kevesebb fordítási lookaside pufferhez (TLB) kapcsolódó többletterhelést.
- Lerövidítik a memóriakezeléshez szükséges időt.
A PostgreSQL-ben a hatalmas oldalakat csak a megosztott memóriaterületen használhatja. A megosztott memóriaterület jelentős része megosztott pufferekhez van lefoglalva.
Egy másik előnye, hogy a hatalmas oldalak megakadályozzák a megosztott memóriaterület lemezre való felcserélését, ami tovább stabilizálja a teljesítményt.
Recommendations
- A jelentős memóriaerőforrásokkal rendelkező kiszolgálók esetében kerülje a hatalmas lapok letiltását. A hatalmas lapok letiltása ronthatja a teljesítményt.
- Ha egy kisebb kiszolgálóval kezd, amely nem támogatja a hatalmas oldalakat, de várhatóan felskáláz egy olyan kiszolgálóra, amely igen, tartsa a beállítást
huge_pagesa zökkenőmentes átmenet és azTRYoptimális teljesítmény érdekében.
Azure-specifikus megjegyzések
A négy vagy több virtuális processzormaggal rendelkező kiszolgálók esetében a hatalmas lapok automatikusan lefoglalásra kerülnek az alapul szolgáló operációs rendszerből. A szolgáltatás nem érhető el négynél kevesebb virtuális maggal rendelkező kiszolgálók esetében. A hatalmas lapok száma automatikusan módosul, ha a megosztott memória beállításai módosulnak, beleértve a shared_buffersmódosításokat is.
karbantartási_munka_memória
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az olyan karbantartási műveletekhez használandó maximális memóriát, mint a VACUUM, az Index létrehozása. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 1024-2097151 |
| Paraméter típusa | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem egy konfigurációs paraméter a PostgreSQL-ben. Ez szabályozza a karbantartási műveletekhez lefoglalt memória mennyiségét, például VACUUM: , CREATE INDEXés ALTER TABLE. Ellentétben work_mema lekérdezési műveletek memóriafoglalásával, maintenance_work_mem az adatbázis struktúráját karbantartó és optimalizáló feladatokhoz van fenntartva.
! [MEGJEGYZÉS] A túlzottan agresszív értékek beállítása
maintenance_work_memidőnként memóriahibahoz vezethet a rendszerben. A paraméter módosítása előtt rendkívül fontos tisztában lenni a kiszolgálón rendelkezésre álló memória mennyiségével és az egyidejű műveletek számával, amelyek memóriát foglalhatnak le a korábban ismertetett feladatokhoz.
Kulcsfontosságú pontok
-
Vákuummemória sapka: Ha növelni szeretné az elhalt tuple-ok eltávolításának sebességét, vegye figyelembe, hogy
maintenance_work_memaz elhalt tuple-azonosítók gyűjtésére beépített korlátozás vonatkozik. Ehhez a folyamathoz legfeljebb 1 GB memóriát használhat. -
A memória elkülönítése az autovacuumhoz: A beállítással
autovacuum_work_memszabályozhatja a memóriát, amelyet az autovacuum-műveletek egymástól függetlenül használnak. Ez a beállítás azmaintenance_work_memegy része. Eldöntheti, hogy az autovacuum mennyi memóriát használ anélkül, hogy befolyásolná az egyéb karbantartási feladatok és adatdefiníciós műveletek memóriafoglalását.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a maintenance_work_mem rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi módosítása nem befolyásolja az adott példány kiszolgálóparaméterének alapértelmezett értékét maintenance_work_mem .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a maintenance_work_mem paraméter értékét is az alábbi képlet értékei alapján kell módosítania.
Az érték maintenance_work_mem kiszámításához használt képlet az .(long)(82.5 * ln(memoryGiB) + 40) * 1024
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | karbantartási_munka_memória |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274 432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367 616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542 720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
max_előkészített_tranzakciók
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja az egyidejűleg előkészített tranzakciók maximális számát. Replikakiszolgáló futtatásakor ezt a paramétert ugyanarra vagy magasabbra kell állítania, mint az elsődleges kiszolgálón. |
| Adattípus | egész szám |
| Alapértelmezett érték | 0 |
| Engedélyezett értékek | 0-262143 |
| Paraméter típusa | statikus |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | A maximális veremmélység beállítása kilobájtban. |
| Adattípus | egész szám |
| Alapértelmezett érték | 2048 |
| Engedélyezett értékek | 2048 |
| Paraméter típusa | csak olvasható |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a kiszolgáló által használt megosztott memóriapufferek számát. Az egység 8kb. Az engedélyezett értékek a rendelkezésre álló memória 10%- 75%-ának tartományán belül vannak. |
| Adattípus | egész szám |
| Alapértelmezett érték | A kiszolgáló számára lefoglalt erőforrásoktól (virtuális magoktól, RAM-októl vagy lemezterülettől) függ. |
| Engedélyezett értékek | 16-1073741823 |
| Paraméter típusa | statikus |
| Documentation | shared_buffers |
Description
A shared_buffers konfigurációs paraméter határozza meg a PostgreSQL-adatbázis számára az adatok puffereléséhez lefoglalt rendszermemória mennyiségét. Központi memóriakészletként szolgál, amely minden adatbázis-folyamat számára elérhető.
Amikor adatokra van szükség, az adatbázis-folyamat először ellenőrzi a megosztott puffert. Ha a szükséges adatok megtalálhatók, gyorsan lekérésre kerülnek, és elkerülik az időigényesebb lemezolvasást. A megosztott pufferek közvetítőként szolgálnak az adatbázis-folyamatok és a lemez között, és hatékonyan csökkentik a szükséges I/O-műveletek számát.
Azure-specifikus megjegyzések
A kiszolgálóparaméter alapértelmezett értékét a shared_buffers rugalmas Azure Database for PostgreSQL-kiszolgáló példányának kiépítésekor számítja ki a rendszer a számításhoz kiválasztott terméknév alapján. A rugalmas kiszolgálót támogató számítás termékkijelölésének későbbi változásai nem befolyásolják az adott példány kiszolgálóparaméterének alapértelmezett értékét shared_buffers .
Minden alkalommal, amikor módosítja a példányhoz rendelt terméket, a paraméter értékét shared_buffers is módosítania kell az alábbi képletek értékeinek megfelelően.
Legfeljebb 2 GiB memóriával rendelkező virtuális gépek esetén az érték shared_buffers kiszámításához használt képlet az memoryGib * 16384.
A 2 GiB-nél nagyobb virtuális gépek esetében az érték shared_buffers kiszámításához használt képlet az memoryGib * 32768.
Az előző képlet alapján az alábbi táblázat felsorolja azokat az értékeket, amelyekre a kiszolgálóparaméter a kiosztott memória mennyiségétől függően be van állítva:
| Memória mérete | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
temp_buffers
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Az egyes adatbázis-munkamenetek által használt ideiglenes pufferek maximális számát adja meg. |
| Adattípus | egész szám |
| Alapértelmezett érték | 1024 |
| Engedélyezett értékek | 100-1073741823 |
| Paraméter típusa | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Érték |
|---|---|
| Kategória | Erőforrás-használat / Memória |
| Description | Beállítja a belső rendezési műveletek és kivonattáblák által használandó memória mennyiségét, mielőtt ideiglenes lemezfájlokba ír. |
| Adattípus | egész szám |
| Alapértelmezett érték | 4096 |
| Engedélyezett értékek | 4096-2097151 |
| Paraméter típusa | dynamic |
| Documentation | work_mem |
Description
A work_mem PostgreSQL paramétere szabályozza az egyes belső műveletekhez lefoglalt memória mennyiségét az egyes adatbázis-munkamenetek magánmemóriája területén. Ilyen műveletek például a rendezés és a kivonatolás.
A megosztott pufferek, amelyek a megosztott memóriaterületen vannak, ellentétben a work_mem egyenkénti munkamenet vagy lekérdezés privát memóriaterében van lefoglalva. A megfelelő work_mem méret beállításával jelentősen javíthatja ezeknek a műveleteknek a hatékonyságát, és csökkentheti az ideiglenes adatok lemezre írásának szükségességét.
Kulcsfontosságú pontok
-
Privát kapcsolati memória:
work_memaz egyes adatbázis-munkamenetek által használt magánmemória része. Ez a memória különbözik a használt megosztott memóriaterülettőlshared_buffers. -
Lekérdezésspecifikus használat: Nem minden munkamenetet vagy lekérdezést használ
work_mem. Egyszerű lekérdezések, mint példáulSELECT 1, valószínűleg nem igényelnekwork_mem. Az összetett lekérdezések azonban, amelyek olyan műveleteket foglalnak magukban, mint a rendezés vagy a kivonatolás, egy vagy többwork_memadattömböt fogyaszthatnak. -
Párhuzamos műveletek: Több párhuzamos háttérrendszerre kiterjedő lekérdezések esetén minden háttérrendszer egy vagy több adattömbet
work_memhasználhat.
Monitorozás és work_mem módosítása
Elengedhetetlen a rendszer teljesítményének folyamatos monitorozása és szükség szerinti módosítása work_mem , elsősorban akkor, ha a rendezési vagy kivonatolási műveletekhez kapcsolódó lekérdezés-végrehajtási idő lassú. A teljesítmény monitorozásának módjai az Azure Portalon elérhető eszközökkel:
-
Lekérdezési teljesítményelemzés: Az ideiglenes fájlokat létrehozó lekérdezések azonosításához tekintse meg a leggyakoribb lekérdezéseket ideiglenes fájlok lapján. Ez a helyzet arra utal , hogy növelni kell a növekedést
work_mem. - Hibaelhárítási útmutatók: A hibaelhárítási útmutatók Magas ideiglenes fájlok lapján azonosíthatja a problémás lekérdezéseket.
Granuláris beállítás
A paraméter kezelése work_mem során gyakran hatékonyabb egy részletes beállítási módszer alkalmazása a globális érték beállítása helyett. Ez a megközelítés biztosítja, hogy a memóriát körültekintően a folyamatok és a felhasználók konkrét igényei alapján foglalja le. Emellett minimálisra csökkenti a memóriahiányból adódó problémák kockázatát. Az alábbiak szerint végezheti el a következő lépéseket:
Felhasználói szint: Ha egy adott felhasználó elsősorban aggregációs vagy jelentéskészítési feladatokban vesz részt, amelyek memóriaigényesek, fontolja meg az adott felhasználó értékének
work_memtestreszabását.ALTER ROLEA parancs használatával javíthatja a felhasználó műveleteinek teljesítményét.Függvény-/eljárásszint: Ha bizonyos függvények vagy eljárások jelentős ideiglenes fájlokat hoznak létre, előnyös lehet az
work_memérték növelése az adott függvény vagy eljárás szintjén. Használja aALTER FUNCTIONvagyALTER PROCEDUREparancsot, hogy pontosabban lefoglaljon több memóriát ezekhez a műveletekhez.Adatbázisszint: Ha
work_memcsak bizonyos adatbázisok hoznak létre nagy mennyiségű ideiglenes fájlt, módosítsa az adatbázis szintjén.Globális szint: Ha a rendszer elemzése azt mutatja, hogy a lekérdezések többsége kis ideiglenes fájlokat hoz létre, míg csak kevesen hoznak létre nagy fájlokat, érdemes lehet globálisan növelni az
work_memértéket. Ez a művelet megkönnyíti a legtöbb lekérdezés feldolgozását a memóriában, így elkerülheti a lemezalapú műveleteket, és javíthatja a hatékonyságot. Azonban mindig legyen óvatos, és figyelje a kiszolgáló memóriakihasználtságát, hogy képes legyen kezelni a megnövekedettwork_memértéket.
A rendezési műveletek minimális work_mem értékének meghatározása
Ha meg szeretné keresni egy adott lekérdezés minimális work_mem értékét, különösen azt, amely ideiglenes lemezfájlokat hoz létre a rendezési folyamat során, először a lekérdezés végrehajtása során létrehozott ideiglenes fájlméretet kell figyelembe vennie. Ha például egy lekérdezés 20 MB-os ideiglenes fájlt hoz létre:
- Csatlakozzon az adatbázishoz a psql vagy az előnyben részesített PostgreSQL-ügyfél használatával.
- Állítson be egy 20 MB-nál valamivel nagyobb kezdeti
work_memértéket a további fejlécek számba vételéhez a memóriában történő feldolgozáskor. Használjon egy parancsot, például:SET work_mem TO '25MB'. - Futtassa
EXPLAIN ANALYZEa problémás lekérdezést ugyanabban a munkamenetben. - Tekintse át a kimenetet
"Sort Method: quicksort Memory: xkB". Ha jelzi"external merge Disk: xkB", növelje azwork_memértéket lépésenként, és tesztelje újra, amíg meg nem jelenik"quicksort Memory". A"quicksort Memory"megjelenése jelzi, hogy a lekérdezés most már a memóriában működik. - Miután meghatározta az értéket ezzel a módszerrel, globálisan vagy részletesebb szinteken (a korábban leírtak szerint) alkalmazhatja a működési igényeinek megfelelően.