outofmemoryexception győzelem, windraw dot net
Elég sokáig szenvedtünk teljesítmény WinDraw programot. nevezetesen, közötti kölcsönhatás WinDraw és MS SQL Server.
Ebben a harcban, tettünk néhány fontos megállapításokat:
1. Használata dbo.ZipUnPack lekérdezések (vagyis azon az oldalon, az SQL Server) Builder Stimulsoft Reports.Net jelentéseket vezetett arra a tényre, hogy a System.OutOfMemoryException hiba sokkal gyakrabban fordul elő. Átvitele végrehajtását ez a módszer a szerver oldalon a kérelem (azaz a Atechnology.Components.ZipArchiver.UnZip2 (byte [] classnative)) már jelentősen nőtt az idő SQLServer munka újraindítás nélkül.
Mindezen okok miatt, és sok ötlet az interneten (de a legtöbb tanácsot említett munkájában a program 1C SQL Server, de a probléma nagyon hasonló volt a miénkhez) - Úgy döntöttünk, hogy próbálja ki a x64 platform és szoftver.
Több mint egy hónap, nem kaptunk System.OutOfMemoryException hiba. a RAM használata szinte teljesen!
Ezen az alapon a beállított program tartja szükségesnek egyidejűleg hozzáférés az SQL Server több mint 30 felhasználó.
ZY A közeljövőben megpróbáljuk engedélyezi az opciót Cím bővítményeket (AWE), és leírja az eredményt!
Egy kis technikai információ!
Mechanizmus Cím bővítményeket (AWE), használt SQL Server, két részből áll, kiosztja a fizikai memóriát, és megjeleníti azt a virtuális címtartomány (VAS) a folyamat. Ha a fizikai memóriát, az operációs rendszer nem lesz képes ezt kérik, használata közben nem a folyamat befejeződik, vagy a folyamat felszabadítja a memóriát vissza az operációs rendszer. Az alkalmazás képes kezelni, és akár teljes megakadályozására essek. térképezés / unmapping mechanizmus előnye, hogy egy és ugyanazon a fizikai oldal is megjelenik a különböző részein a VAS. A 64 bites platformok unmapping nincs szükség VAS, van ahhoz, hogy tartsa az összes elérhető fizikai memóriát.
Az elmélet az operációs rendszerek, hogy leírja a kijelző VAS oldalak fizikai lapok a rendszer úgy működik a lap táblázat bejegyzések - Page Table Entry (PTE). Bent a fizikai oldal által leírt blokk oldalak száma - Oldal keretszámot (PFN). Tól PFN lehet kapni minden információt a fizikai oldalt, amit képvisel. Például a PFN mutat némi Non-Uniform Memory Access (NUMA) - csomópont birtokolja ezt az oldalt. Az operációs rendszer egy adatbázis, amely tárolja a sor a PFN, amelyben a rendszer működik. Ha az oldal a VAS tükröződik, ott van a PTE, amely lehet, hogy nem jelzi, hogy az érintett PFN. Fogalmi, az oldal a PTE lehet a memóriában, vagy sem, ha például azt cserélték ki a lemezre. Az első esetben van kötve az engedélyezett PFN, és az utóbbi - nem. Viszont, ha a fizikai oldal kapcsolódik egy oldalt a VAS, a visszatérési PFN PTE.
Ha az operációs rendszer létrehozza felszabadítja kap / ad részt PTE lap, vagy ha kap némi információt róla (például kiosztás NUMA), akkor be kell vonni blokkolja a munkakészlet a folyamat - stabilitást biztosít a horgony PTE PFN. Ez rögzítőfogantyút meglehetősen drága, és rontja a folyamat skálázhatóság.
Elosztása a fizikai lapok használata AWE mechanizmus biztosítja számunkra egy sor PFN bejegyzés közvetlenül a PFN adatbázisban. Az operációs rendszer kialakítására van szükség, a zár egy adatbázis idején eloszlása PFN PFN bejegyzéseket. A kijelző mechanizmus AWE, megjelenítheti allotsiruemye PFN bejegyzéseket VAS folyamat. Ha van egy ilyen térkép, a PTE osztják, köteles a PFN és vannak megjelölve blokkolja. Ebben az esetben az operációs rendszer legyen egy egyszeri a zárolást folyamat munkakészlet. Megjelenítésekor szokásos oldalak, az operációs rendszer nem is igény, és ezért kell, hogy a munka meghatározott, és a zár az adatbázisban PFN adatokat minden oldalon. Mivel a lapok a memóriában vannak zárva idején a személyhívó rendszer PTE figyelmen kívül hagyja.
A 64 bites platformokon inkább nevezhetjük ezeket az oldalakat blokkolják oldalak (zárt lapok), és ne tévessze össze őket a lapok, hogy a pénzeszközök befagyasztására VirtualLock API. Ahogy fentebb említettük, a blokkolt oldalak, van két fontos tulajdonság - nem vesznek részt a lapozás által végzett az operációs rendszer, és abban az időben a forgalmazási azok elfog a munkakészlet és egy egységes zár az adatbázist a PFN.
Az első tulajdonság nincs nyilvánvaló hatása a nagy teljesítményű rendszerekhez, mint például a rendszerek NUMA architektúra. Ez vezet explicit memória rezidens. Ne feledje, hogy a rendszer rögzíti az oldalakat igény. csomópont fogják használni az elosztó fizikai memória, amely végrehajtásra utalva a memória adatfolyam. Csak ezt követően az oldal lehet cserélni az operációs rendszer alatt a csere. Továbbá azt is kap vissza a memóriát, az operációs rendszer újra osztja az oldal fizikai csomópont, amely a menet továbbra is együttműködik ezt a memóriát. Ebben az esetben a csomópont egészen más lehet. Az ilyen viselkedés vezetne további terhet ró a alkalmazások, amelyek az oldalak tartózkodási NUMA. oldal zár lehetővé teszi, hogy megoldja ezt a problémát, teljesen megvédi őket a lapozás.
A második tulajdonság - a lefoglalás a munkakészlet és rögzítse az adatbázis csak PFN, lehetővé teszi az alkalmazások futtatása gyorsabb és növeli a skálázhatóságot a terhelés rámpát.
A NUMA architektúra, az SQL Server puffer medence rögzíti az egyes allokációs oldalt szentelt neki egységet. Ez úgy érhető el segítségével a QueryWorkingSetEx. Miután az oldal osztják, az úgynevezett API, amely lehetővé teszi, hogy tudja a részleteket az oldal lakóhely. Ezt csak egyszer. Ezért zárva oldalak felvétele SQL Server 64 bites platform javítja a munkát a fűrészfog terhelés, és növeli a teljesítményt és skálázhatóságot hosszabb ideig. Amikor az SQL Server egy lezárt oldalak módban, akkor nem kell aggódnia a teljesítményt a rendszer egészére, attól függően, hogy a memória eltávolítása SQL Server, ha részt vesz a mechanizmus az operációs rendszer személyhívó hallgat figyelmezteti felelős rendszer API memóriát, és csökkenti a munkahelyi be, amikor azt követelte tőle.
Nézzük összefoglalni ezt a cikket: 64 bites platformokon VAS, van ahhoz, hogy tartsa az összes rendelkezésre álló fizikai memóriát, így a valószínűsége, hogy System.OutOfMemoryException kivétel gyakorlatilag kizárt.