यह कमांड पीटी-डेडलॉक-लॉगरप है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
पीटी-डेडलॉक-लॉगर - MySQL डेडलॉक्स लॉग करें।
SYNOPSIS
उपयोग: पीटी-डेडलॉक-लॉगर [विकल्प] डीएसएन
पीटी-डेडलॉक-लॉगर दिए गए डीएसएन पर MySQL डेडलॉक्स के बारे में जानकारी लॉग करता है। जानकारी
इसे "STDOUT" पर मुद्रित किया जाता है, और इसे "--dest" निर्दिष्ट करके तालिका में भी सहेजा जा सकता है।
टूल हमेशा के लिए चलता है जब तक कि "--रन-टाइम" या "--इटरेशन" निर्दिष्ट न किया गया हो।
होस्ट1 पर गतिरोध प्रिंट करें:
पीटी-डेडलॉक-लॉगर h=host1
होस्ट1 पर एक बार डेडलॉक प्रिंट करें और फिर बाहर निकलें:
पीटी-डेडलॉक-लॉगर एच=होस्ट1 --पुनरावृत्ति 1
होस्ट1 पर गतिरोधों को होस्ट2 पर percona_schema.deadlocks में सहेजें:
pt-deadlock-logger h=host1 --dest h=host2,D=percona_schema,t=deadlocks
जोखिम
Percona टूलकिट परिपक्व है, वास्तविक दुनिया में सिद्ध है, और अच्छी तरह से परीक्षण किया गया है, लेकिन सभी डेटाबेस
उपकरण सिस्टम और डेटाबेस सर्वर के लिए जोखिम पैदा कर सकते हैं। इस उपकरण का उपयोग करने से पहले,
कृप्या अ:
उपकरण के दस्तावेज़ीकरण पढ़ें
उपकरण के ज्ञात "बग्स" की समीक्षा करें
· गैर-उत्पादन सर्वर पर उपकरण का परीक्षण करें
· अपने उत्पादन सर्वर का बैकअप लें और बैकअप सत्यापित करें
वर्णन
पीटी-डेडलॉक-लॉगर "SHOW" पोलिंग और पार्सिंग द्वारा MySQL डेडलॉक्स के बारे में जानकारी प्रिंट करता है
इंजन INNODB स्थिति"। जब कोई नया गतिरोध होता है, तो इसे "STDOUT" पर मुद्रित किया जाता है और, यदि
निर्दिष्ट, "--dest" में सहेजा गया।
केवल नये गतिरोध मुद्रित किये जाते हैं। का उपयोग करके प्रत्येक गतिरोध के लिए एक फिंगरप्रिंट बनाया जाता है
डेडलॉक का सर्वर, टीएस और थ्रेड मान (भले ही ये कॉलम निर्दिष्ट न हों
"--कॉलम"). यदि उसका फ़िंगरप्रिंट पिछले से भिन्न है तो एक डेडलॉक मुद्रित किया जाता है
गतिरोध का फिंगरप्रिंट.
डुप्लिकेट गतिरोधों को खत्म करने के लिए "--डेस्ट" कथन "INSERT IGNORE" का उपयोग करता है, इसलिए प्रत्येक
प्रत्येक "--पुनरावृत्तियों" के लिए गतिरोध सहेजा जाता है।
आउटपुट
जब तक "--quiet" निर्दिष्ट नहीं किया जाता तब तक नए गतिरोध "STDOUT" पर मुद्रित होते हैं। त्रुटियाँ और चेतावनियाँ
"STDERR" पर मुद्रित होते हैं।
"--कॉलम" और "--टैब" भी देखें।
INNODB चेतावनियां और विवरण
InnoDB के आउटपुट को पार्स करना कठिन है और कभी-कभी इसे सही तरीके से करने का कोई तरीका नहीं है।
कभी-कभी सभी जानकारी (उदाहरण के लिए, उपयोगकर्ता नाम या आईपी पता) इसमें शामिल नहीं होती है
गतिरोध की जानकारी. इस मामले में टूल के पास उन कॉलमों में डालने के लिए कुछ भी नहीं है।
ऐसा भी हो सकता है कि गतिरोध आउटपुट इतना लंबा हो (क्योंकि वहां बहुत सारे थे
ताले) कि पूरी चीज़ को छोटा कर दिया गया है।
हालाँकि एक गतिरोध में आमतौर पर दो लेन-देन शामिल होते हैं, फिर भी अधिक ताले होते हैं
उस से जादा; कम से कम, एक चक्र बनाने के लिए लेन-देन से एक अधिक लॉक आवश्यक है
प्रतीक्षा-ग्राफ़। पीटी-डेडलॉक-लॉगर लेनदेन प्रिंट करता है (इनोडीबी में हमेशा दो)।
आउटपुट, तब भी जब वेट-फॉर ग्राफ़ में उससे अधिक लेनदेन होते हैं) और भरता है
ताले में. आउटपुट के लिए लॉक जानकारी चुनते समय यह अधिक प्रतीक्षा को प्राथमिकता देता है, लेकिन
आप एक पल के विचार से बाकी का पता लगा सकते हैं। यदि आप देखते हैं कि एक प्रतीक्षारत है और एक रुका हुआ है
लॉक, आप एक ही लॉक को देख रहे हैं, इसलिए निश्चित रूप से आप दोनों को वेट-फॉर देखना पसंद करेंगे
ताले लगाएं और अधिक जानकारी प्राप्त करें. यदि दो प्रतीक्षित ताले एक ही मेज पर नहीं हैं,
गतिरोध में दो से अधिक लेनदेन शामिल थे।
अंत में, ध्यान रखें कि, क्योंकि रिक्त स्थान वाले उपयोगकर्ता नाम InnoDB द्वारा उद्धृत नहीं किए गए हैं
टूल आम तौर पर इन उपयोगकर्ता नामों के दूसरे शब्द को होस्टनाम के रूप में गलत तरीके से रिपोर्ट करेगा।
विकल्प
यह उपकरण अतिरिक्त आदेश-पंक्ति तर्क स्वीकार करता है। "सिनॉप्सिस" और उपयोग का संदर्भ लें
विवरण के लिए जानकारी।
--आस्क-पास
MySQL से कनेक्ट करते समय पासवर्ड के लिए संकेत दें।
--चारसेट
संक्षिप्त रूप: -ए; टाइप करें: स्ट्रिंग
डिफ़ॉल्ट वर्ण सेट। यदि मान utf8 है, तो पर्ल के बिनमोड को STDOUT पर utf8 पर सेट करता है,
mysql_enable_utf8 विकल्प को DBD::mysql में पास करता है, और बाद में SET NAMES UTF8 चलाता है
MySQL से कनेक्ट कर रहा है। कोई अन्य मान utf8 परत के बिना STDOUT पर बिनमोड सेट करता है,
और MySQL से कनेक्ट होने के बाद SET NAMES चलाता है।
--स्पष्ट-गतिरोध
टाइप करें: स्ट्रिंग
एक छोटा सा गतिरोध पैदा करने के लिए इस तालिका का उपयोग करें। इसका आमतौर पर समाशोधन का प्रभाव होता है
एक बड़ा गतिरोध समाप्त हो जाता है, जो अन्यथा "SHOW INNODB" के संपूर्ण आउटपुट का उपभोग करता है
स्थिति"। तालिका मौजूद नहीं होनी चाहिए। पीटी-डेडलॉक-लॉगर इसे बनाएगा
निम्नलिखित संरचना:
तालिका बनाएं percona_schema.clear_deadlocks (
एक INT प्राथमिक कुंजी
) इंजन=इनोडीबी
तालिका बनाने और एक छोटा गतिरोध पैदा करने के बाद, उपकरण तालिका को गिरा देगा
फिर से।
--स्तंभ
प्रकार: सारणी; डिफ़ॉल्ट: सर्वर, टीएस, थ्रेड, txn_id, txn_time, उपयोगकर्ता, होस्टनाम, आईपी, डीबी,
टीबीएल, आईडीएक्स, लॉक_टाइप, लॉक_मोड, वेट_होल्ड, पीड़ित, क्वेरी
कॉलम हैं:
सर्वर
वह (स्रोत) सर्वर जिस पर गतिरोध उत्पन्न हुआ। यह उपयोगी हो सकता है यदि
आप कई सर्वरों पर गतिरोधों को ट्रैक कर रहे हैं।
ts अंतिम ज्ञात गतिरोध की तारीख और समय।
धागा
MySQL थ्रेड नंबर, जो SHOW FULL में कनेक्शन आईडी के समान है
प्रक्रिया सूची।
txn_id
InnoDB लेनदेन आईडी, जिसे InnoDB दो अहस्ताक्षरित पूर्णांकों के रूप में व्यक्त करता है। मैं
उन्हें एक संख्या से गुणा किया है।
txn_time
गतिरोध होने पर लेनदेन कितने समय तक सक्रिय था।
उपयोगकर्ता
कनेक्शन का डेटाबेस उपयोगकर्ता नाम.
मेजबाननाम
कनेक्शन का होस्ट.
आईपी कनेक्शन का आईपी पता. यदि आप "--न्यूमेरिक-आईपी" निर्दिष्ट करते हैं, तो इसे इसमें परिवर्तित कर दिया जाता है
एक अहस्ताक्षरित पूर्णांक.
db वह डेटाबेस जिसमें गतिरोध उत्पन्न हुआ।
tbl वह तालिका जिस पर गतिरोध उत्पन्न हुआ।
idx वह सूचकांक जिस पर गतिरोध उत्पन्न हुआ।
लॉक_प्रकार
लॉक प्रकार लॉक पर आयोजित लेन-देन है जो गतिरोध का कारण बना।
लॉक मोड
लॉक का लॉक मोड जिसके कारण गतिरोध उत्पन्न हुआ।
रुको_पकड़ो
क्या लेन-देन लॉक का इंतजार कर रहा था या लॉक पकड़कर। आमतौर पर आप
दो प्रतीक्षित ताले देखेंगे।
<strong>टोना-टोटका</strong>
क्या लेन-देन को गतिरोध पीड़ित के रूप में चुना गया था और वापस ले लिया गया था।
सवाल
वह क्वेरी जिसके कारण गतिरोध उत्पन्न हुआ.
--कॉन्फ़िगरेशन
प्रकार: सरणी
कॉन्फिग फाइलों की इस अल्पविराम से अलग की गई सूची को पढ़ें; यदि निर्दिष्ट किया गया है, तो यह पहला होना चाहिए
कमांड लाइन पर विकल्प।
--क्रिएट-डेस्ट-टेबल
"--dest" द्वारा निर्दिष्ट तालिका बनाएँ।
आम तौर पर "--dest" तालिका पहले से मौजूद होने की उम्मीद है। यह विकल्प pt- का कारण बनता है
सुझाई गई तालिका संरचना का उपयोग करके स्वचालित रूप से तालिका बनाने के लिए डेडलॉक-लॉगर।
--डेमोनाइज
पृष्ठभूमि के लिए कांटा और खोल से अलग करें। केवल पॉज़िक्स ऑपरेटिंग सिस्टम।
--डेटाबेस
संक्षिप्त रूप: -डी; टाइप करें: स्ट्रिंग
इस डेटाबेस से कनेक्ट करें।
--डिफ़ॉल्ट-फ़ाइल
संक्षिप्त रूप: -एफ; टाइप करें: स्ट्रिंग
दी गई फ़ाइल से केवल mysql विकल्प पढ़ें। आपको एक पूर्ण पथनाम देना होगा।
--मंजिल
प्रकार: डीएसएन
गतिरोधों को कहां संग्रहित करना है इसके लिए डीएसएन; कम से कम एक डेटाबेस (डी) और तालिका (टी) निर्दिष्ट करें।
गुम मानों को स्रोत होस्ट से समान मानों से भर दिया जाता है, ताकि आप ऐसा कर सकें
यदि आप इस पर गतिरोध जमा कर रहे हैं तो आमतौर पर इस तर्क के अधिकांश हिस्सों को छोड़ दें
सर्वर जिस पर वे घटित होते हैं.
यदि आप सभी जानकारी संग्रहीत करना चाहते हैं तो निम्नलिखित तालिका संरचना का सुझाव दिया गया है
पीटी-डेडलॉक-लॉगर गतिरोधों के बारे में निकाल सकता है:
तालिका गतिरोध बनाएँ (
सर्वर टैंक(20) शून्य नहीं,
ts टाइमस्टैम्प शून्य डिफ़ॉल्ट नहीं है CURRENT_TIMESTAMP,
थ्रेड पूर्णांक अहस्ताक्षरित नहीं शून्य,
txn_id bigint अहस्ताक्षरित शून्य नहीं,
txn_time Smallint अहस्ताक्षरित शून्य नहीं,
उपयोगकर्ता टैंक(16) शून्य नहीं,
मेजबाननाम टैंक(20) शून्य नहीं,
ip टैंक(15) शून्य नहीं, - वैकल्पिक रूप से, आईपी पूर्णांक अहस्ताक्षरित शून्य नहीं है
db टैंक(64) शून्य नहीं,
tbl टैंक(64) शून्य नहीं,
IDX टैंक(64) शून्य नहीं,
लॉक_प्रकार टैंक(16) शून्य नहीं,
लॉक मोड टैंक(1) शून्य नहीं,
रुको_पकड़ो टैंक(1) शून्य नहीं,
पीड़ित टिनिंट अहस्ताक्षरित नहीं शून्य,
क्वेरी टेक्स्ट शून्य नहीं है,
प्राथमिक कुंजी (सर्वर,टीएस,थ्रेड)
) इंजन=इनोडीबी
यदि आप "--कॉलम" का उपयोग करते हैं, तो आप उन सभी कॉलम को हटा सकते हैं जिन्हें आप संग्रहीत नहीं करना चाहते हैं।
--मदद
मदद दिखाएं और बाहर निकलें।
--मेज़बान
संक्षिप्त रूप: -एच; टाइप करें: स्ट्रिंग
होस्ट से कनेक्ट करें।
--मध्यान्तर
प्रकार: समय; डिफ़ॉल्ट: 30
गतिरोधों के लिए कितनी बार जाँच करें. यदि कोई "--रन-टाइम" निर्दिष्ट नहीं है, तो पीटी-डेडलॉक-लॉगर
हर अंतराल पर गतिरोध की जाँच करते हुए, हमेशा चलता रहता है। "--रन-टाइम" भी देखें।
--पुनरावृत्ति
प्रकार: int
गतिरोधों के लिए कितनी बार जाँच करें. डिफ़ॉल्ट रूप से, यह विकल्प अपरिभाषित है
मतलब पुनरावृत्तियों की अनंत संख्या। उपकरण हमेशा "--रन-टाइम" के लिए बाहर निकलता है,
इस विकल्प के लिए निर्दिष्ट मूल्य की परवाह किए बिना। उदाहरण के लिए, उपकरण बाहर निकल जाएगा
1 मिनट के बाद "--रन-टाइम 1 मी --पुनरावृत्तियाँ 4--अंतराल 30" क्योंकि 4 पुनरावृत्तियाँ
30 सेकंड के अंतराल पर 2 मिनट के रन-टाइम से 1 मिनट अधिक लगेंगे।
--लॉग
टाइप करें: स्ट्रिंग
डिमनीकृत होने पर इस फ़ाइल में सभी आउटपुट प्रिंट करें।
--संख्यात्मक-आईपी
आईपी पते को पूर्णांक के रूप में व्यक्त करें।
--पासवर्ड
संक्षिप्त रूप: -पी; टाइप करें: स्ट्रिंग
कनेक्ट करते समय उपयोग करने के लिए पासवर्ड। यदि पासवर्ड में अल्पविराम हैं तो उन्हें अवश्य ही छोड़ देना चाहिए
बैकस्लैश के साथ: "परीक्षा\,पीएल"
--पिडी
टाइप करें: स्ट्रिंग
दी गई पीआईडी फाइल बनाएं। यदि PID फ़ाइल पहले से मौजूद है और
इसमें मौजूद PID वर्तमान PID से भिन्न है। हालांकि, अगर पीआईडी फाइल
मौजूद है और इसमें मौजूद PID अब नहीं चल रहा है, उपकरण PID को अधिलेखित कर देगा
वर्तमान पीआईडी के साथ फाइल। उपकरण के बाहर निकलने पर PID फ़ाइल स्वचालित रूप से हटा दी जाती है।
--बंदरगाह
संक्षिप्त रूप: -पी; टाइप करें: int
कनेक्शन के लिए उपयोग करने के लिए पोर्ट नंबर।
--शांत
गतिरोध न करें; केवल "STDERR" पर त्रुटियाँ और चेतावनियाँ प्रिंट करें।
--रन-टाइम
प्रकार: समय
बाहर निकलने से पहले कितनी देर तक दौड़ना है. डिफ़ॉल्ट रूप से पीटी-डेडलॉक-लॉगर हमेशा के लिए चलता है, जाँच करता है
प्रत्येक "--अंतराल" सेकंड में गतिरोध के लिए।
--सेट-वार्स
प्रकार: सरणी
"वेरिएबल = मान" जोड़े की इस अल्पविराम से अलग सूची में MySQL चर सेट करें।
डिफ़ॉल्ट रूप से, उपकरण सेट करता है:
प्रतीक्षा_समयबाह्य = 10000
कमांड लाइन पर निर्दिष्ट चर इन डिफ़ॉल्ट को ओवरराइड करते हैं। उदाहरण के लिए,
"--set-vars Wait_timeout=500" निर्दिष्ट करना 10000 के डिफ़ॉल्ट मान को ओवरराइड करता है।
उपकरण एक चेतावनी प्रिंट करता है और यदि कोई चर सेट नहीं किया जा सकता है तो जारी रहता है।
--सॉकेट
संक्षिप्त रूप; टाइप करें: स्ट्रिंग
कनेक्शन के लिए उपयोग करने के लिए सॉकेट फ़ाइल।
--टैब
कॉलम को अलग करने के लिए रिक्त स्थान के बजाय टैब का उपयोग करें।
--उपयोगकर्ता
संक्षिप्त रूप: -यू; टाइप करें: स्ट्रिंग
लॉगिन के लिए उपयोगकर्ता यदि वर्तमान उपयोगकर्ता नहीं है।
--संस्करण
संस्करण दिखाएं और बाहर निकलें।
--[नहीं]संस्करण-जांच
डिफ़ॉल्ट: हाँ
Percona टूलकिट, MySQL, और अन्य प्रोग्राम के नवीनतम संस्करण की जाँच करें।
यह दो अतिरिक्त के साथ एक मानक "स्वचालित रूप से अपडेट की जांच करें" सुविधा है
विशेषताएं। सबसे पहले, टूल स्थानीय सिस्टम पर अन्य प्रोग्रामों के संस्करण की जांच करता है
अपने स्वयं के संस्करण के अलावा। उदाहरण के लिए, यह प्रत्येक MySQL सर्वर के संस्करण की जाँच करता है
यह पर्ल, और पर्ल मॉड्यूल DBD::mysql से जुड़ता है। दूसरा, यह जाँचता है और चेतावनी देता है
ज्ञात समस्याओं वाले संस्करणों के बारे में। उदाहरण के लिए, MySQL 5.5.25 में एक महत्वपूर्ण बग था और
5.5.25a के रूप में पुनः जारी किया गया था।
किसी भी अपडेट या ज्ञात समस्या को टूल के सामान्य आउटपुट से पहले STDOUT पर प्रिंट किया जाता है।
इस सुविधा को उपकरण के सामान्य संचालन में कभी भी हस्तक्षेप नहीं करना चाहिए।
ज्यादा जानकारी के लिये पधारें .
डीएसएन विकल्प
इन DSN विकल्पों का उपयोग DSN बनाने के लिए किया जाता है। प्रत्येक विकल्प "विकल्प = मान" की तरह दिया गया है।
विकल्प केस-संवेदी हैं, इसलिए P और p समान विकल्प नहीं हैं। नहीं हो सकता
"=" से पहले या बाद में व्हाइटस्पेस और यदि मान में व्हाइटस्पेस है तो उसे उद्धृत किया जाना चाहिए।
DSN विकल्प अल्पविराम से अलग किए गए हैं। पूर्ण विवरण के लिए पेरकोना-टूलकिट मैनपेज देखें।
· ए
डीएसएन: वर्णसेट; कॉपी: हाँ
डिफ़ॉल्ट वर्ण सेट।
· डी
डीएसएन: डेटाबेस; कॉपी: हाँ
डिफ़ॉल्ट डेटाबेस।
· एफ
डीएसएन: mysql_read_default_file; कॉपी: हाँ
दी गई फ़ाइल से केवल डिफ़ॉल्ट विकल्प पढ़ें
· एच
डीएसएन: मेजबान; कॉपी: हाँ
होस्ट से कनेक्ट करें।
· पी
डीएसएन: पासवर्ड; कॉपी: हाँ
कनेक्ट करते समय उपयोग करने के लिए पासवर्ड। यदि पासवर्ड में अल्पविराम हैं तो उन्हें अवश्य ही छोड़ देना चाहिए
बैकस्लैश के साथ: "परीक्षा\,पीएल"
· पी
डीएसएन: बंदरगाह; कॉपी: हाँ
कनेक्शन के लिए उपयोग करने के लिए पोर्ट नंबर।
· एस
डीएसएन: mysql_socket; कॉपी: हाँ
कनेक्शन के लिए उपयोग करने के लिए सॉकेट फ़ाइल।
· टी
वह तालिका जिसमें गतिरोध संबंधी जानकारी संग्रहित की जानी है.
· आप
डीएसएन: उपयोगकर्ता; कॉपी: हाँ
लॉगिन के लिए उपयोगकर्ता यदि वर्तमान उपयोगकर्ता नहीं है।
वातावरण
पर्यावरण चर "PTDEBUG" एसटीडीईआरआर को वर्बोज़ डिबगिंग आउटपुट सक्षम करता है। सक्षम करने के लिए
डिबगिंग और सभी आउटपुट को फ़ाइल में कैप्चर करें, जैसे टूल चलाएं:
PTDEBUG=1 pt-deadlock-logger... > फ़ाइल 2>&1
सावधान रहें: डिबगिंग आउटपुट बड़ा होता है और कई मेगाबाइट आउटपुट उत्पन्न कर सकता है।
प्रणाली आवश्यकताएँ
आपको Perl, DBI, DBD::mysql, और कुछ मुख्य पैकेजों की आवश्यकता है जिन्हें किसी भी में स्थापित किया जाना चाहिए
पर्ल का यथोचित नया संस्करण।
onworks.net सेवाओं का उपयोग करके pt-deadlock-loggerp का ऑनलाइन उपयोग करें
