মাইএসকিউএল প্রতিলিপি - স্লেভ ক্রমাগত মাস্টারের থেকে পিছনে রয়েছে


12

আমি একটি মাস্টার-ক্রীতদাস প্রতিলিপি সেটআপ সহ মাইএসকিউএল -5.1.50 ব্যবহার করছি।

বেশিরভাগ সময় দাসটি মাস্টারের পিছনে থাকে।

আমি যখন দৌড়ে যাই show processlist;, এমন কোনও প্রশ্ন নেই যা দীর্ঘ সময় নিচ্ছে। আমি slow_logপাশাপাশি সক্ষম । তবে এটি কোনও ধীরগতিতে চলমান কোয়েরি খুঁজে পাচ্ছে না।

দাস ক্রমাগত সতর্কতা দিচ্ছে যে প্রতিলিপিটি মাস্টারের পিছনে রয়েছে is কখনও কখনও, পিছিয়ে সময় বৃদ্ধি।

আমি কীভাবে সমস্যার কারণটি সনাক্ত করব?

আমার জরুরি সহায়তা দরকার, যেহেতু এই সমস্যাটি গত 20 দিন ধরেই অব্যাহত রয়েছে।


উত্তর:


20

সেকেন্ডস_বিহিন্ড_মাস্টার সত্যই সময় ভ্রমণের মাধ্যমে অতীত দেখার মতো।

এই ভাবে চিন্তা করুন:

  • সূর্য পৃথিবী থেকে 93,000,000 মাইল দূরে
  • আলোর গতি 186,000 মাইল / সেকেন্ড
  • সাধারণ বিভাগ দেখায় যে সূর্যের আলো পৃথিবীতে পৌঁছতে প্রায় 500 সেকেন্ড (8 মিনিট 20 সেকেন্ড) লাগে
  • আপনি যখন সূর্যের দিকে তাকান, আপনি আসলে সূর্যকে দেখেন না আপনি দেখতে পাবেন যেখানে এটি সেকেন্ডে 8 মিনিট আগে ছিল।

একইভাবে, মনে হয় যে মাস্টার একই সাথে প্রচুর প্রশ্নগুলি প্রক্রিয়া করছেন।

আপনি স্লেভের দিকে ফিরে তাকান, চালান SHOW SLAVE STATUS\Gএবং এটি 200 এর জন্য বলে Seconds_Behind_Master। কিভাবে এই সংখ্যা গণনা করা হয়? স্লেভের ক্লক টাইম (ইউনিক্সটাইমস্ট্যাম্প (এখন)) - কোয়েরির টাইমস্ট্যাম্পটি শেষ হয়ে গেলে এবং মাস্টার্স বাইনারি লগে রেকর্ড করা হয়।

পাশাপাশি দেখার জন্য আরও একটি মেট্রিক রয়েছে Seconds_Behind_Master। সেই মেট্রিককে বলা হয় Relay_Log_Space। এটি স্লেভের সমস্ত রিলে ফাইলগুলির জন্য সমস্ত বাইটের যোগফল উপস্থাপন করে। ডিফল্টরূপে, বৃহত্তম একক রিলে লগটি 1GB এর মধ্যে সীমাবদ্ধ। যদি Relay_Log_Space1 জিবি এর চেয়ে কম হয়, তবে এটি সূচিত করে যে বহু দীর্ঘস্থায়ী ক্যোয়ারী সমান্তরালভাবে মাস্টারের উপর সম্পাদিত হয়েছিল। দুর্ভাগ্যক্রমে, একক থ্রেডযুক্ত প্রকৃতির প্রতিরূপের এসকিউএল থ্রেডের কারণে কোয়েরিগুলি অন্যের পিছনে কার্যকর করা হয়।

উদাহরণস্বরূপ, ধরুন আপনি মাস্টার সম্পর্কে নিম্নলিখিত পরিস্থিতি আছে:

  • ধীর ক্যোয়ারী লগ সক্ষম হয়েছে
  • মাস্টারকে সমান্তরালভাবে সম্পাদিত 20 টি কোয়েরি
  • প্রতিটি ক্যোয়ারিতে 3 সেকেন্ড সময় নিয়েছিল
  • প্রতিটি ক্যোয়ারী একই টাইমস্ট্যাম্পের সাথে মাস্টার বাইনারি লগ-এ রেকর্ড করা হয়

স্লেভ যখন তার রিলে লগ থেকে এই প্রশ্নগুলি পড়ে এবং একে একে একে প্রক্রিয়া করে

  • স্লেভের ঘড়িটি চলবে
  • 20 টি প্রশ্নের প্রত্যেকের জন্য টাইমস্ট্যাম্প অভিন্ন হবে
  • পার্থক্যটি 3 সেকেন্ডে বাড়বে কোয়েরি সম্পূর্ণ হবে
  • 60 সেকেন্ডের জন্য এই ফলাফল Seconds_Behind_Master

স্লো লগ সম্পর্কিত, লং_কোয়ারি_টাইমের জন্য ডিফল্টটি 10 সেকেন্ড। রিলে লগগুলিতে যদি আপনার সমস্ত প্রশ্নগুলি 10 সেকেন্ডের চেয়ে কম হয় তবে আপনি স্লো কোয়েরি লগটিতে কখনই কিছু পাবেন না।

আমার কাছে মাস্টার এবং স্লেভ সার্ভার উভয়ের জন্য নিম্নলিখিত প্রস্তাবনা রয়েছে

আরও ট্রূবলশূটিং

আপনি যদি পুনর্বিবেচনার পিছনে কোয়েরি দেখতে চান তবে নিম্নলিখিতটি করুন:

  • 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

স্লেভ বর্তমানে প্রক্রিয়া করার চেষ্টা করছে সেগুলি আপনি এখন দেখতে পাচ্ছেন। আপনি এই প্রশ্নগুলি টিউনিংয়ের সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন।


V5.7 হিসাবে, মাইএসকিউএল বহু-থ্রেড ফ্যাশনে দাসগুলিতে পরিবর্তনগুলি প্রয়োগ করতে সক্ষম হয়েছে। সম্পর্কিত ডকুমেন্টেশন এখানে পাওয়া যাবে: dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html
এডিগু

2

আপনি কোন বাইনারি লগ ফর্ম্যাটটি ব্যবহার করছেন? আপনি কি ROW বা STATEMENT ব্যবহার করছেন?
" SHOW GLOBAL VARIABLES LIKE 'binlog_format';"

আপনি যদি বেনগ ফর্ম্যাট হিসাবে ROW ব্যবহার করছেন তবে আপনার সমস্ত সারণিতে প্রাথমিক বা অনন্য কী রয়েছে তা নিশ্চিত করুন:
SELECT t.table_schema,t.table_name,engine FROM information_schema.tables t INNER JOIN information_schema .columns c on t.table_schema=c.table_schema and t.table_name=c.table_name and t.table_schema not in ('performance_schema','information_schema','mysql') GROUP BY t.table_schema,t.table_name HAVING sum(if(column_key in ('PRI','UNI'), 1,0)) =0;

যদি আপনি কোনও পিকে বা অনন্য কী ছাড়াই কোনও টেবিলে 1 মিলিয়ন রেকর্ড মুছতে মাস্টারের উপর একটি মুছার বিবৃতি কার্যকর করেন তবে কেবলমাত্র একটি পূর্ণ টেবিল স্ক্যানই মাস্টারের পক্ষে ঘটবে, যা দাসের ক্ষেত্রে নয়।
যখন ROW বিনলগ_ফর্ম্যাটটি ব্যবহার করা হচ্ছে, মাইএসকিউএলগুলি বাইনারি লগগুলিতে সারি পরিবর্তনগুলি লিখেছিল (STATEMENT বিনলগ_ফর্ম্যাটের মতো বিবৃতি হিসাবে নয়) এবং সেই পরিবর্তনটি সারি দ্বারা স্লেভের পাশের সারিতে প্রয়োগ করা হবে, যার অর্থ 1 মিলিয়ন পূর্ণ টেবিল স্ক্যান ঘটবে মাস্টার সম্পর্কে কেবল একটি মুছে ফেলার বিবরণ প্রতিফলিত করার জন্য দাসটির উপর এবং এটি দাসকে পিছিয়ে থাকার সমস্যা তৈরি করছে।


0

স্ল্যাজ_বিহ্বল_মাস্টার মানটি স্ল্যাভ স্ট্যাটাসে মাস্টারটিতে থাকা সিস্টেম সময়ের মধ্যে পার্থক্য which যা ইভেন্টটি মূলত সম্পাদিত হয় এবং বাইনারি লগে রেকর্ড করা হয় ... এবং ইভেন্টটি সেখানে সম্পাদন করার পরে স্লেভের সিস্টেমে সময় হয়।

দুটি সিস্টেমের ঘড়ি সিঙ্কে না থাকলে মাস্টারের পিছনে সেকেন্ডগুলি ভুল মান দেয়।


মাইএসকিউএল 5.5 এবং তার আগের সংস্করণগুলিতে অনুলিপি ইভেন্টগুলির সম্পাদন স্লেভ সাইডে একক থ্রেডযুক্ত। "সিস্টেমের ব্যবহারকারী" হিসাবে চলমান "সম্পূর্ণ প্রসেসলিস্টে" দুটি থ্রেড থাকা উচিত - একটি মাস্টারের কাছ থেকে ইভেন্টগুলি গ্রহণ করছে, অন্যটি কোয়েরিগুলি সম্পাদন করছে। যদি ক্রীতদাসটি পিছিয়ে থাকে তবে সেই থ্রেডটি প্রদর্শিত হওয়া উচিত যে বর্তমানে কোন কোয়েরি কার্যকর করা হচ্ছে। এটি একবার দেখুন, এবং আপনার ডিস্ক / মেমরি / সিপিইউ পরিসংখ্যানগুলিকে রিসোর্স অনাহার জন্য দেখুন।
মাইকেল - স্কেলবট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.