sql >> Databáze >  >> RDS >> Sqlserver

RowVersion a výkon

Existuje několik důsledků pro výkon, rowversion je pouze nový název pro starý datový typ časového razítka. Vaše databáze tedy bude muset uložit další binární pole. Váš výkon utrpí mnohem více, když se pokusíte provést dotazy na tato data, jako například:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Což je běžný způsob, který lze použít k získání seznamu aktualizovaných položek od poslední @rowVersion. Vypadá to dobře a bude to fungovat perfektně pro tabulku s řekněme 10 000 řádky. Ale když se dostanete na 1 milion řádků, rychle zjistíte, že to vždy provádělo skenování tabulek a váš výkon je dán tím, že se vaše tabulka již zcela nevejde do RAM serveru.

Toto je běžný problém, který se vyskytuje u rowVersion sám o sobě není magicky indexován. Také když indexujete sloupec rowVersion, musíte se smířit s tím, že index se časem často velmi roztříští, protože nové aktualizované hodnoty budou vždy na konci indexu, takže při aktualizaci stávajících položek zůstanou v indexu mezery. .

Upravit:Pokud se nechystáte, použijte rowVersion pole pro kontrolu aktualizovaných položek a místo toho jej budete používat pro konzistenci, abyste zajistili, že záznam nebude aktualizován od posledního čtení, pak to bude naprosto přijatelné použití a nebude to mít žádný vliv.

UPDATE MyTable SET MyField = ' @myField
WHERE Key = @key AND rowVersion = @rowVersion



  1. Tabulkový prostor SYSMGMTDATA je PLNÝ v úložišti správy infrastruktury Grid (MGMTDB)

  2. Vyberte záznamy podle času v intervalu mezi 12:00:00 a 18:00:00 každý den

  3. Předání pole z aplikace .Net do uložené procedury Oracle

  4. PrepareStatement nastavení null pro NUMBER_ARRAY nefunguje