এটি থেকে একটি ফলোআপ প্রশ্ন: /programming/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot- স্বয়ংক্রিয়ভাবে
যদিও এখনও এক সাথে বড় রিপোর্ট চালানো হচ্ছে তখনও আমার এএসপি.এনইটি অ্যাপ্লিকেশনটিতে অচলাবস্থা / সময়সীমা স্থিতিশীল অবস্থা রয়েছে READ_COMMITTED_SNAPSHOT ON
।
সুতরাং আমার দুটি প্রশ্ন আছে:
- লেনদেনের বিচ্ছিন্নতা স্তরের স্ন্যাপশট প্রত্যাশিত / আদৌ কাজ করছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি ?
- আমি ধরে নিচ্ছি যে বিদেশী কীগুলি (ওয়েব-অ্যাপ্লিকেশনের টেবিলগুলিতে রিপোর্ট-টেবিলগুলিতে) অচলাবস্থার জন্য দায়বদ্ধ। আমি এই আকর্ষণীয় নিবন্ধটি পেয়েছি :
দ্রষ্টব্য এসকিউএল সার্ভার বিদেশী কীগুলি যাচাই করার সময় ভাগ করা লকগুলি অর্জন করে, এমনকি যদি লেনদেন পড়তে প্রতিশ্রুত স্ন্যাপশট ব্যবহার করে (সারি সংস্করণ ব্যবহার করে প্রতিশ্রুত পড়া) বা স্ন্যাপশট বিচ্ছিন্নতা স্তর ব্যবহার করে। এই লেনদেনের বিচ্ছিন্নতা স্তরগুলি যখন ব্যবহৃত হয় তখন লেনদেন থেকে ডেডলক গ্রাফগুলি পরীক্ষা করার সময় এ বিষয়ে সচেতন হন। যদি আপনি ভাগ করা লকগুলি দেখেন তবে লকগুলি কোনও বিদেশী কী দ্বারা রেফারেন্সযুক্ত কোনও বস্তুর উপরে নেওয়া হয়েছে কিনা তা পরীক্ষা করে দেখুন।
এফকে ডেডলক / টাইমআউট পরিস্থিতিগুলির জন্য সত্যই দায়ী কিনা আমি কীভাবে তা পরীক্ষা করতে পারি, তার মানে কি আমি এই বিদেশী চাবিগুলি মুছে ফেলতে পারি ডেডলকগুলি রোধ করতে (কোন গ্রহণযোগ্য প্রচেষ্টা হবে)?
দ্রষ্টব্য : আমি কেবল টেবিলগুলি থেকে পড়ছি যা অচলাবস্থার কারণ।
এই বিষয়ে কোন চিন্তা প্রশংসা করা হয়।
সম্পাদনা এখানে একটি ডেডলক-গ্রাফ রয়েছে । অচলাবস্থার কারণ কী তা বুঝতে কেউ আমাকে সাহায্য করতে পারে। মনে হয় এটি কোনও প্রতিবেদন ছাড়াই ঘটেছিল কেবল ওয়েব-অ্যাপ্লিকেশনের কারণে, যখন দুটি লেনদেন একই টেবিলটি লিখতে চায় (একটি আপডেট এবং একটি সন্নিবেশ, সন্নিবেশটি সঞ্চিত-প্রক্রিয়া হিসাবে থাকে)। এটি কেন পৃষ্ঠা লকগুলি অর্জন করে এবং কীভাবে কেবল সারি লকগুলি সক্ষম করে? সন্নিবেশ-এসপি ইতিমধ্যে ব্যবহার করে TRANSACTION ISOLATION LEVEL REPEATABLE READ
।
আমার দৃ strong় সন্দেহ আছে যে দুটি ট্রিগার (একটি আপডেট এবং একটি সন্নিবেশ) অচলাবস্থার জন্য দায়ী। এখানে সন্নিবেশ-ট্রিগারটি দেওয়া হচ্ছে:
CREATE TRIGGER [dbo].[CreateRMAFiDates]
ON [dbo].[RMA]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE RMA
SET [fiCreationDate]=(SELECT idDate FROM tdefDate
WHERE CONVERT(VARCHAR, INSERTED.Creation_Date, 112) = tdefDate.Text),
[fiPopDate]=(SELECT idDate FROM tdefDate
WHERE CONVERT(VARCHAR, INSERTED.POP_Date, 112) = tdefDate.Text),
[fiManufactureDate]=(SELECT idDate FROM tdefDate
WHERE CONVERT(VARCHAR, INSERTED.Manufacture_Date, 112) = tdefDate.Text)
FROM INSERTED;
END
সুতরাং এই ট্রিগারটি আরএমএ-টেবিল আপডেট করে যা আপডেট-ট্রিগারটি আগুনের কারণ করে (কী ঘটে)। অচলাবস্থা-গ্রাফটি কি আমার অনুমানের বিষয়টি নিশ্চিত করে? আমি মনে করি আমি সেই ট্রিগারগুলি মুছে ফেলব এবং এমন এসপি তৈরি করব যা দিনে একবার চলমান থাকে যা যথেষ্ট পরিমাণে যথেষ্ট হবে, কারণ এই কলামটি কেবল এসএসএএস-কিউব (মোল্যাপ) এর জন্য।
সম্পাদনা করুন : যাইহোক, আমি এই ট্রিগারগুলি মোছার পরে আর কোনও অচলাবস্থা নেই :)