Seconds_Behind_Master वास्तव में समय यात्रा के माध्यम से अतीत को देखने जैसा है।
इस पर इस तरीके से विचार करें:
- सूर्य पृथ्वी से 93,000,000 मील दूर है
- प्रकाश की गति 186,000 मील / सेकंड है
- सरल विभाजन से पता चलता है कि सूर्य के प्रकाश को पृथ्वी तक पहुंचने में लगभग 500 सेकंड (8 मिनट 20 सेकंड) लगते हैं
- जब आप सूर्य को देखते हैं, तो आप वास्तव में सूर्य को नहीं देखते हैं। आप देखें कि यह 8 मिनट 20 सेकंड पहले कहां था।
इस तरह से, ऐसा लगता है कि मास्टर एक ही समय में बहुत सारे प्रश्नों का प्रसंस्करण कर रहा है।
आप गुलाम को देखते हैं, भागते हैं SHOW SLAVE STATUS\G
और यह 200 के लिए कहता है Seconds_Behind_Master
। उस संख्या की गणना कैसे की जाती है? स्लेव्स क्लॉक टाइम (UNIX_TIMESTAMP (Now)) - TIMESTAMP ऑफ़ द क्वेरी जब इसे पूरा किया गया और मास्टर के बाइनरी लॉग में रिकॉर्ड किया गया।
इसके अलावा देखने के लिए एक और मीट्रिक है Seconds_Behind_Master
। उस मीट्रिक को कहा जाता है Relay_Log_Space
। यह दास पर सभी रिले फ़ाइलों के लिए सभी बाइट्स का योग दर्शाता है। डिफ़ॉल्ट रूप से, सबसे बड़ा एकल रिले लॉग 1GB तक सीमित है। यदि Relay_Log_Space
1GB से कम है, तो यह इंगित करता है कि समानांतर में मास्टर पर निष्पादित कई लंबी चलने वाली क्वेरी। दुर्भाग्य से, एकल-थ्रेडेड प्रकृति प्रतिकृति के SQL थ्रेड के कारण, क्वेरी को एक के पीछे एक निष्पादित किया जाता है।
उदाहरण के लिए, मान लें कि आपके पास मास्टर पर निम्न परिदृश्य है:
- धीमी क्वेरी लॉग सक्षम है
- मास्टर पर समानांतर में निष्पादित 20 प्रश्न
- प्रत्येक क्वेरी में 3 सेकंड लगे
- प्रत्येक क्वेरी मास्टर बाइनरी लॉग में उसी टाइमस्टैम्प के साथ दर्ज की जाती है
जब दास अपने रिले लॉग से उन प्रश्नों को पढ़ता है और उन्हें एक-एक करके संसाधित करता है
- गुलाम की घड़ी चलती होगी
- 20 प्रश्नों में से प्रत्येक के लिए TIMESTAMP समान होगा
- अंतर 3 सेकंड बढ़ जाएगा क्वेरी पूरी हो गई है
- यह 60 सेकंड के लिए परिणाम है
Seconds_Behind_Master
धीमी लॉग के संबंध में, long_query_time के लिए डिफ़ॉल्ट 10 सेकंड है। यदि रिले लॉग में आपके सभी प्रश्न 10 सेकंड से कम हैं, तो आप स्लो क्वेरी लॉग में कभी भी कुछ भी नहीं पकड़ेंगे।
मेरे पास मास्टर और स्लेव सर्वर दोनों के लिए निम्नलिखित सिफारिशें हैं
- सिफारिश # 1 : MySQL 5.5 में अपग्रेड करें । MySQL 5.5 और Percona Server 5.1.38+ के तहत, आप कई CPU तक पहुंचने के लिए InnoDB को ट्यून कर सकते हैं। मैंने इस बारे में पिछले पोस्ट लिखे हैं
- सिफारिश # 2 : सभी तालिकाओं के लिए InnoDB का उपयोग करें । InnoDB RAM में डेटा और इंडेक्स को कैश करता है, MyISAM केवल इंडेक्स को कैश करता है।
- सिफारिश # 3 : रैम बढ़ाएँ । आपको स्लेव और मास्टर समान पर अधिक डेटा और अनुक्रमित कैश करना होगा
- सिफारिश # 4 : सभी प्रश्नों को ट्यून करें। सैकड़ों बार चलने वाले प्रश्नों से मिलीसेकंड को कम करने के लिए एक लंबा रास्ता तय करना पड़ता है
Seconds_Behind_Master
।
अन्य ट्रॉवेल्सोटिंग
यदि आप प्रतिकृति अंतराल के कारण होने वाले प्रश्नों को देखना चाहते हैं, तो निम्न कार्य करें:
SHOW SLAVE STATUS\G
- रिले लॉग का नाम प्राप्त करें
Relay_Log_File
STOP SLAVE;
START SLAVE;
- ओएस में,
cd /var/lib/mysql
या जहां भी रिले लॉग लिखे जाते हैं
- टेक्स्ट फ़ाइल में रिले लॉग को डंप करें
उदाहरण के लिए, आइए करते हैं SHOW SLAVE STATUS\G
Slave_IO_State: Waiting for master to send event
Master_Host: 10.64.51.149
Master_User: replicant
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 1024035856
Relay_Log_File: relay-bin.000030
Relay_Log_Pos: 794732078
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: search_cache
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1024035856
Relay_Log_Space: 794732271
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 106451149
अगर मैं दौड़ता हूं STOP SLAVE; START SLAVE;
, तो रिले लॉग बंद हो जाता है और एक नया खुल जाता है। फिर भी, आप चाहते हैं relay-bin.000030
।
सामग्री को निम्नानुसार डंप करें:
cd /var/lib/mysql
mysqlbinlog relay-bin.000030 > /root/RelayLogQueries.txt
less /root/RelayLogQueries.txt
अब आप देख सकते हैं कि दास वर्तमान में प्रक्रिया करने की कोशिश कर रहा है। आप ट्यूनिंग के लिए शुरुआती बिंदु के रूप में उन प्रश्नों का उपयोग कर सकते हैं।