मैंने बिना कमिटमेंट के कुछ सवाल किए। तब आवेदन रोक दिया गया था।
मैं इन खुले लेन-देन को कैसे प्रदर्शित कर सकता हूं और उन्हें रद्द या रद्द कर सकता हूं।
मैंने बिना कमिटमेंट के कुछ सवाल किए। तब आवेदन रोक दिया गया था।
मैं इन खुले लेन-देन को कैसे प्रदर्शित कर सकता हूं और उन्हें रद्द या रद्द कर सकता हूं।
जवाबों:
मैं इन खुले लेन-देन को कैसे प्रदर्शित कर सकता हूं और उन्हें रद्द या रद्द कर सकता हूं।
कोई खुला लेनदेन नहीं है, MySQL लेन-देन को डिस्कनेक्ट पर रोलबैक करेगा।
आप लेनदेन (IFAIK) नहीं कर सकते।
आप थ्रेड का उपयोग करके प्रदर्शित करते हैं
SHOW FULL PROCESSLIST
देखें: http://dev.mysql.com/doc/refman/5.1/en/thread-information.html
यह आपकी मदद नहीं करेगा, क्योंकि आप टूटे हुए कनेक्शन से लेनदेन नहीं कर सकते हैं।
MySQL डॉक्स से कनेक्शन टूटने पर क्या होता है : http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html
4.5.1.6.3। Mysql Auto-Reconnect को डिसेबल कर दें
यदि mysql क्लाइंट स्टेटमेंट भेजते समय सर्वर से अपना कनेक्शन खो देता है, तो यह तुरंत और स्वचालित रूप से सर्वर से एक बार फिर से कनेक्ट करने और फिर से स्टेटमेंट भेजने की कोशिश करता है। हालाँकि , भले ही mysql पुन: कनेक्ट करने में सफल होता है, आपका पहला कनेक्शन समाप्त हो गया है और आपके सभी पिछले सत्र ऑब्जेक्ट और सेटिंग्स खो गए हैं : अस्थायी टेबल, ऑटोकॉमिट मोड, और उपयोगकर्ता-परिभाषित और सत्र चर। साथ ही, कोई भी वर्तमान लेनदेन वापस आ जाता है ।
यह व्यवहार आपके लिए खतरनाक हो सकता है, क्योंकि निम्नलिखित उदाहरण में जहां सर्वर को बंद किया गया था और पहले और दूसरे बयान के बीच फिर से शुरू किया गया था, बिना यह जाने:
इसे भी देखें: http://dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html
इसका निदान कैसे करें और इसे ठीक करें
ऑटो-पुन: संयोजन के लिए जांच करें:
यदि एक स्वचालित पुन: संयोजन होता है (उदाहरण के लिए, mysql_ping ()) को कॉल करने के परिणामस्वरूप, इसका कोई स्पष्ट संकेत नहीं है। पुनः कनेक्शन की जांच करने के लिए, कॉल
mysql_thread_id()करने से पहले मूल कनेक्शन पहचानकर्ता को कॉल करेंmysql_ping(),mysql_thread_id()फिर यह देखने के लिए कॉल करें कि क्या पहचानकर्ता बदल गया है।
सुनिश्चित करें कि आप क्लाइंट में अपनी अंतिम क्वेरी (लेन-देन) रखते हैं ताकि जरूरत पड़ने पर आप उसे फिर से सबमिट कर सकें।
और स्वतः-पुन: कनेक्ट मोड को अक्षम करें, क्योंकि यह खतरनाक है, इसके बजाय अपने स्वयं के पुन: कनेक्ट को लागू करें, ताकि आपको पता चले कि जब एक बूंद होती है और आप उस क्वेरी को फिर से सबमिट कर सकते हैं।
mysqld.dllएकेए क्लाइंट का उपयोग करता है और आप SQL-स्टेटमेंट को रखते हैं जिसमें मेमोरी में पूर्ण लेनदेन होता है, ताकि कनेक्शन ड्रॉप होने पर आप इसे वापस खेल सकें। या आप इसे डिस्क पर स्थानीय रूप से रखते हैं, ताकि पुनरारंभ होने पर आप इसे फिर से सबमिट कर सकें।
हालाँकि, मामले में कोई भी शेष लेन-देन नहीं होगा, जैसा कि @ जोहान ने कहा, आप इनोओडीबी में वर्तमान लेनदेन सूची को नीचे दिए गए क्वेरी के साथ देख सकते हैं यदि आप चाहते हैं।
SELECT * FROM information_schema.innodb_trx\G
से दस्तावेज़ :
INNODB_TRX तालिका में वर्तमान में InnoDB के अंदर निष्पादित होने वाले प्रत्येक लेन-देन (रीड-ओनली ट्रांजेक्शंस को छोड़कर) के बारे में जानकारी शामिल है, जिसमें यह भी शामिल है कि क्या लेन-देन किसी लॉक का इंतजार कर रहा है, जब लेन-देन शुरू हुआ और SQL कथन लेन-देन को निष्पादित कर रहा है, यदि कोई हो।
\Gकि यदि आप mysql CLI टूल के भीतर क्वेरी आउटपुट स्वरूपित करना चाहते हैं, तो अंत में संशोधक केवल उपयोगी है। यदि आप GUI टूल का उपयोग करते हैं जैसे कि मैसकल वर्कबेन्च, तो आपको इसकी आवश्यकता नहीं है।
आप InnoDB इंजन के अंदर वर्तमान में लंबित सभी कार्यों की एक सूची प्राप्त करने के लिए show innodb status(या show engine innodb statusmysql के नए संस्करणों के लिए) का उपयोग कर सकते हैं । उत्पादन की दीवार में दफन लेनदेन होगा, और वे किस आंतरिक प्रक्रिया आईडी के तहत चल रहे हैं।
आप उन लेन-देन को कमिट या रोलबैक करने के लिए बाध्य नहीं कर पाएंगे, लेकिन आप उन्हें चलाने वाली MySQL प्रक्रिया को मार सकते हैं, जो अनिवार्य रूप से रोलबैक के लिए उबलती है। यह प्रक्रियाओं के कनेक्शन को मारता है और MySQL को इसके बायीं तरफ की गंदगी को साफ करने का कारण बनता है।
यहाँ आप क्या देखना चाहते हैं:
------------
TRANSACTIONS
------------
Trx id counter 0 140151
Purge done for trx's n:o < 0 134992 undo n:o < 0 0
History list length 10
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, process no 17004, OS thread id 140621902116624
MySQL thread id 10594, query id 10269885 localhost marc
show innodb status
इस स्थिति में, अभी InnoDB इंजन का केवल एक कनेक्शन है (मेरा लॉगिन, showक्वेरी चला रहा है )। यदि वह रेखा एक वास्तविक कनेक्शन / अटका हुआ लेन-देन था जिसे आप समाप्त करना चाहते हैं, तो आप तब करेंगे kill 10594।
show engine innodb status?
सबकी सूची बनाओ:
SHOW FULL PROCESSLIST
यदि आप इस आदेश का उपयोग करके हैंग ट्रांजेक्शन कॉपी ट्रांजेक्शन आईडी को मारना चाहते हैं और ट्रांजेक्शन को मारना चाहते हैं:
KILL <id> // e.g KILL 16543