টিএল; ডিআর: নীচের প্রশ্নটি নীচে ফুটে উঠেছে: একটি সারি সন্নিবেশ করার সময় , একটি নতুন মান উত্পন্ন করার সময় এবং ক্লাস্টারড ইনডেক্সে সংশ্লিষ্ট সারি কীটি লক করার মধ্যে সুযোগের একটি উইন্ডো রয়েছে, যেখানে কোনও বহিরাগত পর্যবেক্ষক নতুন দেখতে পাবে? একসাথে লেনদেন দ্বারা মান ?োকানো? (এসকিউএল সার্ভারে।)Identity
Identity
বিস্তারিত সংস্করণ
আমি একজন সঙ্গে একটি SQL সার্ভার টেবিল আছে Identity
কলাম নামক CheckpointSequence
, যা সারণীর ক্লাস্টার সূচক কী (যা অতিরিক্ত nonclustered ইনডেক্স একটি নম্বর আছে) হয়। সারিগুলি বেশ কয়েকটি সমবর্তী প্রক্রিয়া এবং থ্রেড (বিচ্ছিন্ন স্তরে এবং বাইরে ) সারণিতে সন্নিবেশ করা হয় । একই সময়ে, সেখানে প্রসেস পর্যায়ক্রমে হয় পড়া ক্লাস্টার সূচি থেকে সারি, যে দ্বারা আদেশ কলাম (এছাড়াও বিচ্ছিন্নতা পর্যায়ে , সঙ্গে বিকল্প বন্ধ পরিণত হচ্ছে)।READ COMMITTED
IDENTITY_INSERT
CheckpointSequence
READ COMMITTED
READ COMMITTED SNAPSHOT
আমি বর্তমানে এই বাস্তবতার উপর নির্ভর করি যে পড়ার প্রক্রিয়াগুলি কখনই একটি চেকপয়েন্টকে "এড়িয়ে যেতে" পারে না। আমার প্রশ্ন: আমি কি এই সম্পত্তির উপর নির্ভর করতে পারি? এবং যদি তা না হয় তবে আমি এটি সত্য করার জন্য কী করতে পারি?
উদাহরণ: যখন পরিচয় মান 1, 2, 3, 4, এবং 5 সহ সারি সন্নিবেশ করা হয়, তখন পাঠককে 4 মান সহ 4 টির আগে সারিটি দেখতে হবে না ests টেস্টগুলি দেখায় যে কোয়েরিতে একটি ORDER BY CheckpointSequence
ধারা রয়েছে ( এবং একটি WHERE CheckpointSequence > -1
ধারা), যখনই সারি 4 পড়তে হবে বিশ্বস্তভাবে অবরুদ্ধ হয়, তবে এখনও প্রতিশ্রুতিবদ্ধ হয় না, এমনকি সারি 5 ইতিমধ্যে প্রতিশ্রুতিবদ্ধ হয়ে থাকলেও।
আমি বিশ্বাস করি যে তাত্ত্বিকভাবে কমপক্ষে, এখানে একটি দৌড়ের শর্ত থাকতে পারে যা এই ধারণাটি ভাঙ্গার কারণ হতে পারে। দুর্ভাগ্যক্রমে, ডকুমেন্টেশন একাধিক সমবর্তী লেনদেনের প্রসঙ্গে Identity
কীভাবে Identity
কাজ করে সে সম্পর্কে খুব বেশি কিছু বলে না , এটি কেবলমাত্র "প্রতিটি নতুন মান বর্তমান বীজ এবং বর্ধনের উপর ভিত্তি করে উত্পন্ন হয়"। এবং "নির্দিষ্ট লেনদেনের জন্য প্রতিটি নতুন মান টেবিলের অন্যান্য সমবর্তী লেনদেনের চেয়ে আলাদা।" ( এমএসডিএন )
আমার যুক্তিটি হ'ল, এটি অবশ্যই এইরকমভাবে কাজ করবে:
- একটি লেনদেন শুরু হয় (হয় স্পষ্টভাবে বা স্পষ্টভাবে)।
- একটি পরিচয় মান (এক্স) উত্পন্ন হয়।
- সম্পর্কিত সারি লকটি সনাক্তকরণ মানের উপর ভিত্তি করে ক্লাস্টারড ইনডেক্সে নেওয়া হয় (যদি না লক এস্কলেশন লাথি দেয়, তবে পুরো টেবিলটি লক থাকে না))
- সারিটি sertedোকানো হয়েছে।
- লেনদেন প্রতিশ্রুতিবদ্ধ (সম্ভবত পরে বেশিরভাগ সময় পরে), তাই লকটি আবার সরানো হবে।
আমি মনে করি 2 থেকে 3 ধাপের মধ্যে খুব ছোট উইন্ডো রয়েছে যেখানে
- সমবর্তী অধিবেশন পরবর্তী পরিচয় মান (এক্স + 1) উত্পন্ন করতে পারে এবং অবশিষ্ট সমস্ত পদক্ষেপগুলি কার্যকর করতে পারে,
- এইভাবে পাঠককে ঠিক সেই সময়ে X + 1 মান পড়ার সুযোগ দেয়, এক্স এর মানটি মিস করে missing
অবশ্যই, এর সম্ভাবনা অত্যন্ত কম বলে মনে হয়; কিন্তু এখনও - এটি ঘটতে পারে। বা এটা করতে পারে?
(যদি আপনি এই প্রসঙ্গে আগ্রহী হন: এটি হল নেভেনস্টোরের এসকিউএল পার্সিস্ট্যান্স ইঞ্জিনের বাস্তবায়ন N NEVESTore একটি অ্যাপেন্ড-একমাত্র ইভেন্ট স্টোর প্রয়োগ করে যেখানে প্রতিটি ইভেন্টে একটি নতুন, আরোহী চেকপয়েন্ট ক্রম নম্বর পাওয়া যায় Cli ক্লায়েন্টরা চেকপয়েন্ট দ্বারা আদেশিত ইভেন্ট স্টোর থেকে ইভেন্টগুলি পড়েন সকল প্রকারের গণনা সম্পাদনের জন্য। চেকপয়েন্ট এক্স-এর সাথে একবার কোনও ইভেন্ট প্রক্রিয়া করা হয়ে গেলে, ক্লায়েন্টরা কেবলমাত্র "নতুন" ইভেন্টগুলি বিবেচনা করে, যেমন, চেকপয়েন্ট X + 1 এবং এরপরের ঘটনাগুলি বিবেচনা করে। অতএব, এটি অত্যাবশ্যক যে ইভেন্টগুলি কখনই এড়ানো যায় না, যেহেতু তাদের আর কখনও বিবেচনা করা হবে না I'm আমি বর্তমানে নির্ধারণের চেষ্টা করছি যে Identity
বেসড চেকপয়েন্ট বাস্তবায়ন এই প্রয়োজনীয়তাটি পূরণ করে কিনা These এগুলি সঠিক এসকিউএল বিবৃতিগুলি ব্যবহৃত হয় : স্কিমা , লেখকের প্রশ্ন ,পাঠকের প্রশ্ন ।)
আমি যদি সঠিক হয়ে থাকি এবং উপরে বর্ণিত পরিস্থিতি উত্থাপিত হতে পারে তবে আমি তাদের সাথে ডিলের মাত্র দুটি বিকল্প দেখতে পাচ্ছি, উভয়ই অসন্তুষ্টিজনক:
- এক্স দেখার পূর্বে একটি চেকপয়েন্টের সিকোয়েন্স মান X + 1 দেখার সময়, এক্স + 1 খারিজ করুন এবং পরে আবার চেষ্টা করুন। তবে,
Identity
অবশ্যই ফাঁক তৈরি করতে পারে (যেমন, যখন লেনদেনটি ফিরিয়ে দেওয়া হয়), এক্স কখনই আসতে পারে না। - সুতরাং, একই পদ্ধতির, তবে n মিলিসেকেন্ডের পরে ব্যবধানটি গ্রহণ করুন। যাইহোক, আমি এন এর কোন মান ধরে নেওয়া উচিত?
আরও ভাল ধারণা?