2010-03-23 13 views

risposta

9

Non è possibile per le serrature senza nome!

Maggiori informazioni: http://forums.mysql.com/read.php?21,222363,223774#msg-223774

A meno che non si utilizza un lock consultivo prima. Si potrebbe anche voler esaminare utilizzando INSERIRE RITARDATO invece.

Tuttavia, è possibile utilizzare SHOW OPEN TABLES per mostrare lo stato di ogni tabella.

C'è anche qualcosa di terribile come "MetaLock" e sono felice che tu non l'abbia incontrato.

2

Questo article descritto come ottenere informazioni sulle risorse di MySQL bloccate. mysqladmin debug potrebbe anche essere di qualche utilità.

+1

la sua multa ma per quanto riguarda il blocco di MyISAM? evviva – Marcin

+0

Spiacente, non posso aiutarti lì. –

4

È possibile creare il proprio lucchetto con GET_LOCK (lockName, timeout)

Se fate una GET_LOCK(lockName, 0) con 0 time out prima di bloccare le tabelle e poi seguire che con un RELEASE_LOCK(lockName) poi tutti gli altri thread l'esecuzione di un GET_LOCK() otterrà un valore di 0 che dirà loro che il blocco è trattenuto da un altro thread.

Tuttavia, questo non funzionerà se non si hanno tutti i thread che chiamano GET_LOCK() prima di bloccare le tabelle. La documentazione per bloccare i tavoli è here

Sperare che aiuti!

+1

funziona solo per i blocchi denominati e per quanto riguarda i blocchi non denominati? – Marcin

+0

Non è possibile per i blocchi non denominati –

42

È possibile utilizzare SHOW OPEN TABLES per mostrare lo stato di blocco di ogni tabella. Ulteriori dettagli sulla pagina doc del comando sono here.

0

Il modo più semplice è:

SHOW OPEN TABLES WHERE In_use > 0 

si ottiene il tabelle bloccate solo del database corrente.