দয়া করে নীচে এই উত্তরটি পড়তে ভুলবেন না , যা এখানে বর্ণিত সমস্যাগুলি হ্রাস করার উপায়গুলি বিস্তারিতভাবে জানায়।
একই ত্রুটিগুলি পিডিও ব্যবহার করে যেমন অন্য কোনও পিএইচপি ডাটাবেস ইন্টারফেসের সাথে থাকে যা অবিচ্ছিন্ন সংযোগগুলি করে: যদি আপনার স্ক্রিপ্টটি অপ্রত্যাশিতভাবে ডাটাবেস ক্রিয়াকলাপের মাঝামাঝি হয়ে যায়, তবে পরবর্তী অনুরোধটি যেখানে ডান স্ক্রিপ্টটি ছেড়ে গেছে সেখানেই উঠে যাবে। পিএইচপি স্তরে নয়, প্রসেসর ম্যানেজার পর্যায়ে সংযোগটি প্রসেস ম্যানেজার পর্যায়ে খোলা রাখা হয়েছে (Mod_php এর জন্য অ্যাপাচি, আপনি যদি ফাস্টসিজিআই ইত্যাদি ব্যবহার করেন তবে বর্তমান ফাস্টসিজিআই প্রক্রিয়া), এবং পিএইচপি এই সংযোগটি মরতে দেওয়ার জন্য অভিভাবক প্রক্রিয়াটিকে বলে না স্ক্রিপ্টটি অস্বাভাবিকভাবে শেষ হয়।
যদি ডেড স্ক্রিপ্ট লক করা টেবিলগুলি থাকে তবে সংযোগটি মারা না যাওয়া বা সংযোগ প্রাপ্ত পরবর্তী স্ক্রিপ্টটি টেবিলগুলি নিজেই তালাবদ্ধ না করা অবধি সেই টেবিলগুলি লক থাকবে।
যদি ডেড স্ক্রিপ্ট কোনও লেনদেনের মাঝামাঝি জায়গায় থাকে, যা ডেডলক টাইমারটি লাথি না দেওয়া পর্যন্ত অনেকগুলি টেবিলকে অবরুদ্ধ করতে পারে এবং তারপরেও, ডেডলক টাইমারটি পুরানো অনুরোধের পরিবর্তে নতুন অনুরোধটিকে সমস্যার কারণ হতে পারে।
যদি ডেড স্ক্রিপ্ট কোনও লেনদেনের মাঝামাঝি হয় তবে পরবর্তী স্ক্রিপ্টটি যে সংযোগটি দেয় তাও লেনদেনের স্থিতি পায়। এটি খুব সম্ভব (আপনার অ্যাপ্লিকেশন ডিজাইনের উপর নির্ভর করে) পরবর্তী স্ক্রিপ্টটি সম্ভবত বিদ্যমান লেনদেনের প্রতিশ্রুতি দেওয়ার চেষ্টা করতে পারে না বা এটি যখন না থাকে তখন প্রতিশ্রুতিবদ্ধ হয় বা এটি যখন না থাকে তখন ফিরে আসে।
এটি কেবল আইসবার্গের ডগা। প্রতিটি স্ক্রিপ্ট অনুরোধে একটি নোংরা সংযোগের পরে সর্বদা পরিষ্কার করার চেষ্টা করে এগুলি কিছুটা হলেও হ্রাস করা যায়, তবে এটি ডাটাবেসের উপর নির্ভর করে ব্যথা হতে পারে। আপনি যদি আপনার স্ক্রিপ্টে একরকম জিনিস হিসাবে ডাটাবেস সংযোগ তৈরি না করে সনাক্ত না করে থাকেন (এর অর্থ আপনি xdebug এবং / অথবা xhprof ব্যবহার করে কোড প্রোফাইলিং করেছেন ), আপনি কোনও কিছুর সমাধান হিসাবে অবিচ্ছিন্ন সংযোগগুলি বিবেচনা করবেন না ।
তদুপরি, বেশিরভাগ আধুনিক ডাটাবেসগুলিতে (পোস্টগ্রাইএসকিউএল সহ) সংযোগ পুলিংয়ের নিজস্ব পছন্দসই পদ্ধতি রয়েছে যা প্লেইন ভ্যানিলা পিএইচপি-ভিত্তিক ধ্রুবক সংযোগগুলি করে তাৎক্ষণিক ত্রুটিগুলি নেই।
একটি বিষয় স্পষ্ট করার জন্য, আমরা আমার কর্মক্ষেত্রে অবিচ্ছিন্ন সংযোগগুলি ব্যবহার করি, তবে পছন্দ অনুসারে নয়। আমরা অদ্ভুত সংযোগ আচরণের মুখোমুখি হয়েছিলাম , যেখানে আমাদের অ্যাপ্লিকেশন সার্ভার থেকে আমাদের ডাটাবেস সার্ভারের সাথে প্রাথমিক সংযোগটি ঠিক তিন সেকেন্ড সময় নিয়েছিল, যখন এটির উচিত ছিল একটি সেকেন্ডের ভগ্নাংশের একটি ভগ্নাংশ নেওয়া। আমরা মনে করি এটি একটি কার্নেল বাগ। আমরা এটিকে সমস্যা সমাধানের চেষ্টা ছেড়ে দিয়েছি কারণ এটি এলোমেলোভাবে ঘটেছিল এবং চাহিদা অনুসারে পুনরুত্পাদন করা যায়নি, এবং আমাদের আউটসোর্স IT এটির সন্ধান করার দৃ ability় ক্ষমতা রাখেনি।
নির্বিশেষে, গুদামের লোকেরা যখন কয়েক শতাধিক আগত অংশগুলি প্রক্রিয়াজাত করছে এবং প্রতিটি অংশ দেড় সেকেন্ডের পরিবর্তে সাড়ে তিন সেকেন্ড সময় নিচ্ছে, তারা আমাদের সকলকে অপহরণ করে আমাদের সহায়তা করার আগে আমাদের পদক্ষেপ নিতে হয়েছিল। সুতরাং, আমরা আমাদের বাড়ীতে উত্থিত ইআরপি / সিআরএম / সিএমএস মনস্তত্ত্বের কয়েকটি বিটস উল্টিয়েছি এবং অবিচ্ছিন্ন সংযোগের সমস্ত ভয়াবহতা প্রথম হাতে পেয়েছি। এলোমেলোভাবে আপাতদৃষ্টিতে ঘটে যাওয়া সমস্ত সূক্ষ্ম সামান্য সমস্যা এবং উদ্ভট আচরণ সন্ধান করতে আমাদের কয়েক সপ্তাহ লেগেছে । দেখা গেছে যে সপ্তাহে একবারের সেই মারাত্মক ত্রুটিগুলি যা আমাদের ব্যবহারকারীরা আমাদের অ্যাপটি অধ্যবসায় চেপে ধরেছিলেন তা লক টেবিলগুলি, পরিত্যাগের লেনদেন এবং অন্যান্য দুর্ভাগ্যজনক জঘন্য অবস্থা ছেড়ে চলেছে।
এই সরল-গল্পটির একটি বক্তব্য রয়েছে: এটি এমন জিনিসগুলি ভেঙে ফেলেছিল যা আমরা কখনই ভাঙার প্রত্যাশা করি না, সমস্তই পারফরম্যান্সের নামে। ট্রেডঅফটি মূল্যহীন ছিল না এবং আমরা আমাদের ব্যবহারকারীদের দাঙ্গা ছাড়াই সাধারণ সংযোগগুলিতে ফিরে যেতে পারার জন্য অধীর আগ্রহে অপেক্ষা করছি।