যদি কোনও সংযোগ হারিয়ে / ভাঙা যায় তবে পোস্টগ্রাসের দীর্ঘ-চলমান ক্যোয়ারী বাতিল করা হবে?


20

যদি আমি পোস্টগ্রিসের সাথে সংযোগটি খুলি এবং দীর্ঘ-চলমান ক্যোয়ারি ইস্যু করি এবং তারপরে এই সংযোগটি ভাঙ্গা করে (উদাহরণস্বরূপ, সংযোগটি খোলার ক্লায়েন্ট প্রক্রিয়াটি মেরে ফেলুন), তবে দীর্ঘ-চলমান ক্যোয়ারীটি চালিয়ে যেতে থাকবে, বা এটি স্বয়ংক্রিয়ভাবে বাতিল হয়ে যাবে? এটি কি কনফিগারযোগ্য?

(আমি পোস্টগ্র্যাস্কল 9.2.9 ব্যবহার করছি)

উত্তর:


32

"এটা নির্ভর করে".

নেটওয়ার্ক সংযোগ নষ্ট হয়ে যাওয়ার কারণে ক্লায়েন্টটি যদি অদৃশ্য হয়ে যায় তবে তার নেটওয়ার্ক প্রেরিত বাফার পূরণের জন্য পর্যাপ্ত সারি সংগ্রহ না হওয়া অবধি ক্যোয়ারিটি চলবে, তারপরে টিসিপি সংযোগ না ফেলা পর্যন্ত থামুন এবং আটকা পড়ুন, যে পর্যায়ে এটি বাতিল হয়ে যাবে। এটি টিসিপি প্রেরণের বাফার পূরণের আগে যদি এটি সম্পূর্ণ হয় তবে এটি সফলভাবে সম্পন্ন হবে, সুতরাং এটি স্বতঃসংশোধিত হলে কোয়েরিটি প্রতিশ্রুতিবদ্ধ।

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

যদি ক্লায়েন্টটি হঠাৎ ওএস রিবুটের মতো কোনও কারণে মারা যায়, যাতে ক্লায়েন্ট হোস্টটি হঠাৎ করে টিসিপি সংযোগ সম্পর্কে কিছুই না জানে তবে নেটওয়ার্কে এখনও প্রতিক্রিয়া জানাতে পারে, সন্ধানটি প্রথমবার সন্ধান করার পরে প্রথমে বাতিল হয়ে যাবে, যেমন জেফ বলেছিলেন, কারণ ক্লায়েন্টের হোস্ট রিবুটের পরে সার্ভারের মাধ্যমে প্রেরিত প্রথম প্যাকেটের প্রতিক্রিয়াতে একটি টিসিপি আরএসটি প্রেরণ করবে। পোস্টগ্র্রেএসকিউএল পাঠায় প্রতিটি সারিতে বাধাগুলির জন্য পরীক্ষা করে।

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

যদি ক্যোয়ারীটি স্বতঃস্মরণ হয় বা আপনার ক্লোয়ারটি COMMITআপনি যখন ক্লায়েন্টকে হত্যা করেছেন / সংযোগটি হারিয়েছেন তখন সেখানকার বিমান ছিল, তবে কোনও লেনদেন অনিশ্চিত অবস্থায় থাকতে পারে যেখানে ক্লায়েন্ট জানেন না বা না এটা প্রতিশ্রুতিবদ্ধ না। ডেটাতে লেনদেনের প্রভাবগুলি সন্ধান করা ছাড়া এটি খুঁজে পাওয়ার কোনও আসল উপায় নেই।

যেখানে এটি অগ্রহণযোগ্য, আপনি দুটি ফেজ কমিট এবং ক্লায়েন্ট-সাইড লেনদেন পরিচালক ব্যবহার করতে পারেন ।


1
বাহ, আমি যা খুঁজছিলাম, একটি দুর্দান্ত বিস্তারিত উত্তর! ধন্যবাদ @ ক্রেইগ_ রিঞ্জার!
রব বেদনার্ক


2

সংযোগে সারিগুলি ফেরত দেওয়ার চেষ্টা না করা এবং ভাঙ্গন সনাক্ত না করা অবধি এটি চলতে থাকবে। সুতরাং কোনও ক্যোয়ারির জন্য যা কোনও সারি ফেরত দেওয়ার আগে সমস্ত কাজ করে, এটি মূলত সমাপ্তিতে চলে যাবে।


ধন্যবাদ @ জাজানেস আপনি কি কোনও ডকুমেন্টেশন বা উত্স কোডকে নির্দেশ করতে পারেন যা এটি নির্দেশ করে?
রব বেদনার্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.