Az utóbbi hónapban két munkámban is random kulcsok okoztak kalamajkát az SQL Serverek és a megrendelők életében. Az egyik esetben egy adattárház betöltését lassította le a NEWID()-val generált véletlenszám, a másikban Java-ban generáltak véletlen kulcsokat, amitől az összes adatot érintő művelet belassult.
Az elsőben annyira, hogy a normál esetben 250000 sor/sec-es bulk insert lelassult pár 10 sor/secre, és a merevlemezek válaszideje felment pár másodpercre (normál esetben ez pár millisec).
A táblák annyira fragmentáltak voltak, hogy a nagyobbakon fragmentáltság mértéke 99,7% volt, 10 fölött már simán defragmentálni szoktunk.
Nonclustered indexek esetén is érezteti a hatását a guid, de nem annyira agresszíven, mint a clu index esetén.
Bármennyire is kényelmes az a tény, hogy guidokat adatbázison kívül is lehet generálni, meg kell gondolni a használatukat. Az identity nem OR mapper barát, mivel minden egyes sor beszúrása után vissza kell olvasni a generált identity értéket, azaz minden egyes insert egy round trip lesz. Jó megoldás lehet a HILO primary key generálás, kölönösen SEQUENCE alapon, de ezt meg nem támogatja minden OR mapper (EF se, itt van egyféle külső implementáció hozzá).
Nem egyszerű jó kulcsgenerátort találni.
Test Driven Development tanfolyam – fogynak a helyek, jelentkezzen, aki még be szeretne beférni májusban.
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.
LEAVE A COMMENT
4 COMMENTS
A primary key az alapbol clustered vagy nem clustered?
Egyebkent sajnos a legtobb ORM igy oldja meg a kerdest, de ez elvben nem baj, mert jo esetben cache-bol/memoriabol vissza tud menni a valasz, ha okos az SQL engine. Illetve nehany SQL engine vissza tudja adni az adott sessionben utoljara generalt ID-t lekerdezes nelkul is.
Alapból szinte mindenkinél clustered.
Vicces, hogy pont most olvasom ezt:
http://sqlblog.com/blogs/davide_mauri/archive/2014/04/06/guid-fragmentation-and-performance-the-eternal-flame.aspx
Friss értekezés a témában :-)
Elolvastam, érdekes. Amitől az én esetemben sokkal rosszabbak voltak az eredmények, az az, hogy sima vinyók voltak a gépben, nem ssdk, így a fragmentáltság elképesztően megreszeltette a vinyókat. SSD-vel csak a sok pici olvasás vs. nagyobbakat harapó olvasás miatt van különbség.