মাইএসকিউএল সংযোগের নীরব ঘাতকদের মধ্যে একটি হ'ল মাই এসকিউএল প্যাকেট। এমনকি মাইএসকিউএল প্রতিলিপিটির I / O থ্রেডও এর দ্বারা শিকার হতে পারে।
মতে মাইএসকিউএল ডকুমেন্টেশন
আপনি যদি ভুল বা খুব বড় সার্ভারে কোনও কোয়েরি পাঠান তবে আপনি এই ত্রুটিগুলিও পেতে পারেন can যদি মাইএসকিএলডি এমন একটি প্যাকেট গ্রহণ করে যা খুব বড় বা অর্ডার বহির্ভূত হয় তবে এটি ধরে নেয় যে ক্লায়েন্টের সাথে কিছু ভুল হয়েছে এবং সংযোগটি বন্ধ করে দিয়েছে। আপনার যদি বড় প্রশ্নগুলির প্রয়োজন হয় (উদাহরণস্বরূপ, আপনি যদি বড় বিএলওবি কলামের সাথে কাজ করছেন), আপনি সার্ভারের সর্বোচ্চ_নিযুক্ত_প্যাকটি ভেরিয়েবল সেট করে কোয়েরির সীমাটি বাড়িয়ে দিতে পারেন, যার মান 1MB এর ডিফল্ট মান। আপনার ক্লায়েন্ট প্রান্তে সর্বাধিক প্যাকেটের আকার বাড়াতে হবে। প্যাকেটের আকার নির্ধারণের বিষয়ে আরও তথ্য বিভাগ C.5.2.10, "প্যাকেটটি খুব বড়" দেওয়া আছে।
একটি INSERT বা REPLACE বিবৃতি যা দুর্দান্ত অনেকগুলি সারি সন্নিবেশ করায় এই ধরণের ত্রুটিও ঘটতে পারে। এই বিবৃতিগুলির মধ্যে একটিতে সারি সন্নিবেশ করানোর সংখ্যা নির্বিশেষে সার্ভারকে একটি অনুরোধ প্রেরণ করে; সুতরাং, আপনি প্রায়শই ইনসার্ট বা প্রতিস্থাপনের জন্য প্রেরিত সারির সংখ্যা হ্রাস করে ত্রুটিটি এড়াতে পারেন।
খুব কমপক্ষে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি যে মেশিন থেকে ম্যাকডাল্প্প করেছিলেন এবং যে মেশিনটি আপনি লোড করছেন তা উভয়ই প্যাকেটের আকারের।
আপনি নিতে পারেন এমন দুটি (2) পন্থা থাকতে পারে:
অ্যাপোআচ # 1: --স্কিপ-এক্সটেন্ডেড-সন্নিবেশ ব্যবহার করে মাইএসকিএলড্প সম্পাদন করুন
এটি নিশ্চিত করবে যে মাইএসকিউএল প্যাকেটটি একাধিক বিএলওবি, টেক্সট ক্ষেত্রের সাথে সজ্জিত নয়। এই ভাবে এসকিউএল INSERT গুলি একবারে একটি করে সম্পাদিত হয়। এর প্রধান অসুবিধা হ'ল
- mysqldump অনেক বড় ump
- এই জাতীয় ডাম্প পুনরায় লোড করতে অনেক বেশি সময় নেয়।
অ্যাপোআচ # 2: সর্বাধিক_বিহীন_প্যাকেট বাড়ান
এটি পছন্দসই পদ্ধতি হতে পারে কারণ এটি বাস্তবায়ন কেবল একটি মাইএসকিএল পুনরায় আরম্ভ হবে। মাইএসকিউএল প্যাকেট কী তা বোঝা গেলে এটি পরিষ্কার হতে পারে।
"মাইএসকিউএল অভ্যন্তরীণ বোঝা" (আইএসবিএন 0-596-00957-7) এর 99 পৃষ্ঠা অনুসারে , এখানে অনুচ্ছেদ 1-3 রয়েছে যা এটি ব্যাখ্যা করছে:
মাইএসকিউএল নেটওয়ার্ক যোগাযোগ কোড এই অনুমানের অধীনে লেখা হয়েছিল যে প্রশ্নগুলি সর্বদা যুক্তিযুক্তভাবে সংক্ষিপ্ত থাকে এবং তাই সার্ভারের মাধ্যমে একটি অংশে প্রেরণ এবং প্রক্রিয়া করা যায়, যা মাইএসকিউএল পরিভাষায় একটি প্যাকেট বলে । প্যাকেটটি সংরক্ষণ করার জন্য সার্ভার অস্থায়ী বাফারের জন্য মেমরির বরাদ্দ করে এবং এটি পুরোপুরি ফিট করার জন্য এটি যথেষ্ট অনুরোধ করে। এই আর্কিটেকচারটির জন্য সার্ভারের স্মৃতিশক্তি শেষ না হওয়া এড়ানোর জন্য একটি সতর্কতা প্রয়োজন --- প্যাকেটের আকারের একটি ক্যাপ, যা এই বিকল্পটি সম্পাদন করে।
এই বিকল্পের সাথে সম্পর্কিত আগ্রহের কোডটি স্কুয়েল / নেট_জারি.সি.সি তে পাওয়া যায়
। কটাক্ষপাত my_net_read () , তারপর থেকে কল অনুসরণ my_real_read () এবং বিশেষভাবে নজর দিতে
net_realloc () ।
এই পরিবর্তনশীলটি অনেকগুলি স্ট্রিং ফান্টাক্টনের ফলাফলের দৈর্ঘ্যও সীমাবদ্ধ করে। দেখুন SQL / field.cc এবং
SQL / intem_strfunc.cc বিস্তারিত জানার জন্য।
এই ব্যাখ্যাটি দেওয়া হয়েছে, বাল্ক INSERT গুলি তৈরি করা একটি MySQL প্যাকেট বরং দ্রুত লোড / আনলোড করবে। এটি বিশেষত সত্য যখন ম্যাক্স_এলড_প্যাক্টটি দেওয়া ডেটা লোড করার জন্য খুব ছোট হয়।
উপসংহার
মাইএসকিউএল এর বেশিরভাগ ইনস্টলগুলিতে, আমি সাধারণত এটি 256 এম বা 512 এম তে সেট করি। যখন ডেটা লোডগুলি "মাইএসকিউএল চলে গেছে" ত্রুটি তৈরি করে তখন আপনার বড় মানগুলির সাথে পরীক্ষা করা উচিত।
max_allowed_packet
৯০০ এম তে স্থির হওয়ার চেষ্টা করেছি এবং আমি ব্যবহার করছিলাম--skip-extended-insert
(এবং আপনি ঠিক বলেছেন - যা হুগ ডিবি-ডাম্প তৈরি করে) তবে এটি এখনও ব্যর্থ হয়। আমি এখন ডাম্পের একটি নির্দিষ্ট লাইনের সন্দেহ করছি যে আমি সম্ভবত প্রায় কাজ করতে পারি। তবে এটি এখনও অদ্ভুত - আমার সেন্টস সার্ভারে ডাম্প সূক্ষ্মভাবে আমদানি করা যেতে পারে।