মাদুর এবং এরউইন উভয়ই ঠিক আছে, এবং তারা এমনভাবে কী বলেছিল যা কোনও মন্তব্যে মানায় না সে সম্পর্কে আরও বিস্তৃত করার জন্য আমি আরও একটি উত্তর যুক্ত করছি। যেহেতু তাদের উত্তরগুলি সবার সন্তুষ্ট বলে মনে হচ্ছে না, এবং একটি পরামর্শ ছিল যে পোস্টগ্রেএসকিউএল বিকাশকারীদের পরামর্শ নেওয়া উচিত, এবং আমি একজন, আমি আরও বিশদ করব।
এখানে গুরুত্বপূর্ণ বিষয়টি হ'ল এসকিউএল স্ট্যান্ডার্ডের অধীনে READ COMMITTED
লেনদেনের বিচ্ছিন্নতা স্তরে চলমান লেনদেনের মধ্যে সীমাবদ্ধতা হ'ল অনির্ধারিত লেনদেনের কাজটি দৃশ্যমান হবে না। যখন অঙ্গীকারবদ্ধ লেনদেনের কাজ দৃশ্যমান হয় বাস্তবায়ন-নির্ভরশীল। আপনি কী দেখিয়ে দিচ্ছেন তা কীভাবে দুটি পণ্য এটি কার্যকর করতে বেছে নিয়েছে তার মধ্যে একটি পার্থক্য। উভয়ই বাস্তবায়ন মানের প্রয়োজনীয়তা লঙ্ঘন করছে না।
পোস্টগ্র্রেএসকিউএল-এর মধ্যে যা ঘটে তা এখানে বিশদে রয়েছে:
এস 1-1 রান (1 সারি মুছে ফেলা হয়েছে)
পুরাতন সারিটি জায়গায় রেখে দেওয়া হয়েছে, কারণ এস 1 এখনও পিছনে ফিরে আসতে পারে তবে এস 1 এখন সারিটিতে একটি লক ধরে রেখেছে যাতে সারিটি সংশোধন করার চেষ্টা করা অন্য কোনও অধিবেশন এস 1 কমিয়ে দেয় বা ফিরে যায় কিনা তা দেখার জন্য অপেক্ষা করবে। সারণীর যে কোনও পাঠ্য এখনও পুরানো সারিটি দেখতে পাবে, যদি না তারা এটিকে SELECT FOR UPDATE
বা দিয়ে লক করার চেষ্টা করে SELECT FOR SHARE
।
এস 2-1 চালায় (তবে এস 1 এর লেখার লক থাকায় এটি অবরুদ্ধ রয়েছে)
এস 2 এর ফলাফল দেখতে এখন এস 2 অপেক্ষা করতে হবে। যদি এস 1 কমিট করার পরিবর্তে পিছনে ফিরে আসে, এস 2 সারিটি মুছবে। দ্রষ্টব্য যে S1 যদি পিছনে ঘূর্ণায়মানের আগে একটি নতুন সংস্করণ sertedোকায়, নতুন সংস্করণটি অন্য কোনও লেনদেনের দৃষ্টিকোণ থেকে কখনও হত না, বা অন্য কোনও লেনদেনের দৃষ্টিকোণ থেকে পুরানো সংস্করণটি মুছে ফেলা হত না।
এস 1-2 রান (1 সারি sertedোকানো)
এই সারিটি পুরানোটির চেয়ে স্বতন্ত্র। যদি আইডি = 1 দিয়ে সারিটির আপডেট থাকে তবে পুরানো এবং নতুন সংস্করণ সম্পর্কিত হবে এবং এস -2 সারণীর আপডেট হওয়া সংস্করণটি আনব্লকড হয়ে গেলে মুছতে পারে। একটি নতুন সারি অতীতে বিদ্যমান এমন কিছু সারির সমান মানগুলির সাথে ঘটে যা এ সারির আপডেট হওয়া সংস্করণের মতো হয় না।
এস 1-৩ চালায়, লেখার লকটি প্রকাশ করে
সুতরাং এস 1 এর পরিবর্তনগুলি বহাল রয়েছে। এক সারি চলে গেছে। একটি সারি যুক্ত করা হয়েছে।
এস 2-1 চালায়, এখন এটি লকটি পেতে পারে। তবে রিপোর্ট 0 টি সারি মুছে ফেলা হয়েছে। ওহো ???
অভ্যন্তরীণভাবে কী হয়, তা হ'ল এটির আপডেট করা থাকলে একটি সারির একটি সংস্করণ থেকে একই সারির পরবর্তী সংস্করণে একটি পয়েন্টার রয়েছে। যদি সারিটি মোছা হয়, তবে পরবর্তী কোনও সংস্করণ নেই। READ COMMITTED
লেখার বিরোধে কোনও ব্লক থেকে কোনও লেনদেন জাগ্রত হয়, এটি শেষ পর্যন্ত সেই আপডেট চেইন অনুসরণ করে; যদি সারিটি মোছা না করা হয়েছে এবং যদি এটি এখনও কোয়েরির নির্বাচনের মানদণ্ড পূরণ করে তবে এটি প্রক্রিয়া করা হবে। এই সারিটি মুছে ফেলা হয়েছে, সুতরাং এস 2 এর ক্যোয়ারী এগিয়ে চলেছে।
টেবিলটি স্ক্যান করার সময় এস 2 নতুন সারিতে উঠতে পারে বা নাও পারে। এটি যদি হয় তবে এটি দেখতে পাবে যে এস-এর DELETE
বক্তব্য শুরুর পরে নতুন সারিটি তৈরি করা হয়েছিল এবং এটি সারিগুলির সেটটির অংশ নয়।
পোস্টগ্র্রেএসকিউএল যদি কোনও নতুন স্ন্যাপশট দিয়ে শুরু থেকে এস 2 এর সম্পূর্ণ ডিলিট স্টেটমেন্টটি পুনরায় চালু করতে থাকে তবে এটি এসকিউএল সার্ভারের মতোই আচরণ করবে। পোস্টগ্রিসএসকিউএল সম্প্রদায় পারফরম্যান্সের কারণে এটি করতে বেছে নেয় নি। এই সাধারণ ক্ষেত্রে আপনি পারফরম্যান্সের পার্থক্যটি কখনই লক্ষ্য করতে পারবেন না, তবে আপনি যখন আটকা পড়েছিলেন তখন যদি আপনি দশ মিলিয়ন সারি হয়ে থাকেন তবে DELETE
আপনি অবশ্যই তা করতে পারেন। এখানে বাণিজ্য বন্ধ রয়েছে যেখানে পোস্টগ্র্যাস এসকিউএল কার্য সম্পাদনকে বেছে নিয়েছে, যেহেতু দ্রুত সংস্করণ এখনও স্ট্যান্ডার্ডের প্রয়োজনীয়তা মেনে চলে।
এস 2-2 চালায়, একটি অনন্য কী বাধা লঙ্ঘনের রিপোর্ট করেছে
অবশ্যই, সারি ইতিমধ্যে বিদ্যমান। এটি ছবির সবচেয়ে কম অবাক করা অংশ।
এখানে কিছু আশ্চর্যজনক আচরণ চলাকালীন, সমস্ত কিছু এসকিউএল স্ট্যান্ডার্ডের সাথে এবং মান অনুসারে "বাস্তবায়ন-নির্দিষ্ট" এর সীমার মধ্যে রয়েছে। আপনি অবশ্যই ধরে নিচ্ছেন যে অন্য কিছু বাস্তবায়নের আচরণটি সমস্ত বাস্তবায়নে উপস্থিত হবে তবে আপনি অবশ্যই অবাক হতে পারেন, তবে পোস্টগ্রিস এসকিউএল READ COMMITTED
বিচ্ছিন্নতা স্তরে সিরিয়ালাইজেশন ব্যর্থতা এড়াতে খুব চেষ্টা করে এবং এটি অর্জনের জন্য এমন কিছু আচরণের অনুমতি দেয় যা অন্যান্য পণ্যগুলির থেকে পৃথক হয়।
এখন, ব্যক্তিগতভাবে আমি কোনও পণ্যের বাস্তবায়নে READ COMMITTED
লেনদেনের বিচ্ছিন্নতা স্তরের কোনও বড় অনুরাগী নই । এগুলি সমস্ত দৌড়ের পরিস্থিতি লেনদেনের দিক থেকে অবাক করা আচরণ তৈরি করার অনুমতি দেয়। কেউ একবার একটি পণ্য দ্বারা অনুমোদিত অদ্ভুত আচরণে অভ্যস্ত হয়ে ওঠে, তারা সেই "স্বাভাবিক" এবং অন্য পণ্য দ্বারা নির্বাচিত ট্রেড-অফকে বিবেচ্য বলে বিবেচনা করে। তবে প্রতিটি পণ্যকে যে কোনও মোডের জন্য বাস্তবে রূপায়িত করা হয়নি তার জন্য কিছু প্রকারের বাণিজ্য বন্ধ করতে হবে SERIALIZABLE
। পোস্টগ্র্রেএসকিউএল বিকাশকারীরা যেখানে লাইনটি আঁকতে বেছে নিয়েছেন READ COMMITTED
তা হ'ল ব্লকিং হ্রাস করা (রাইটগুলি ব্লক করবেন না এবং লেখেন না ব্লক রিডগুলি পড়ে না) এবং সিরিয়ালাইজেশন ব্যর্থতার সম্ভাবনা হ্রাস করা।
স্ট্যান্ডার্ডটির প্রয়োজন হয় যে SERIALIZABLE
লেনদেনগুলি ডিফল্ট হয়, তবে বেশিরভাগ পণ্য তা করে না কারণ এটি আরও বেশি লেনদেনের বিচ্ছিন্নতা স্তরের উপর একটি কার্যকারিতা হিট করে। কিছু পণ্য এমনকি যখন SERIALIZABLE
বেছে নেওয়া হয় সত্যিকারের সিরিয়ালাইজযোগ্য লেনদেন সরবরাহ করে না - উল্লেখযোগ্যভাবে ওরাকল এবং ৯.১ এর পূর্বে পোস্টগ্র্যাসকিউএলএর সংস্করণ। তবে সত্যিকারের SERIALIZABLE
লেনদেনগুলি ব্যবহার করা জাতির পরিস্থিতি থেকে আশ্চর্যজনক প্রভাব এড়ানোর একমাত্র উপায়, এবং SERIALIZABLE
লেনদেনের ক্ষেত্রে সর্বদা হয় প্রতিরোধের পরিস্থিতি এড়াতে অবরুদ্ধ হওয়া উচিত বা বিকাশমান বর্ণের পরিস্থিতি এড়াতে কিছু লেনদেন ব্যাক করতে হবে। SERIALIZABLE
লেনদেনের সর্বাধিক সাধারণ বাস্তবায়ন হ'ল স্ট্রিক্ট টু-ফেজ লকিং (এস 2 পিএল) যা ব্লকিং এবং সিরিয়ালাইজেশন ব্যর্থতা উভয়ই (ডেডলক আকারে)।
সম্পূর্ণ প্রকাশ: এমআইটি-র ড্যান পোর্টসের সাথে পোস্টগ্র্রেএসকিউএল সংস্করণ 9.1-এ সিরিয়ালাইজেবল স্ন্যাপশট আইসোলেশন নামে একটি নতুন কৌশল ব্যবহার করে সত্যই সিরিয়ালযোগ্য লেনদেন যুক্ত করতে আমি কাজ করেছি।