सादगी के लिए, ट्रिगर किसी भी तरह के डेटाबेस परिवर्तनों को लागू करने के लिए जाने का रास्ता है। हालाँकि, आपको इस बात से अवगत होना चाहिए कि जब आप ट्रिगर का उपयोग करते हैं तो हुड के नीचे क्या होता है।
MySQL स्टोर किए गए प्रक्रिया प्रोग्रामिंग के अनुसार , सिर के नीचे पेज 256 "ट्रिगर ओवरहेड" निम्नलिखित कहता है:
यह याद रखना महत्वपूर्ण है कि, आवश्यकता से, ट्रिगर डीएमएल स्टेटमेंट में ओवरहेड जोड़ते हैं, जिस पर वे लागू होते हैं। ओवरहेड की वास्तविक राशि ट्रिगर की प्रकृति पर निर्भर करेगी, लेकिन --- जैसा कि सभी MySQL ट्रिगर EOW ROW के लिए निष्पादित करते हैं --- ओवरहेड बड़ी संख्या में पंक्तियों को संसाधित करने वाले बयानों के लिए तेजी से जमा हो सकता है। इसलिए आपको ट्रिगर्स में कोई भी महंगा SQL स्टेटमेंट या प्रक्रियात्मक कोड रखने से बचना चाहिए।
ट्रिगर ओवरहेड का विस्तृत विवरण पृष्ठ 529-531 पर दिया गया है। उस खंड का संक्षिप्त बिंदु निम्नलिखित बताता है:
यहां सबक यह है: चूंकि ट्रिगर कोड डीएमएल स्टेटमेंट से प्रभावित प्रत्येक पंक्ति के लिए एक बार निष्पादित होगा, ट्रिगर आसानी से डीएमएल प्रदर्शन का सबसे महत्वपूर्ण कारक बन सकता है। ट्रिगर बॉडी के अंदर कोड को जितना संभव हो उतना हल्का होना चाहिए और विशेष रूप से - ट्रिगर में किसी भी एसक्यूएल स्टेटमेंट को जब भी संभव हो इंडेक्स द्वारा समर्थित किया जाना चाहिए।
ट्रिगर का उपयोग करते समय पुस्तक में उल्लेख नहीं किया गया है: जब ऑडिट लॉगिंग की बात आती है, तो कृपया इस बात से अवगत रहें कि आप डेटा को लॉग इन क्या करते हैं। मैं यह कहता हूं क्योंकि आपको एक MyISAM तालिका में प्रवेश करना चाहिए, प्रत्येक INSERT एक MyISAM तालिका में INSERT के दौरान एक पूर्ण तालिका लॉक का उत्पादन होता है। यह उच्च-यातायात, उच्च-लेनदेन वातावरण में एक गंभीर अड़चन बन सकता है। इसके अतिरिक्त, यदि ट्रिगर एक InnoDB तालिका के विरुद्ध है और आप ट्रिगर के भीतर से MyISAM में परिवर्तन लॉग करते हैं, तो यह गुप्त रूप से ACID अनुपालन को अक्षम कर देगा (यानी, ब्लॉक लेनदेन को ऑटोकॉमिट व्यवहार में कम कर देगा), जिसे वापस रोल नहीं किया जा सकता है।
InnoDB तालिकाओं और लॉगिंग परिवर्तनों पर ट्रिगर का उपयोग करते समय
- आपके द्वारा लॉग की गई तालिका भी InnoDB है
- आपके पास स्वतः पूर्णता बंद है
- आपने START TRANSACTION ... COMMIT / रोलबैक ब्लॉक को अच्छी तरह से सेटअप किया
इस तरह, ऑडिट लॉग मुख्य टेबल के रूप में COMMIT / रोलबैक से लाभ उठा सकते हैं।
संग्रहीत प्रक्रियाओं का उपयोग करने के बारे में, आपको ट्रैक किए जा रहे टेबल के खिलाफ डीएमएल के हर बिंदु पर संग्रहीत प्रक्रिया को श्रमसाध्य रूप से कॉल करना होगा। आवेदन कोड की हजारों लाइनों के चेहरे पर आसानी से लॉगिंग परिवर्तन को याद कर सकता है। इस तरह के कोड को ट्रिगर में रखने से उन सभी डीएमएल स्टेटमेंट को ढूंढना समाप्त हो जाता है।
चेतावनी
ट्रिगर कितना जटिल है, इसके आधार पर, यह अभी भी एक अड़चन हो सकता है। यदि आप ऑडिट लॉगिंग में अड़चनों को कम करना चाहते हैं, तो कुछ ऐसा है जो आप कर सकते हैं। हालाँकि, इसके लिए थोड़े बुनियादी ढाँचे में बदलाव की आवश्यकता होगी।
कमोडिटी हार्डवेयर का उपयोग करते हुए, दो और DB सर्वर बनाएं
यह ऑडिट लॉगिंग के कारण मुख्य डेटाबेस (एमडी) पर लिखने के लिए I / O को कम करेगा। यहाँ आप इसे कैसे पूरा कर सकते हैं:
चरण 01) मुख्य डेटाबेस में बाइनरी लॉगिंग चालू करें।
चरण 02) एक सस्ती सर्वर का उपयोग करके, बाइनरी लॉगिंग सक्षम के साथ MySQL (एमडी के समान संस्करण) को सेटअप करें। यह डीएम होंगे। एमडी से डीएम तक सेटअप प्रतिकृति।
चरण 03) एक दूसरे सस्ते सर्वर का उपयोग करके, बाइनरी लॉगिंग अक्षम के साथ MySQL (एमडी के समान संस्करण) को सेटअप करें। प्रत्येक ऑडिट टेबल का उपयोग करने के लिए सेटअप करें --replicate-do-table । यह एयू होगा। डीएम से एयू में सेटअप प्रतिकृति।
चरण 04) mysqldump को MD से तालिका संरचनाएँ और DM और AU में लोड करें।
चरण 05) BLACKHOLE संग्रहण इंजन का उपयोग करने के लिए MD की सभी ऑडिट तालिकाएँ कनवर्ट करें
चरण 06) BLACKHOLE संग्रहण इंजन का उपयोग करने के लिए DM और AU में सभी तालिकाओं को परिवर्तित करें
चरण 07) MyISAM संग्रहण इंजन का उपयोग करने के लिए AU में सभी ऑडिट टेबल को कनवर्ट करें
जब हो जाए
- डीएम अपने बाइनरी लॉग में एमडी और रिकॉर्ड सामान से ही नकल करेंगे
- साथ --replicate-कर-तालिका सभी अंकेक्षण टेबल पर फिल्टर, ए.यू. डीएम से दोहराने जाएगा
यह क्या करता है एक अलग डीबी सर्वर पर स्टोर ऑडिट की जानकारी है और एमडी / सामान्य रूप से किसी भी आई / ओ गिरावट को कम करना भी है।