Adattárház lekérdezések gyorsítása: NOLOCK
A múlt heti cikkben bemutattam, hogy az adattárház, adatpiac adatbázisának csak olvashatóvá tételével kb 5%-ot gyorsíthatunk lekérdezéseinken. A most következő cikkben pedig megmutatom, hogy hogyan érhetjük el ugyanezt az eredményt, ha adattárházunk, adatpiacunk adatbázisa nem read-only
Az SQL Server alapértelmezésben kizárólagosan zárolja (Lock) azokat a sorokat (néha lapokat, extenteket, táblákat, adatbázisokat), amelyeket „A” Felhasználó módosít (Update), mindaddig, amíg a módosítás be ne fejeződik. A sorok olvasásához (Select) pedig megosztott zárakat használ. Így a zárolás időtartama alatt sem „B”, sem más felhasználók nem férhetnek hozzá az „A” által zárolt sorokhoz.
Az adattárházakat éjszaka töltjük, amikor a felhasználók nem látják az adattárházat. Mondhatnánk tehát, hogy a fent említett zárolás nem jelenthet problémát a lekérdezések szempontjából, hiszen a módosítás és a lekérdezés két teljesen külön napszakban történik. Ez igaz, de az SQL Server megköveteli a sorok zárolását lekérdezések (SELECT) használata esetén is...
A NOLOCK használata
A NOLOCK opció használatával megmondhatjuk az SQL szervernek, hogy hagyja figyelmen kívül a zárolásokat (lock) és olvasson közvetlenül a táblából, ami, - ha sok felhasználó futtat nagy lekérdezéseket ugyanarra az adatkörre – jelentősen növelheti a lekérdezések sebességét.
A zárolások figyelmen kívül hagyása kockázatot jelenthet egy vállalatirányítási (ERP) rendszernek, mert előfordulhat, hogy inkonzisztens választ kap, de egy adattárháznak nem. Az adattárházat csak akkor kérdezzük le, ha az már fel van töltve, azaz nem fordulhat elő olyan, hogy lekérdezés közben valaki módosítja alattunk a táblát. Példa:
SELECT A.*FROM [FactBelföldi értékesítés] as A with (nolock)
JOIN [DimTime] as B with (nolock)
ON A.[DateID]= B.[DateID] WHERE DatePart(Year, b.DateCode)= 2006
Mennyit nyerhetünk a Nolock opció használatával? Nem sokat. Méréseim azt mutatták, hogy körülbelül 5%-ot (hasonlóan a read-only adatbázishoz), ami tényleg nem sok.
Azért mutattam be az opció használatát, mert ezzel a módszerrel – a csak olvasható (read-only) adatbázisokat leszámítva – mindig gyorsíthatja adattárháza lekérdezéseit. Kevés olyan lekérdezés gyorsítási technika van adattárházas környezetben amit gondolkodás nélkül, bármikor használhatunk, de a Nolock opció ezek közé tartozik.
Felhasznált irodalom:
- sql-server-performance.com: SQL Server Lock Contention Tamed: The Joys Of NOLOCK and ROWLOCK
Kővári Attila - BI projekt
Új hozzászólás