যোগাযোগের প্যাকেটগুলি পড়ার ক্ষেত্রে মাইএসকিউএল ত্রুটি


42

মাইএসকিউএল ত্রুটি লগগুলিতে, আমি এইগুলির মতো বেশ কয়েকটি সতর্কতা দেখছি:

120611 16:12:30 [Warning] Aborted connection 2619503 to db: 'db_name' user: 'user_name' host: 'webapp_hostname' (Got an error reading communication packets)

প্রতি সেবার কোনও ক্ষয়ক্ষতি লক্ষ্য করা যায় নি, তাই আমি ভাবছি যে এই সতর্কতার অর্থ কী, বা এর কারণ কী, এবং যদি কেউ কীভাবে সমস্যা সমাধান করে তা এই সমস্যার সমাধান করতে পারে। এটি RHEL 6.1 এবং মাইএসকিউএল এন্টারপ্রাইজ 5.5 এ রয়েছে।

উত্তর:


50

মাইএসকিউএল সংযোগের নীরব ঘাতকদের মধ্যে একটি হ'ল মাই এসকিউএল প্যাকেট।

প্রথমে, মাইএসকিউএল প্যাকেটটি কী তা নির্ধারণ করুন।

"মাইএসকিউএল অভ্যন্তরীণ বোঝা" (আইএসবিএন 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;

একবার চেষ্টা করে দেখো !!!


খুব ভাল ব্যাখ্যা।
ভ্যাসিলিস লরদাস

4

বেশিরভাগ ক্ষেত্রে ডিফল্টভাবে সর্বোচ্চ_ সংযোগগুলি 100 হবে the কনফিগার প্যারামিটারটি বাড়ানোর চেষ্টা করুন

সর্বাধিক সংযোগগুলি = 400, my.cnf এ সেট করার পরে সার্ভারটি পুনরায় বুট করুন, বা এটি গতিশীল সেট করুন:

    set @@global.max_connections = 400;

এই সতর্কতা বার্তাগুলি এড়াতে কেবল উপরের সুপারিশটি ব্যবহার করে দেখুন এবং আপনার নেটওয়ার্কের কোনও প্যাকেটের ড্রপ নেই তাও নিশ্চিত করুন।


2

সম্প্রতি মাইএসকিউএল এন্টারপ্রাইজ 5.1.x থেকে 5.7.x এ যাওয়ার পরে আমি এই সমস্যার মুখোমুখি হয়েছি , অ্যাপ্লিকেশনটিতে কোনও উল্লেখযোগ্য কোড পরিবর্তন না করে ' নোট ' প্রদর্শিত শুরু হয়েছিল।

আমার ক্ষেত্রে ' নোট ' প্রদর্শিত হওয়ার মূল কারণটি ছিল সংযোগ সহ এখনও চালু হওয়া প্রোগ্রামটি। সংযোগ বন্ধ না হওয়ার পরিস্থিতিটি আরও কিছুটা জড়িত ছিল এবং মাইএসকিউএল সম্পর্কিত নয় তবে এসিই, থ্রেড এবং টিএসএস সম্পর্কিত ছিল।


0

এই my.ini লাইনটি আমার সমস্যার সমাধান করেছে:

log_error_verbosity=1

এই লিঙ্কটি উল্লেখ করুন


16
আমি মনে করি না আপনি অন্তর্নিহিত সমস্যাটি সমাধান করেছেন তবে এটি লগ হওয়া সহজভাবে বন্ধ করে দিয়েছেন।
ব্যবহারকারী 19292

1
আমি একই বার্তাটি "নোট" হিসাবে প্রতিবেদন করছিলাম। Log_error_verbosity = 2 ব্যবহার করা আসলে "সমস্যা" সমাধান করে (তবে একটি "সতর্কতা" এড়ানো উচিত, উপেক্ষা করা উচিত নয়)
xtian
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.