|
||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
PostgreSQL (15) - TransakceTransakce patří k základním mechanismům práce s daty na databázovém
serveru, zejména pak při aktivních operacích (UPDATE, INSERT, DELETE).
K čemu slouží transakcePři jakékoliv operaci může dojít k chybě při práci s daty, ať již pádem serverové služby, nebo špatně položeným dotazem. Teoreticky se při SELECTu tak mnoho neděje, jen aplikace nezíská všechna potřebná data, ale při zadávání nových záznamů, jejich změnách, či mazání by mohl nastat velmi závažný problém s integritou dat.
Modelový příklad může být změna změna cen v elektronickém obchodě,
například z konkurenčních důvodů. Po zadání příkazu Popisovaný příklad navíc nepočítá se změnami, které mohou probíhat na dalším připojení k databázi z aplikace spuštěné na jiném počítači. Například z jiného místa bude změněn popis zboží, čiže timestamp by mohl nasvědčovat tomu, že cena již byla aktualizována byla. Tyto problémy se řeší jednodušeji, než se zdá, pomocí tzv. transakčního zpracování, které je sice o malinko pomalejší, ale odolná vůči těmto problémům. Transakce v podstatě zajišťují, že pokud není příkaz provedený do konce korektně a není tudíž potvrzen, nejsu změny přístupné v následujících příkladech. V příkladě, který byl napsán o několik řádků výše to znamená, že pokud nastane chyba, když bude mechanismus db serveru aktualizovat 1028 řádek, tak nebude uloženo ani těch prvních 1027 řádek se změněnou cenou. Každý příkaz, který je odeslán na PostgreSQL server je "obalen" v samostatné transakci, a pracuje nad obrazem dat, který byl k dispozici v momentě zahájení transakce. Trochu problém by mohl nastat pokud by měnění dat bylo prováděno z vícero míst současně, protože by server nemusel být schopen sestavit správně všechny změny, které byly zadány, takže v tomto místě k transakcím ještě přistoupí zamykání tabulek, se kterými se seznámíme v příštím díle. Transakční módy a módy čteníPostgreSQL server nabízí několik módů, ve kterých může data zpracovávat v transakcích (pro ty jsou módy 4) a další 3 módy pro čtení. Módy transakcí:
Módy čtení:
Aby vše nebylo úplně jednoduché, není možné kombinovat módy transakcí s módy čtení kombinovat zcela libovolně, ale PgSQL si tuto režii, který mód bude použit zařizuje sám, jen na základě nastaveného transakčního módo. Tabulka, z originální dokumentace, ukazuje, které módy transakcí a čtení nesmí být zkombinovány a z těch povolených je už jen na serveru, který použije. Seskupení příkazů do transakce
PostgreSQL server pracuje v tzv. Autocommit módu, kdy každý
příkaz je "obalen" ve své vlastní transakci, čímž je předejíto možnosti
chyb, která byla naznačena v modelovém příkladě. V řadě případů je
nutné mít explicitně v jedné transakci několik SQL příkazů. K tomu slouží pár příkazů
Příkaz BEGIN má několik doplňkových parametrů, čiže jeho výsledný tvar má následující možnosti: Pro ukončení transakce jsou k dispozici 2 příkazy, jeden pro potvrzení transakce, který se jmenuje COMMIT [WORK | TRANSACTION] a druhý je ROLLBACK [WORK | TRANSACTION], který slouží pro zrušení transakce, tudíž veškeré změny jsou zahozeny. Tyto příkazy jsou posílány z aplikace, takže není problém kdykoliv v průběhu práce s daty, nebo při chybě odchycené v aplikaci, transakci zrušit. Pro vysvětlení: při nastartování transakce z aplikace, a zadávání dalších příkazů z této, server standardně reaguje například na chybně zadaná data (řetězec do čísla, ...), takže chyba je oznámena standardním mechanismem aplikaci, tudíž je možné na ní zareagovat, například zrušením transakce.
Užitečnou vlastností při
používání transakcí je možnost vytvořit si návratové body, tzv.
SAVEPOINTs. Vytvářejí se klíčovým slovem Kromě výše uvedených příkazů lze pro všechny operace používat "centrální" nastavení vlastností transakcí příkazem Dodatky k transakcímTransakce, tak jak je nabízí PgSQL nejsou ekvivalentní k možnostem, které má MySQL, dokonce ta je nemá na svých MyISAM tabulkách, ale je třeba použít InnoDB tabulky. V MySQL znamená přechod na InnoDB tabulky dokonce zpomalení celé databáze, bohužel. Byť je režie transakcí pro databázi zpomalující, může být soustředění několika příkazů do jedné transakce přínosné pro výkon databáze jako takové, vůči stavu bez jejich použití. Jak bylo napsáno, PgSQL pracuje v tzv. Autocommit módu, tj. je-li na server posláno několik nesouvisejících příkazů (čiže logicky by nebylo třeba je obalovat startem a ukončením transakcí), jsou tyto vykonávány jeden za druhým s tím, že pro každý extra je otevírána a potvrzována transakce, ale v případě že je explicitně nastartována transakce, jsou vykonány všechny změny, které jsou do ní promítnuty teprve po jejím potvrzení. Transakce přináší také vyšší nároky na diskový prostor. V případě, že má databáze 800 MB a příkazy seskládanými v transakci bude ovlivněno 500MB, je třeba mít volných těchto 500MB v paměťovém/diskovém prostoru serveru. --Jednoduse nastartovana a potvrzena transakce Tyto příklady jsou jen na to, jak mohou být příkazy za sebou seskládány, ale většinou budou tyto posílány z aplikace, čiže bude možná interakce s chybami, které vrátí PgSQL server do aplikace, případně reakce na chyby uživatele aplikace při změnách dat. ZávěremCílem tohoto dílu bylo seznámit se s transakcemi a jejich použitím. V příštím díle bude probráno zamykání tabulek, čímž lze dopomoci k vyšší úrovni integrity dat.
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |