2010-12-13 10 views
5

मैं MySQL प्रदर्शन ब्लॉग पर this post पढ़ रहा था।इनो डीबी अनुकूलन - "अपडेट करते समय लेनदेन का उपयोग करें" - क्यों?

आवेदन के तहत ट्यूनिंग यह कहते हैं:

पहले सुनिश्चित करें कि आप लेन-देन का उपयोग करते समय अपडेट

मैं वर्तमान में केवल स्थानों पर जहां अनेक निवेशन या कम से अपडेट देखते हैं में लेनदेन का उपयोग कर रहा कर बनाने उसी समय। यानी एक से अधिक टेबल।

इसलिए क्या मुझे लेनदेन में बदलने के लिए हर UPDATE बदलना चाहिए?

prepare sql 
bind params 
commit 

और: क्या डेटाबेस स्तर पर होता है के मामले में

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

, कि अन्य की तुलना में एक तेजी से बनाता है

क्या बीच का अंतर है?

उत्तर

6

InnoDB डिफ़ॉल्ट रूप से ऑटोकॉमिट मोड में चलता है। इसका अर्थ यह है कि प्रत्येक क्वेरी अपने लेनदेन में चलता है और एक बार में आता है। इनो डीबी में इसका मतलब डिस्क पर दो स्थानों में डेटा लिखना है (मुझे विवरण के लिए न पूछें - मैं स्मृति से लिख रहा हूं जो मैंने एक बार MySQL प्रदर्शन ब्लॉग पर पढ़ा है;))।

अब, यदि आप एक समय में एक अपडेट/डालने/हटाते हैं, तो हासिल करने के लिए बहुत अधिक प्रदर्शन नहीं होता है। हालांकि, यदि आप लगातार कई अपडेट/आवेषण/हटाते हैं, तो आप लेन-देन में बंडल करके कुछ हार्ड डिस्क समय बचा सकते हैं, और फिर एक बार में सभी को कम कर सकते हैं।

+2

+1। अधिक तकनीकी विश्लेषण: एक बफर है जो लॉग (innodb_log_buffer_size) को लिखने में देरी करता है जिसे आप हर समय प्रतिबद्ध करते समय अधिक बार फ़्लश करने की आवश्यकता होती है, जिससे खराब प्रदर्शन होता है। बफर भी हर 1 सेकंड स्वचालित रूप से flushed है। –

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