It is currently 8 June 2025, 20:23 Advanced search

query di pannello in sola lettura e LOCK DB

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

query di pannello in sola lettura e LOCK DB

Postby Federico » 18 July 2024, 13:47

Buon giorno sono alla ricerca di consigli per un problema di lock su db microsoft sql.

Applicazione web realizzata con inde foundation panello con query di pannello un imdb con un paio di campi filtro ( una lista con l'anno ed una con i mesi cose di questo tipo)
la query è semplice un join alcuni campi a video.

questa cosa serve per mostrare alcuni dati che normalmente non ci dovrebbero essere.

la medesima tabella e scritta e cancellata da altre procedure non necessariamente fatte da programmi inde.

quel che accade è che il pannello vuol mostrare dati che qualcuno sta cancellando ed ottengo il lock.
Non volendo modificare le impostazioni di isolamento del db cosa si potrebbe fare ?


pensavo alla possibilità di mettere un time out breve sulla query ma non saprei se è possibile su una query di pannello.

altra strada ma potrebbe essere solo tempo perso è di lanciare la query su un imdb e mettere a vido l'imdb. Ma non credo possa risolvere mi verrebbe da dire che non fa nessuna differenza con una query di pannello.
se ci metto anche un timer quando mi rilancia la query uccide il precedente lancio oppure aggiunge un lock al lock ?
User avatar
Federico
 
Posts: 116
Joined: 7 December 2010, 16:25

Re: query di pannello in sola lettura e LOCK DB

Postby r.bianco » 18 July 2024, 15:56

L'effetto che ottieni è che l'operazione di lettura da parte del pannello rimane in sospensione fino a quando la cancellazione non è avvenuta?
Oppure da proprio un errore?

Nel primo caso direi che non c'è molto da fare.
Nel secondo caso, proverei a:
intercettare l'errore
verificare se è quello previsto
attendere tramite sleep
riprovare la lettura

questo ciclo termina dopo n tentativi o se l'errore non è quello previsto
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4979
Joined: 8 November 2010, 16:46

Re: query di pannello in sola lettura e LOCK DB

Postby Federico » 19 July 2024, 6:28

Primo caso.

La select attende la cancellazione e la cancellazione attende la select.
occorre uccidere la select per sbloccare.
User avatar
Federico
 
Posts: 116
Joined: 7 December 2010, 16:25

Re: query di pannello in sola lettura e LOCK DB

Postby t.simoncini » 19 July 2024, 6:53

Avevo molti problemi di questo tipo. Ho risolto con l'utilizzo di viste DB per i pannelli di consultazione (con relativi miglioramenti di performance), lasciando l'uso delle tabelle solo per la scrittura/cancellazione.
t.simoncini
 
Posts: 1585
Joined: 5 March 2012, 14:00

Re: query di pannello in sola lettura e LOCK DB

Postby r.bianco » 19 July 2024, 6:59

pensavo alla possibilità di mettere un time out breve sulla query ma non saprei se è possibile su una query di pannello.


facendo così, potresti applicare il ciclo di cui parlavo

Ho risolto con l'utilizzo di viste DB per i pannelli di consultazione


ma forse questo è anche meglio
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4979
Joined: 8 November 2010, 16:46

Re: query di pannello in sola lettura e LOCK DB

Postby Federico » 19 July 2024, 7:04

t.simoncini wrote:Avevo molti problemi di questo tipo. Ho risolto con l'utilizzo di viste DB per i pannelli di consultazione (con relativi miglioramenti di performance), lasciando l'uso delle tabelle solo per la scrittura/cancellazione.

Interessante.
Una cosa che mi sfugge è proprio questa. avendo un pannello in sola lettura mi aspetterei che la select fosse in sola lettura non mi aspetterei un lock mentre mi mette in blocco le cancellazioni.

Grazie mi studio il suggerimento.
User avatar
Federico
 
Posts: 116
Joined: 7 December 2010, 16:25

Re: query di pannello in sola lettura e LOCK DB

Postby Federico » 19 July 2024, 7:09

r.bianco wrote:
pensavo alla possibilità di mettere un time out breve sulla query ma non saprei se è possibile su una query di pannello.


facendo così, potresti applicare il ciclo di cui parlavo

Ho risolto con l'utilizzo di viste DB per i pannelli di consultazione


ma forse questo è anche meglio



il time out sulla sola query di uno specifico pannello non saprei come farlo.

l'idea della vista è da provare.
Mi rimane il dubbio del perchè una pannello in sola lettura mi fa lock

Grazie
User avatar
Federico
 
Posts: 116
Joined: 7 December 2010, 16:25

Re: query di pannello in sola lettura e LOCK DB

Postby Federico » 19 July 2024, 8:45

Ho avuto un idea non so se funziona la devo provare.

cambio la query di pannello vado ad usare un select into collection oppure un imdb
definisco una funzione sotto la libreria database Various Functions per capirsi

la funzione la vado ad usare come un order by con il trucco facendo in modo che sia l'ultima e mi dovrebbe sparare dentro una cosa così 1 WITH (NOLOCK)

questo comando dovrebbe far funzionare la mia query senza prendere lock (sapendo che potrei mostrare un record non più valido ma nel mio contesto potrebbe anche andar bene) magari ci metto un timer per fare il refresh della query.

avevo provato una cosa simile con MAXDOP e funzionava (poi non lo ho usato ).

cosa ne dite ? il tarocco mi fa un po paura forse avevo anche aperto una richiesta di miglioria per poter passare nel modo corretto questi operatori particolari.
User avatar
Federico
 
Posts: 116
Joined: 7 December 2010, 16:25

Re: query di pannello in sola lettura e LOCK DB

Postby r.bianco » 19 July 2024, 10:48

cosa ne dite ?


Non conosco nello specifico questo tipo di soluzione, mi pare (in generale) interessante ma fragile. Inoltre (forse) stai legando la tua applicazione a sql server.
Se la lettura da vista non esegue il lock non è meglio usare quella?
Oppure prova, nella master qry del pannello, ad aggiungere una tabella in join. Forse in questo caso il framework inde non mette il lock.
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4979
Joined: 8 November 2010, 16:46

Re: query di pannello in sola lettura e LOCK DB

Postby t.simoncini » 19 July 2024, 12:16

r.bianco wrote:
cosa ne dite ?
Forse in questo caso il framework inde non mette il lock.

Non è il framework di INDE a mettere il lock. E' la strategia di gestione dei lock di base di SQL Server che li gestisce in maniera pessimistica (a differenza di Oracle, per esempio, che li gestisce in maniera ottimistica).
Se si ha voglia di approfondire l'argomento, c'è un bel po' di letteratura a riguardo on-line.
Io ho scelto la strada della vista perchè mi offre anche vantaggi di performance. Oltre al fatto che gestisco sempre i pannelli in lista in sola consultazione, e poi faccio l'edit su form di dettaglio specifiche con la DO.
t.simoncini
 
Posts: 1585
Joined: 5 March 2012, 14:00

Next

Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: Google [Bot] and 55 guests