All articles

Random értékek + Clustered index = vinyó tengelytörés

Published 2014-03-31 - Last modified 2014-03-31

Original: https://soci.hu/blog/index.php/2014/03/31/random-ertekek-clustered-index-vinyo-tengelytores/

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.