Transakční mechanismy a zamykání dat u Virtuosa
- testováno posloupnostmi příkazů z Javy (podobně bude platit i pro SQL skripty a procedury)
- testováno v branch prototype : /prototype/virtuosoaccess-maven/, tvrzení o procedurách otestováno dříve ve WS pro studenty
- isolation level testovány breakpointy v rozdělaných transakcích kódu a souběžnými dotazy z SQL konzoly Virtuoso WWW conductora
- čtveřice RDF odpovídá řádku DB tabulky
Řízení transakčního chování pomocí zařazení funkce log_enable(param) do kódu
- log_enable(2) a log_enable(3) nastavení způsobuje okamžitý commit každé změněné řádky tabulky, revert již pak není možný, toto nastavení má přednost před jdbc nastavením setAutoCommit(false) a je trvalé pro celé spojení do databáze, tyto průběžné modifikace žádné zámky nenastavují
- log_enable(0) a log_enable(1) nastavení umožňuje normální chování řízené dle jdbc setAutoCommit, přepínaní mezi 0 a 1 nastavením je možné po každé transakci, nastavení 0 dvakrát po sobě vyvolá chybu, v každém případě rozdělaná transakce nastavuje exclusivní zámky při modifikaci, jejich granularita (tabulka - (stránka) - řádek) funguje dobře
- log_enable(0) a log_enable(2) nastavení způsobuje nezapisování dat do logu, po havárii Virtuosa je možný jen rollback, nikoli dopředný commit dat (upřednostněn výkon před Duration vlastností z ACID)
Řízení isolation level zařazením set isolation="isolation-level" do kódu
- nastavení repeatableread (default !) and serialize isolation level způsobí čekání na uvolnění exclusivních zámků
- read commited nezpůsobí čekání na uvolnění exclusivních zámků jelikož Virtuoso od verze 5 používá multiverzování. Inserty a delete nekomitlých transakcí nejsou vidět
pozn.: zápisy na sebe čekají vždy
Další možnosti
- procedury DB.DBA.TTLP - loading from turtle, DB.DBA.RDF_LOAD_RDFXML jsou vykonány v rámci rodičovských transakcí (insert metadat a rdfxml lze provést jako jednu transakci)
- lze nastavit transaction_timeout
- lze ovlivnit výkonnost pro kurzory nastavením eskalací zámků z row na page pomocí LOCK_ESCALATION_PCT funkce
- Potencionálně perspektivní se mi jeví ještě článek 9.25 Anytime Queries z Virtuoso dokumentace, to jsem však již netestoval