মাইএসকিউএল সংযোগের নীরব ঘাতকদের মধ্যে একটি হ'ল মাই এসকিউএল প্যাকেট।
প্রথমে, মাইএসকিউএল প্যাকেটটি কী তা নির্ধারণ করুন।
"মাইএসকিউএল অভ্যন্তরীণ বোঝা" (আইএসবিএন 0-596-00957-7) এর পৃষ্ঠা 99 অনুসারে মাইএসকিউএল প্যাকেটগুলি ব্যাখ্যা করার জন্য এখানে অনুচ্ছেদ 1-3 রয়েছে:
মাইএসকিউএল নেটওয়ার্ক যোগাযোগ কোড এই অনুমানের অধীনে লেখা হয়েছিল যে প্রশ্নগুলি সর্বদা যুক্তিযুক্তভাবে সংক্ষিপ্ত থাকে এবং তাই সার্ভারের কাছে একটি অংশে প্রেরণ এবং প্রক্রিয়া করা যায়, যা মাইএসকিউএল পরিভাষায় একটি প্যাকেট বলে । প্যাকেটটি সংরক্ষণ করার জন্য সার্ভার অস্থায়ী বাফারের জন্য মেমরির বরাদ্দ করে এবং এটি পুরোপুরি ফিট করার জন্য এটি যথেষ্ট অনুরোধ করে। এই আর্কিটেকচারটির জন্য সার্ভারের স্মৃতিশক্তি শেষ না হওয়া এড়ানোর জন্য একটি সতর্কতা প্রয়োজন --- প্যাকেটের আকারের একটি ক্যাপ, যা এই বিকল্পটি সম্পাদন করে।
এই বিকল্পের সাথে সম্পর্কিত আগ্রহের কোডটি স্কুয়েল / নেট_জারি.সি.সি তে পাওয়া যায়
। কটাক্ষপাত my_net_read () , তারপর থেকে কল অনুসরণ my_real_read () এবং বিশেষভাবে নজর দিতে
net_realloc () ।
এই পরিবর্তনশীলটি অনেকগুলি স্ট্রিং ফান্টাক্টনের ফলাফলের দৈর্ঘ্যও সীমাবদ্ধ করে। দেখুন SQL / field.cc এবং
SQL / intem_strfunc.cc বিস্তারিত জানার জন্য।
মাইএসকিউএল প্যাকেটগুলি সম্পর্কে এটি জানার ফলে কোনও বিকাশকারী / ডিবিএ এগুলি আকার দিতে মঞ্জুরি দেয় যাতে তারা কোনও আকারে বড় হলেও এক প্যাকেটের ভিতরে একাধিক BLOB সমন্বিত করতে পারে। অবশ্যই, খুব ছোট একটি প্যাকেট এই ক্ষেত্রে মুক্ত সংযোগের জন্য সমস্যা সৃষ্টি করবে।
মতে মাইএসকিউএল ডকুমেন্টেশন
আপনি যদি ভুল বা খুব বড় সার্ভারে কোনও কোয়েরি পাঠান তবে আপনি এই ত্রুটিগুলিও পেতে পারেন can যদি মাইএসকিএলডি এমন একটি প্যাকেট পায় যা খুব বড় বা অর্ডার বহির্ভূত হয় তবে এটি ধরে নেয় যে ক্লায়েন্টের সাথে কিছু ভুল হয়েছে এবং সংযোগটি বন্ধ করে দিয়েছে। আপনার যদি বড় প্রশ্নগুলির প্রয়োজন হয় (উদাহরণস্বরূপ, আপনি যদি বড় বিএলওবি কলামের সাথে কাজ করছেন), আপনি সার্ভারের সর্বোচ্চ_নিযুক্ত_প্যাকটি ভেরিয়েবলটি সেট করে ক্যোয়ারির সীমাটি বাড়িয়ে দিতে পারেন, যার ডিফল্ট মান 1MB রয়েছে। আপনার ক্লায়েন্ট প্রান্তে সর্বাধিক প্যাকেটের আকার বাড়াতে হবে। প্যাকেটের আকার নির্ধারণের বিষয়ে আরও তথ্য বিভাগ C.5.2.10, "প্যাকেটটি খুব বড়" দেওয়া আছে।
একটি INSERT বা REPLACE বিবৃতি যা দুর্দান্ত অনেকগুলি সারি সন্নিবেশ করায় এই ধরণের ত্রুটিও ঘটতে পারে। এই বিবৃতিগুলির মধ্যে একটিতে সারি সন্নিবেশ করানোর সংখ্যা নির্বিশেষে সার্ভারকে একটি অনুরোধ প্রেরণ করে; সুতরাং, আপনি প্রায়শই INSERT বা প্রতিস্থাপনের জন্য প্রেরিত সারির সংখ্যা হ্রাস করে ত্রুটিটি এড়াতে পারেন।
সুপারিশ
ডিফল্ট 1 এম হওয়ায় ম্যাক্স_গ্ল্যাড_প্যাকেটটিকে আরও বড় সংখ্যায় বাড়ানোর চেষ্টা করুন । আমি আপনার বর্তমান ডেটাসেটে সবচেয়ে বড় পাঠ্য বা বিএলএফ ক্ষেত্রের প্রায় 10 গুণ প্রস্তাব দেব।
সর্বোচ্চ_গলা_প্যাকেটটি 256 এম তে সেট করতে আপনি এটিকে /etc/my.cnf বা my.ini এ যুক্ত করতে পারেন
[mysqld]
max_allowed_packet=256M
ভবিষ্যতে mysqld এর পুনঃসূচনাগুলি কভার করতে cover সার্ভারে এখন মান ইনস্টল করতে, দয়া করে এটি চালান:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
একবার চেষ্টা করে দেখো !!!