Newsgroup: it.comp.appl.access
Titolo: lentezza db: problemi tra access97 e la rete??

ciao a tutti.
 vi espongo il mio problema. io distribuisco una applicazione che
fino all'inizio dell'anno era in access 2.0 e che adesso viene
aggiornata a access 97.
la versione in access 2.0 consisteva in diversi database condivisi su
un server a cui accedevano tutti gli utenti.
la versiona in access 97 ha la parte programmi (file mde) in locale e
la parte dati condivisa su un server.
ora tutti i miei clienti sono rimasti molto contenti
dell'aggiornamento tranne uno, a cui il passaggio a access 97 ha
comportato un enorme rallentamento dei tempi di esecuzione del
programma.
io gli ho fatto cronometrare diversi eventi nel programma (apertura
di maschere, di report e di altri database, alcuni che comportano
solo e unicamente l'esecuzione di query, altri che comportano una
massiccia esecuzione di codice) in diverse situazioni:
1. con la versione vecchia in access 2.0 (tutto sul server): il pc
risponde istantaneamente, tranne per le operazioni più "pesanti" per
cui impiega al massimo 5 secondi);
2. con la nuova versione in access 97 (mde in locale, dati sul
server) per l'operazione più complessa impiega 12 secondi,  contro i
3 della versione precedente, per tutte è comunque più lento della
versione in access 2.0;
3. con la nuova versione in access 97 ma con in locale i file mdb
anzichè gli mde: stesse prestazioni del punto 2;
4. con la nuova versione in access 97 ma con anche gli mde sul server
(ho + o - riprodotto la situazione che c'era con access 2.0):
prestazioni simili a quelle del punto 2, solo un po' più lente;
5. con la nuova versione in access 97 ma con anche i dati in locale:
è tutto istantaneo;
6. cambiando server: prestazione peggiore in assoluto.
io da tutto ciò deduco che non è un problema di server (anche perchè
è lo stesso della versione in access 2.0), non è un problema di
macchina (è più lento su tutti i pc), mi viene da pensare che sia un
problema di access 97 con la rete.
qualcuno di voi mi sa indicare delle impostazioni/dll/qualsiasi altra
cosa da verificare?
aspetto suggerimenti
ciao e grazie
Robby

 ha scritto nel messaggio
news:ai3fvd$58l$1...@fe1.cs.interbusiness.it...

Ci manca l'esecuzione di 2.0 con FE in locale e BE in remoto:
secondo me anche questa potrebbe essere lenta, in quanto con queste
situazioni, sulla rete viaggiano tutti i dati e poi la query viene eseguita
in locale.
La vecchia versione 2, con tutto sul server faceva viaggiare solo il
risultato (forse) mentre adesso no.
Maybe...
Antonio

 ha scritto nel messaggio
news:ai3fvd$58l$1...@fe1.cs.interbusiness.it...

L'hardware di rete è tutto a 100Mb/s?
Ciao.
--
Sergio MAZZA

 L'hardware di rete č tutto a 100Mb/s?
non lo so.
in piů nell'azienda non hanno un ced interno, ma una ditta di
consulenza che gli manda un tecnico quando hanno bisogno.
inoltre l'azienda in questione č a novara e io sto a reggio emilia,
quindi di persona non riesco a verificare. o meglio, io riesco a
collegarmi ad un loro pc con pcanywhere, ma la mia ignoranza mi fa
fermare qui: esiste una qualche funzione che da pc mi dice le
caratteristiche della rete?

 Antonio
una prova completa non riesco a farla (dovrei perdere almeno 2
settimane per rivedere tutto il codice).
ho fatto una prova parziale creando un db nuovo che ho messo in
locale, collegandoci le tabelle dal server, e lanciando un report
abb. complesso che con access 97 ci mette 5-6 secondi ad aprirsi, con
access 2.0 tutto sul server ce ne mette poco piů di 1, e con questo
mio nuovo db ce ne mette 2.
a questo punto?

 ha scritto nel messaggio
news:ai3fvd$58l$1...@fe1.cs.interbusiness.it...

Ciao, Robby
credo che il problema è da risolvere a livello di registro di sistema.
Nella seguente chiave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Jet 3.5
trovi una lista di valori che se opportunamente impostati faranno schizzare
il db.
Le impostazioni di default sono restrittive e non prevedono l'ottimizzazione
per un uso in rete.
Se per esempio la voce MaxBufferSize è impostata a zero (decimale). Una
impostazione di 512 o più alta migliora di molto le prestazioni.
Per sapere quanta ram assegnare a MaxBufferSize applicare la formula che
puoi trovare nella guida alla voce:
Inizializzazione del driver e poi scegliere Inizializzazione del driver del
modulo di gestione di database Microsoft Jet 3.5
((TotalRAM in MB - 12 MB) / 4) + 512 KB.
Tale formula credo contenga un errore perchè il dato va impostato in Kb e
non in Mb
Per esempio su una macchina con 256 Mb di memoria: 256 * 1024 = 262144  -
12288 (12 * 1024) = 249856 / 4 =  62464 + 512 = 62976
62976 è il valore da inserire cioè  61,5 Mb.
Se invece faccio il calcolo in Mb ottengo: (256 - 12) / 4 =  61 +  512 = 573
Credo che il primo valore sia quello corretto. Comunque puoi iniziare con
1024 e aumentare di 1024 alla volta.
Ancora RecycleLVs va impostato a zero.
Il tutto se usi Access 97 con jet 3.5 e sulla macchina client oltre che sul
server.
Ci sarebbe molto ancora da dire ma tutto si risolve in una corretta
impostazione del registro.
Ciao, Carlo

 impostazione del registro.
Mi dici anche dove posso trovare info in merito che smidollo l'help?
Tks MAsssimiliano


Ciao Massimiliano.
Ti ricordo che prima di operare sul registro di configurazione e bene farne
una copia.
Da Avvio...esegui...regedit...(invio)
selezioni HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Jet 3.5 o
Jet 4.0
Su MSDN immettendo una delle chiavi del registro come criterio della ricerca
trovi una miriade di informazioni.
Per esempio ecco quello che dice per MaxBufferSize:
MaxBufferSize
Microsoft Jet reads and writes data in 2K pages, placing the data in a
temporary holding area called the buffer as required by its operations. By
default, when performing operations that add, delete, or update records and
that aren't part of an explicit transaction, Microsoft Jet automatically
performs internal transactions that group changes to records and temporarily
saves them in the buffer. After a specified time, or when the size specified
by the MaxBufferSize setting is exceeded, it then writes the data as a chunk
to the database. This minimizes the time spent reading and writing data to
the database. Additionally, Microsoft Jet can minimize the time spent
reading data for tables, queries, forms, or reports by reading available
data from its buffer.
See Also   For information about other settings that regulate the management
of transactions, see "ImplicitCommitSync," "ExclusiveAsyncDelay," and
"SharedAsyncDelay" later in this section.
The MaxBufferSize setting specifies a "high water mark" for the size of the
buffer that Microsoft Jet uses to work with records in memory, measured in
kilobytes. Microsoft Jet can temporarily exceed the MaxBufferSize. As soon
as it does, however, it starts a background thread to write data to the
database to bring the buffer's size down to the specified "high water mark."
By default, Microsoft Jet allocates memory for its internal buffer on an
as-needed basis up to the MaxBufferSize. The default value written in the
Windows Registry for the MaxBufferSize setting when Access is installed is
0, which indicates that Microsoft Jet calculates the setting based on the
following formula:
((Total RAM in K - 12,288)/4 + 512K)
For example, on a system with 32 MB of RAM (32,768K), Microsoft Jet uses a
MaxBufferSize setting of 5,632 KB.
You can override the default calculated setting by specifying a different
MaxBufferSize value. This sets a new "high water mark." The minimum value
that Microsoft Jet uses by default is 512K, but you can specify a value as
low as 128K. However, setting the MaxBufferSize to a value less than 512K is
not recommended for Access applications because it can seriously degrade
performance.
For computers with 16 MB or less of installed RAM, there is generally no
need to override the calculated setting. For computers with 32 MB of RAM,
you may see some performance improvement when specifying a larger
MaxBufferSize if no other applications are running at the same time as
Access. For example, tests have shown performance improvements in
applications that perform large transactions when a MaxBufferSize as large
as 8 MB is specified.
Specifying a MaxBufferSize larger than 8 MB hasn't been found to increase
performance. Setting a value too high can degrade performance due to the
added CPU overhead needed to manage the cache, and due to the fact that the
operating system may start swapping Microsoft Jet's cache to disk as virtual
memory.
Note   When specifying a MaxBufferSize setting that is larger than the
default, you should also increase the SharedAsyncDelay setting to increase
the time that data is held in the buffer. If you don't increase the
SharedAsyncDelay setting, Microsoft Jet writes the contents of its buffer to
the database before it has had time to utilize the additional memory you
specified. For more information about the SharedAsyncDelay setting, see
"SharedAsyncDelay" later in this section.
Ciao, Carlo

"Carlo Costarella"

Mai provate queste impostazioni ... lo farò quanto prima ;-)
Però una domanda sorge spontanea: credi diminuiscano l'affidabilità del .mdb
condiviso?
Ciao, Max

 Mi dici anche dove posso trovare info in merito che smidollo l'help?
Per impostare queste opzioni a Run-Time puoi usare i metodi SetOption e
GetOption (DAO) senza modificare in modo permanente il registro.
Io avevo provato qualcosa con JET 4.0  ma i risultati erano deludenti (forse
sbagliavo qualcosa).
Ciao, Max


L'affidabilità del db non viene compromessa a patto di seguire correttamente
le impostazioni.
Per fare ciò affidati sicuramente a MSDN.
Tieni presente che le suddette impostazioni possono essere impostate anche
solo per il db che distribuisci e nel momento che l'utente apre
l'applicativo.
Per fare questo comincia a leggerti SetOptions.
Ciao, Carlo

 Mai provate queste impostazioni ... lo farò quanto prima ;-)
Per meglio dire: mai provate con Jet 3.5 ... col 4.0 mi pareva non dessero i
risultati sperati.

 l'applicativo.
 >Per fare questo comincia a leggerti SetOptions.
Come già accennato l'anno scorso ho perso qualche mezz'ora sulla questione
ma senza risultati.
Due ipotesi:
1) Jet 4.0 non patchato se ne sbatte di maxbuffersize
2) ho sbagliato l'assegnazione dei parametri
Comunque proverò quanto prima con la versione '97.
Ciao, Max

 impostazione del registro.
ciao Carlo, innanzitutto grazie per il suggerimento, ma non ha
funzionato.
il pc ha 128 MB di RAM. RecycleLVs era già impostata a zero. io ho
provato a impostare MaxBufferSize (che prima era a zero) prima a
1024, poi a 4096, poi a 8192 infine al risultato esatto della formula
che mi viene 30208. ma le prestazioni non sono migliorate.
MaxBufferSize l'ho impostata prima con base decimale (come avevo
capito fosse corretto fare dalla ua mail), poi mi è sorto il dubbio e
l'ho impostata a 30208 a base esadecimale ma niente da fare nemmeno
così.
esistono altre chiavi di registro da sistemare?
aspetto altri suggerimenti (o correzioni, nel caso io abbia cannato
qualcosa)
intanto grazie
Roberta

 > > 62976 č il valore da inserire cioč  61,5 Mb.
Ho impostato 62976 su base esadecimale, bene cosě?
Grazie di vero cuore.
MAssimiliano

 qualcosa)
Una domanda sorge spontanea: ieri hai scritto d'aver installato
l'applicazione ad altri che si sono ritenuti molto soddisfatti.
Significa che le prestazioni da altre parti sono buone?
In tal caso magari devi indagare su altri fattori software (alcuni antivirus
sui clients rallentano molto).
Ciao, Max

 Ciao, Max
gli altri miei clienti sono 3.
1 ha una postazione sola, quindi tutto in locale, quindi va a
scheggia.
1 altro ha 6-7 postazioni e per adesso sono contenti.
1 altro (il mio cliente + grosso) ha 12-15 postazioni che accedono al
programma, e sono contenti. stamattina gli ho fatto cronometrare i
tempi per gli stessi eventi che ho fatto cronometrare al mio cliente
scontento.
quelli del programma nuovo sono simili. i tempi del programma vecchio
erano più lenti dal cliente contento (che quindi nell'aggiornamento
ha sentito meno il rallentamento).
non sono molto sicura di essermi spiegata bene, se non ci sono
riuscita ditemelo.
insomma, indagando pian piano ho scoperto che il cliente scontento ha
grossomodo le stesse prestazioni di quelli contenti.
e quindi non so come fare a salvare la faccia. ma in un qualche modo
mi arrangerò.
resta il fatto che anche qui in sede da me il mio pc (win98, 128 MB
di RAM, ci sono installati sopra access 2.0, 97 e 2000) ha dei tempi
simili a quelli del mio cliente scontento, il pc del collega accanto
a me (con win nt, sempre 128 MB di RAM, ci sono installati sopra
access 2.0 e 97) ha dei tempi dimezzati rispetto ai miei.
non ci capisco più niente.
se qualcuno avesse qualche altro suggerimento.....
ciao
Roberta

 ha scritto nel messaggio
news:ai6813$fkk$1...@fe2.cs.interbusiness.it...


 > >

HP te ne ha già dati un paio buoni.
Eccone altri due
1) Leggi bene le istruzioni per ottimizzare i tempi delle tabelle collegate
(soprattutto l'apertura di connessioni persistenti al BE)
2) Per installazioni così onerose  (più di dieci posti sono tanti per un
File-Sharing) cominciate a sperimentare Microsoft Terminal Server: ne vale
la pena te l'assicuro.
Ciao, Max


Non lo so se c'è qualche funzione, io di solito guardo i led (quando ci
sono) delle schede di rete/hub; se sono gialle trasmettono a 100Mb/s.
E' un metodo un po' rozzo ma veloce...
Ciao.
--
Sergio MAZZA