MySQL Forums
Forum List  »  Italian

Tabelle bloccate
Posted by: Lucio Menci
Date: October 03, 2014 10:18AM

Salve a tutti.
Io non capisco cosa sta succedendo.
Ho un programma che esegue due processi. Il processo secondario, quando ha bisogno di effettuare determinati lavori esegue una select del tipo:
Begin Transactioon
Create Table PippoXXXX As Select * From MyTable Where KeyAAA = 'AAA';
Update OtherTables, PippoXXXX Set OtherTables.ColX = Exporession(PippoXXXX.) Where OtherTable.KeyAAA = PippoXXXX.KeyAAA
Delete PippoXXXX
Commit Transaction.
Attesa in media di 3 secondi
Connection.Close
con una connessione fatta così:
Connection TimeOut = 3
CommandTimeOut=5

Niente di particolare (senonché l'update viene fatto sotto determinati controlli, e posso decidere di fare il RollBack anziché il commit, ma generalmente è così).

Il processo principale fa operazioni come la seguente:
Delete * From MyTable Where KeyPrimary = XXXX;
Insert Into MyTables ([...]) Values ([...])
Con una connessione con CommandTimeOut = 60

Che succede? Se la connessione con il processo principale trova la connessione con il processo secondario aperta, non può fare il delete (la connessione in bacground lavora su tutta la tabella MyTable ed a volte impiega anche qualche secondo). Una volta però che la connessione secondaria termina il lavoro e dopo tre secondi si disconnette, la connessione principale non si accorge che la tabella è libera, e che può cominciare a scrivere. Dopo 60 secondi l'istruzione di Insert (non mi è mai capitato che desse l'errore il delete, ma può essere semplicemente per statistica), mi va in timeout.

Se eseguo Show Engine Innodb Status, mi ritorna che la tabella bloccata è bloccata a causa di una lettura della chiave KeyAAA, quindi dalla connessione secondaria.

A me sta bene anche che MySql si comporti in questa maniera assurda, ma mi deve permettere di trovare un escamotage.

Il problema: La connessione secondaria è unica in tutto il programma. Di quelle come la connessione principale ne ho migliaia. È possibile fare in modo di impostare la connessione secondaria che quella Create Table PippoXXXX As [...] non imposti il lock Read sulla tabella MyTable?

Options: ReplyQuote


Subject
Views
Written By
Posted
Tabelle bloccate
2111
October 03, 2014 10:18AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.