2009-05-19 16 views
7

मेरे पास क्वार्ट्ज 1.6.1 डब्ल्यू/लगातार नौकरी स्टोर चल रहा है, MySQL 5.1 के साथ डीबी के रूप में। यह एप्लिकेशन Tomcat6 में ठीक बूट करने के लिए प्रयोग किया जाता था।लगातार समस्या निवारण "SQLException: लॉक प्रतीक्षा टाइमआउट पार हो गया"

- MisfireHandler: Error handling misfires: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction 
org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction [See nested exception: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction] 
    at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:112) 
    at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:112) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3075) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.manage(JobStoreSupport.java:3838) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3858) 
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) 
    at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:92) 
    ... 4 more 

मैं इस आवेदन भी w/हाइबरनेट डेटा स्रोत कनेक्शन पूलिंग के लिए C3P0 का उपयोग कर जेपीए इस्तेमाल का उल्लेख करना चाहिए: कुछ बिंदु पर, यह हर बूट पर निम्न अपवाद फेंकने शुरू कर दिया। जेपीए मेरी स्कीमा को अपडेट करने के बाद यह अपवाद हमेशा सीधे फेंक दिया जाता है।

सबसे पहले, मैंने क्वार्ट्ज 1.6.5 में अपग्रेड किया और अपवाद दूर चला गया, लेकिन एप्लिकेशन जमे हुए दिखाई देता है। जहां अपवाद हुआ करता था - - लॉग में आखिरी बात है:

...hbm2ddl stuff... 
2969 [Thread-1] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - schema update complete 
- Handling 6 trigger(s) that missed their scheduled fire-time. 
कुछ भी नहीं के बाद आने वाले, और webapp अनुरोध सर्विसिंग नहीं के साथ

; वे बस अनिश्चित काल तक लटका।

जब मैं चलाने mysqlशो InnoDB स्थिति सही अपवाद के बाद, यह लगातार दो संदिग्ध लेन-देन दर्शाएं है साथ कमांड लाइन ग्राहक:

---------- 
SEMAPHORES 
---------- 
OS WAIT ARRAY INFO: reservation count 49, signal count 49 
Mutex spin waits 0, rounds 2100, OS waits 0 
RW-shared spins 115, OS waits 49; RW-excl spins 0, OS waits 0 
------------ 
TRANSACTIONS 
------------ 
Trx id counter 0 165688 
Purge done for trx's n:o < 0 165685 undo n:o < 0 0 
History list length 12 
LIST OF TRANSACTIONS FOR EACH SESSION: 
---TRANSACTION 0 0, not started, OS thread id 5012 
MySQL thread id 8, query id 1798 localhost 127.0.0.1 root 
SHOW INNODB STATUS 
---TRANSACTION 0 165687, ACTIVE 300 sec, OS thread id 3772 
2 lock struct(s), heap size 320, 1 row lock(s) 
MySQL thread id 30, query id 1795 localhost 127.0.0.1 my_app 
---TRANSACTION 0 165685, ACTIVE 360 sec, OS thread id 5460 
2 lock struct(s), heap size 320, 1 row lock(s), undo log entries 1 
MySQL thread id 34, query id 1680 localhost 127.0.0.1 my_app 

मैं पर कैसे मार्गदर्शन के लिए देख रहा हूँ करने के लिए आगे इस मुद्दे की जांच करें। शायद अगर मैं किसी भी तरह इन दो लेनदेन के मालिकों की पहचान कर सकता हूं, या वे किस संसाधन को लॉक कर रहे हैं?

अद्यतन: मैं समस्या के बिना तालिका qrtz_simple_triggers में सभी पंक्तियों को नष्ट कर दिया। मैंने फिर qrtz_triggers तालिका पर ऐसा करने की कोशिश की और मेरे MySQL क्लाइंट ने "लॉक प्रतीक्षा टाइमआउट पार हो गया" त्रुटि फेंक दी। इस बिंदु पर मैंने अपना (अभी भी लटका) आवेदन बंद कर दिया और फिर qrtz_triggers तालिका की सभी पंक्तियों को हटाने में सक्षम था। एक बार ऐसा करने के बाद मैं अपने आवेदन को सफलतापूर्वक बूट करने में सक्षम था।

ऐसा प्रतीत होता है कि मुझे एक नई क्वार्ट्ज बग लॉग करने की आवश्यकता है, लेकिन मैं वास्तव में यहां वास्तव में क्या हो रहा है के बारे में अधिक जानकारी देने में सक्षम होना चाहता हूं। इसलिए, मूल प्रश्न के अनुसार, मैं इन प्रकार के मुद्दों का निवारण कैसे कर सकता हूं?

उत्तर

1

आप mysql कमांड लाइन से
show processlist
या
show full processlist
चलाने का भी प्रयास किया है? ये आमतौर पर आपको लॉकिंग की क्वेरी के लिए पूर्ण एसक्यूएल दिखाएंगे। यह आपको यह भी दिखाएगा कि प्रक्रिया कितनी देर तक चल रही है। यह आपको जवाब के करीब आने में मदद कर सकता है।

संबंधित मुद्दे