Domanda

Non sono un grande programmatore VB, ma ho il compito di mantenere / migliorare un'applicazione desktop VB6 che utilizza Sybase ASE come back-end. Questa app ha circa 500 utenti.

Di recente, ho aggiunto funzionalità a questa applicazione che esegue un inserimento / aggiornamento aggiuntivo in una singola riga nel database, il campo chiave è il numero di transazione e il campo è indicizzato. La tabella da aggiornare generalmente contiene circa 6000 record, poiché i record vengono rimossi al completamento delle transazioni. Dopo la distribuzione, l'app ha funzionato bene per un giorno e mezzo prima che gli utenti segnalassero prestazioni lente.

Alla fine, abbiamo rintracciato il problema delle prestazioni a un blocco della tabella nel database e abbiamo dovuto ripristinare la versione precedente dell'app. Il primo giorno di utilizzo è stato lunedì, che in genere è un giorno molto pesante per l'uso del sistema, quindi sono confuso perché il problema non è apparso in quel giorno.

Nel codice in atto, c'è una chiamata per avviare una transazione Sybase. All'interno del blocco tra BeginTrans e CommitTrans, è presente una chiamata a un file DLL che aggiorna il database. Ho inserito il mio nuovo codice in un modulo di classe nella DLL.

Sono confuso sul perché un singolo inserimento / aggiornamento su una singola riga causerebbe un tale problema, soprattutto perché il sistema funzionava bene prima della modifica. È possibile che abbia esposto un problema più grande qui? O che ho solo bisogno di riconsiderare il mio approccio?

Grazie in anticipo per chiunque sia stato in una situazione simile e possa offrire consigli.

È stato utile?

Soluzione

Si scopre che il colpevole era una finestra di messaggio che appare nell'ambito delle chiamate BeginTrans e CommitTrans. L'utente con la finestra di messaggio manterrebbe un blocco di blocco sul database fino a quando non riconoscerà il messaggio. La soluzione era spostare la finestra di messaggio al di fuori del suddetto ambito.

Altri suggerimenti

Non riesco a capire il quadro completo senza il codice SQL che stai utilizzando.

Inoltre, se si tratta di un singolo aggiornamento OR aggiornamento, perché stai usando una transazione? È possibile che molti utenti provino ad aggiornare la stessa riga?

Sarebbe utile se hai pubblicato sia il codice VB che il tuo SQL (se possibile con il piano di query). Tuttavia con le informazioni che abbiamo; Esegui aggiorna statistiche table_name contro la tabella per assicurarmi che il piano di query sia aggiornato.

Se sei sicuro che il tuo codice debba essere eseguito all'interno di una transazione, hai provato ad aggiungere il tuo blocco di transazione contenente il tuo SQL anziché utilizzare quello già presente?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top