Microsoft Office Access |
|
|
Nedovoljno memorije za transakcijeNivo:
Koliko puta ste čuli nečiju izjavu "Access je suviše spor za ozbiljnije transakcije"? Može biti da je tako, ali predlažemo vam da najpre preduzmete neke mere za popravku performansi transakcija i za sprečavanje pojave poruka o grešci "nedovoljno memorije". Tek nakon zahvata koji ovde opisujemo, preispitajte valjanost tvrdnje o sporosti Accessa... Jedno od često ponavljanih problema (i vaših pitanja) se odnosi na poruku There isn't enough disk space or memory kojom Access obaveštava korisnika da se tražena operacija nad tabelom ne može izvesti jer nema dovoljno memorije, iako u sistemu ima i "viška" memorije i prostora na disku. Druga poruka o grešci, čiji uzrok je isti kao pri operaciji nad tabelom, je There isn't enough disk space or memory to undo the data changes this action query is about to make koja se javlja ako pokrenemo upit koji modifikuje, kopira, briše ili kreira tabelu (Action Query). Uzrok pojave greške leži u prevelikom broju transakcija koji je definisan u bazi Registry pod ključem MaxLocksPerFile. Naime, svaki slog baze "troši" po jednu od ove vrednosti i kada pređe otprilike 9.500, Access će prijaviti jednu od dve pomenute greške. Rešenje je povećati ovu vrednost, što se može učiniti na nekoliko načina. Za upite koji dodaju slogove u tabelu ili menjaju njen sadržaj potrebno je otvoriti karticu osobina upita i vrednost Use Transactions promeniti sa Yes na No.
Izmenom ove vrednosti, sve transakcije koje će upit načiniti svode se na jednu umesto na onoliko slogova koliko se modifikuje. U određenim situacijama čak je preporučljivo ovu osobinu postaviti na No jer se, osim izbegavanja pojave greške, brzina transakcije višestruko povećava, naročito u mrežnom okruženju gde je baza podeljena na FrontEnd i BackEnd delove. JetDatabaseEngine neće kreirati privremenu tabelu sa rezultatima rada upita, već će kompletnu transakciju jednovremeno obaviti direktno nad tabelom. U mrežnom okruženju to znači da će se cela transakcija obaviti u jednom paketu, umesto mnogo malih, koliko slogova transakcija sadrži. Drugim rečima, ovim ćete drastično smanjiti saobraćaj na mreži, a istovremeno drastično povećati performansu aplikacije. U uslovima gde se po svaku cenu mora održati konzistentnost baze, postoji realna opasnost da će doći do oštećenja tabele ukoliko dođe do prekida napajanja za vreme rada upita, pa savetujemo da ovu osobinu zadržite na vrednosti Yes, odnosno da povećate vrednost MaxLocksPerFile. Ukoliko nešto pođe naopako, Access će zahtevati od vas da se opredelite između snimanja izmena i odustajanja od snimanja. Vrednost izmenjenih tabela se može vratiti na prethodno stanje (pod uslovom da je osobina UseTransaction postavljena na No) korišćenjem ADO metode RollbackTrans, odnosno metode Rollback u DAO biblioteci. Vrednost MaxLocksPerFile se može povećati direktno u bazi Registry izmenom vrednosti pod ključem HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0 Osnovna vrednost je 9.500, a može se po potrebi povećati na bilo koju. Imajte u vidu da će se promena ove vrednosti odraziti na sve aplikacije koje koriste Jet mašinu.
Treći način predstavlja kompromisno i možda najefikasnije rešenje. Pre pokretanja upita za izmenu tabele, vrednost MaxLocksPerFile ćemo privremeno povećati, a po završetku rada vrednost će biti vraćena na osnovnu. U VBA programu, pre grupe instrukcija za izmenu tabela postavićemo sledeći red:
što će biti dovoljno za približno 15000 transakcija. Brojka se može povećati na vrednost maksimalno očekivanih transakcija.
|
|
Vrh stranice Prethodna stranica Naslovna strana Mapa sajta Pretraga |
| AFORIZAM ZA DANAS | OVIH DANA SLUŠAMO... |
| Copyright © Praktikum na Webu, 2000-2009; Valinor Design; sva prava pridržana. |