2010-07-03 42 views
8

Bir işlem başlatıyorum.InnoDB işlemi sırasında bekleyen sorgular alabilir miyim?

Sonra geri almam gerekiyor.

Bu şekilde "atılır" olan sorguların bir listesini alabilir miyim?

(ps: Tabii ait Bunları biz daha önceden giriş yapabilirsiniz; bu daha "doğal" bir şekilde yapılabilir acaba)

+0

Bence doğal yol önceden bunları kaydetmektir. İşlemin ne olduğunu bilmiyorsanız, geri almak istediğinizi nasıl anlayabilirsiniz? –

cevap

1

Eğer InnoDB kullanıyorsanız, InnoDB monitor bakmak ve stderr. En iyi uygulamanın onları uygulamaya (sunucuya) depolamak olduğunu düşünüyorum, çünkü bu platforma bağımlı olmayacaktır. Son zamanlarda bir MySQL 5.1 kullanıyorsanız

2

, bu çalışması gerekir:

GÖSTER MOTOR InnoDB DURUMU InnoDB'nin motoru için aktif işlemlerin bir listesini içerir. Her bir işlem kimliği ve işlem kimliği ile öneki ve bunun gibi biraz görünüyor: Eğer GÖSTER TAM processlist veya INFORMATION_SCHEMA dan alabilirsiniz, MySQL iplik kimliğin, oturumun bağlantı_kimliği() karşılık gelecektir

---TRANSACTION 0 290328284, ACTIVE 0 sec, process no 3195, OS thread id 
34831 rollback of SQL statement 
MySQL thread id 18272 
<query may be here> 

.processlist, hangi işlemin sizin olduğunu belirleyebilirsiniz. Varsa, metni ayrıştırmanız ve sorguyu bununla ayrıştırmanız gerekir.

Bu yeterli değilse, her ROLLBACK deyiminden önce SET @PROGRESS = @ PROGRESS + 1 gibi bir şey deneyebilir ve daha sonra işlemin ne kadar ileri gittiğini öğrenmek için sorgunun sonunda DUAL SELECT @PROGRESS seçeneğini kullanabilirsiniz. bir geri dönüşe çarptı.

+0

unluckily 'ERROR 1227 (42000): Erişim reddedildi; Bu işlem için SUPER ayrıcalığına ihtiyacınız var :(( –

+0

Ayrıca, herhangi bir sorgu zaten yok:/ –

+0

Sorgunuz hızlıysa, bu yöntemin çalışması için çok hızlı bir şekilde kaymış olabilir. InnoDB monitörünü Marcus tarafından önerildiği gibi deneyebilirsiniz. Ancak, sorgunuz hızlıysa, monitör aralığını çok küçük olacak şekilde ayarlamanız gerekebilir! –

İlgili konular