অচলাবস্থা অনুকরণ করার কোড


26

আমি আমার অ্যাপ্লিকেশনটি পরীক্ষা করছি আমার এমন কিছু কোড দরকার যা স্থির করে ডেটাবেস সাইটে ডেডলকটি সিমুলেট করে (সম্ভব হলে স্কয়ার স্ক্রিপ্ট)।

ধন্যবাদ.

যোগ করেছেন:

শুধুমাত্র একটি টেবিল জড়িত ডেডলকগুলি পুনরুত্পাদন করা


2
আমি প্রশ্নটি বেশ বুঝি না। আপনি কি কিছুটা উচ্চারণ করতে পারেন? অবশ্যই নীচের দুটি ব্যক্তি আপনাকে যথেষ্ট ভালভাবে বুঝতে পেরেছিল, তবে আমি আপনাকে বেশ অনুসরণ করছি না। আপনি কি এমন কোডটি বোঝাচ্ছেন যা "স্টাইলে" একটি অচলাবস্থা অনুকরণ করে? অচলাবস্থার পরে আপনি কী করবেন? আপনি কি প্রমাণ করতে চান যে এটি ঘটতে পারে?
jcolebrand

উত্তর:


29

সবচেয়ে ভাল উপায় হ'ল আপনার কাছে ইতিমধ্যে থাকা সারণীগুলি ব্যবহার করা। দুটি টেবিল তৈরি করুন - টেবিল-এ, টেবিল-বি একটি পরীক্ষার জন্য আপনি একই তথ্যের সাথে একই কলামটি আপডেট করতে পারেন যাতে আপনি কোনও বাস্তব ডেটা প্রভাবিত করেন না।

উদাহরণস্বরূপ আপডেটের টেবিল_এ সেট আইডি = আইডি যেখানে আইডি = 100;

একই ডাটাবেসে দুটি সেশন খুলুন। এক, চালান

BEGIN TRAN
update table_a set ID=ID where ID = 100;

দুই রান

BEGIN TRAN
update table_b set ID=ID where ID =100;

তারপরে, আপডেটের বিবৃতিগুলি বিরোধী সেশনে অনুলিপি করুন এবং একই সময়ে চালান। একটি,

update table_b set ID=ID where ID =100;

দুইটাতে

update table_a set ID=ID where ID = 100;

আমি এখনই এটি চেষ্টা করেছি এবং এমএস-এসকিউএল পেয়েছি

Msg 1205, Level 13, State 56, Line 1
Transaction (Process ID 23) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

7

sp_getapplockআপনার স্যাম্পল কোডটিতে কখন কী লক প্রয়োজন তা নিতে সিস্টেম সঞ্চিত পদ্ধতিটি ব্যবহার করুন ।

কড়া কথায় বলতে গেলে এটি একটি ডিজকস্ট্রা সেমোফোর । এখনও অভিশাপ দরকারী যদিও


sp_getapplockএকটি ত্রুটি নিক্ষেপ করবে না। এটি হয় সময়সীমাটির মেয়াদ শেষ হওয়ার জন্য অপেক্ষা করবে, বা (যদি কোনও সময়সীমা না থাকে), ফিরে আসুন-3 ( এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms189823.aspx )
ইয়ান বয়ড

2

এখানে উপরে পোস্ট করা জাতীয়টির মতোই অন্য একটি পদ্ধতি রয়েছে>

CREATE TABLE Tbl1 (id INT NOT NULL PRIMARY KEY CLUSTERED, col INT)
CREATE TABLE Tbl2 (id INT NOT NULL PRIMARY KEY CLUSTERED, col INT REFERENCES dbo.Tbl1(id))

প্রশ্ন উইন্ডো # 1 এ ব্যবহৃত স্ক্রিপ্ট used

BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)

প্রশ্ন উইন্ডো # 2 এ স্ক্রিপ্ট ব্যবহৃত হবে

BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)

প্রশ্ন উইন্ডো # 1 এ স্ক্রিপ্ট যুক্ত করা হবে

INSERT dbo.Tbl2 (id, col) VALUES (111, 555)

এ সম্পর্কে অতিরিক্ত তথ্যের জন্য, দেখুন:

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