সরল ইংরেজিতে, অসুবিধাগুলি এবং ব্যবহারের সুবিধাগুলি কী
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
.NET অ্যাপ্লিকেশন এবং রিপোর্টিং পরিষেবাদির অ্যাপ্লিকেশনগুলির প্রশ্নের জন্য?
সরল ইংরেজিতে, অসুবিধাগুলি এবং ব্যবহারের সুবিধাগুলি কী
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
.NET অ্যাপ্লিকেশন এবং রিপোর্টিং পরিষেবাদির অ্যাপ্লিকেশনগুলির প্রশ্নের জন্য?
উত্তর:
এই বিচ্ছিন্নতা স্তরটি ময়লা পড়ার অনুমতি দেয়। একটি লেনদেন অন্য কিছু লেনদেন দ্বারা অনিয়ন্ত্রিত পরিবর্তন দেখতে পারে।
সর্বোচ্চ স্তরের বিচ্ছিন্নতা বজায় রাখার জন্য, একটি ডিবিএমএস সাধারণত ডেটাতে লকগুলি অর্জন করে, যার ফলে সম্মতিহীন ক্ষতি এবং একটি উচ্চ লকিং ওভারহেড হতে পারে। এই বিচ্ছিন্নতা স্তরটি এই সম্পত্তিটিকে শিথিল করে।
আপনি কয়েকটি উদাহরণ এবং আরও পড়ার জন্য উইকিপিডিয়া নিবন্ধটিREAD UNCOMMITTED
পরীক্ষা করে দেখতে চাইতে পারেন ।
জ্যাক অ্যাটউডের ব্লগ নিবন্ধটি স্ট্যাক ওভারফ্লোয়ের প্রথম দিনগুলিতে কীভাবে তিনি এবং তার দল কীভাবে একটি অচলাবস্থার বিষয়টিকে মোকাবেলা করেছিল তা পরীক্ষা করতে আগ্রহী হতে পারেন । জেফের মতে:
তবে
nolock
বিপজ্জনক? আপনি কি দিয়ে অবৈধ ডেটা পড়া শেষ করতে পারেনread uncommitted
? হ্যাঁ, তাত্ত্বিকভাবে। আপনি ডাটাবেস আর্কিটেকচারের মহাকাশচারীদের অভাব খুঁজে পাবেন না যারা আপনার এবং সকলের উপরে এসিডি বিজ্ঞান বাদ দিতে শুরু করে তবে বিল্ডিং ফায়ার অ্যালার্মটি টানলে আপনি যখন চেষ্টা করতে চান সেগুলি জানানnolock
। এটি সত্য: তত্ত্বটি ভীতিজনক। তবে আমি যা মনে করি তা এখানে: "তত্ত্বের মধ্যে তত্ত্ব এবং অনুশীলনের মধ্যে কোনও পার্থক্য নেই practice বাস্তবে রয়েছে।"
nolock
আপনার যে কোনও ডাটাবেস ডেডলকিংয়ের সমস্যা হতে পারে তার জন্য সাপের তেল ফিক্সকে সাধারণ হিসাবে ব্যবহার করার পরামর্শ দেব না । আপনার প্রথমে সমস্যার উত্স নির্ণয়ের চেষ্টা করা উচিত।তবে বাস্তবে
nolock
এমন প্রশ্নের সাথে যুক্ত করা যা আপনি একেবারেই জানেন সহজ, সরল পাঠযোগ্য বিষয়গুলি কখনই সমস্যার কারণ হতে পারে না ... যতক্ষণ না আপনি জানেন আপনি কী করছেন।
আপনি যে READ UNCOMMITTED
স্তরের বিষয়টি বিবেচনা করতে পারেন তার একটি বিকল্প হ'ল READ COMMITTED SNAPSHOT
। আবার জেফের উদ্ধৃতি:
স্ন্যাপশটগুলি সম্পূর্ণ নতুন ডেটা পরিবর্তন ট্র্যাকিং পদ্ধতির উপর নির্ভর করে ... কেবলমাত্র সামান্য যৌক্তিক পরিবর্তন ছাড়াও, শারীরিকভাবে আলাদাভাবে ডেটা পরিচালনা করতে সার্ভারের প্রয়োজন হয়। এই নতুন ডেটা চেঞ্জ ট্র্যাকিং পদ্ধতিটি সক্ষম হয়ে গেলে, এটি প্রতিটি ডেটা পরিবর্তনের একটি অনুলিপি বা স্ন্যাপশট তৈরি করে। বিতর্ক করার সময় লাইভ ডেটার পরিবর্তে এই স্ন্যাপশটগুলি পড়ার দ্বারা, ভাগ করা লকগুলি আর পড়ার জন্য প্রয়োজন হয় না এবং সামগ্রিক ডাটাবেসের কর্মক্ষমতা বাড়তে পারে।
READ UNCOMMITTED
আপনাকে দু'বার সারি পড়তে বা পুরো সারিটি মিস করতেও পারে । আপনি পড়ার সময় যদি কোনও পৃষ্ঠা-বিভক্ত হয়, তবে আপনি পুরো পরিমাণের ডেটা মিস করতে পারেন। WITH(NOLOCK)
যদি ফলাফলগুলির যথার্থতা গুরুত্বপূর্ণ না হয় তবেই ব্যবহার করা উচিত
দীর্ঘ সন্নিবেশ অনুসন্ধানগুলির অগ্রগতি দেখতে, কোনও মোটামুটি অনুমান (যেমন COUNT(*)
বা রুক্ষ SUM(*)
) ইত্যাদি করতে এটি কার্যকর হতে পারে etc.
অন্য কথায়, নোংরা পাঠ্য প্রশ্নগুলির ফলাফলগুলি যতক্ষণ না আপনি তাদেরকে অনুমান হিসাবে গণ্য করেন এবং ততক্ষণে তাদের উপর ভিত্তি করে কোনও সমালোচনামূলক সিদ্ধান্ত নেন না fine
আমার প্রিয় ব্যবহারের ক্ষেত্রে read uncommited
হ'ল কোনও লেনদেনের মধ্যে ঘটে যাওয়া কোনও কিছু ডিবাগ করা।
কোনও ডিবাগারের অধীনে আপনার সফ্টওয়্যারটি শুরু করুন, আপনি কোডের লাইন দিয়ে পা রাখার সময় এটি একটি লেনদেন খোলে এবং আপনার ডাটাবেসটি পরিবর্তন করে। কোডটি বন্ধ হওয়ার পরে, আপনি কোনও প্রশ্ন বিশ্লেষকটি খুলতে পারেন, পড়ার জন্য নিঃশর্ত বিচ্ছিন্নতার স্তরে সেট করতে পারেন এবং কী চলছে তা দেখার জন্য প্রশ্ন তৈরি করতে পারেন।
দীর্ঘ চলমান পদ্ধতি আটকে আছে বা সঠিকভাবে আপনার ডাটাবেসটি আপডেট হচ্ছে কিনা তা দেখতে আপনি এটি ব্যবহার করতে পারেন।
আপনার সংস্থা যদি অত্যধিক জটিল সঞ্চিত পদ্ধতি তৈরি করতে পছন্দ করে তবে এটি দুর্দান্ত।
সুবিধাটি হ'ল এটি কিছু পরিস্থিতিতে দ্রুত হতে পারে। অসুবিধাটি হ'ল ফলাফলটি ভুল হতে পারে (যে ডেটা প্রতিশ্রুতি দেওয়া হয়নি তা ফেরত দেওয়া যেতে পারে) এবং ফলাফলটি পুনরাবৃত্ত হওয়ার কোনও গ্যারান্টি নেই।
আপনি যদি নির্ভুলতার বিষয়ে চিন্তা করেন তবে এটি ব্যবহার করবেন না।
আরও তথ্য এমএসডিএন- তে রয়েছে :
নোংরা পঠন বা বিচ্ছিন্ন স্তর 0 লকিং কার্যকর করে, যার অর্থ কোনও ভাগ করা লক জারি করা হয় না এবং কোনও এক্সক্লুসিভ লক সম্মানিত হয় না। যখন এই বিকল্পটি সেট করা থাকে, আপত্তিহীন বা নোংরা ডেটা পড়া সম্ভব; লেনদেন শেষ হওয়ার আগে ডেটা মানগুলিতে পরিবর্তন করা যায় এবং সারিগুলি ডেটা সেটটিতে উপস্থিত বা অদৃশ্য হয়ে যায়। এই বিকল্পের লেনদেনে সমস্ত নির্বাচনী বিবৃতিতে সমস্ত টেবিলগুলিতে NOLOCK সেট করার মতো প্রভাব রয়েছে। এটি চারটি বিচ্ছিন্ন স্তরের ন্যূনতম সীমাবদ্ধ।
select
অন্যান্য লেনদেনের দ্বারা একচেটিয়াভাবে লক থাকা সংস্থানগুলিতে ভাগ করা লকগুলি অর্জন করতে অপেক্ষা করতে হবে না।
কখন ব্যবহার করা ঠিক হবে READ UNCOMMITTED
?
ভাল : ক্রমাগত পরিবর্তনশীল মোট দেখায় বড় বড় সামগ্রিক প্রতিবেদনগুলি।
ঝুঁকিপূর্ণ : প্রায় সব কিছু।
সুসংবাদটি হ'ল কেবলমাত্র পঠনযোগ্য প্রতিবেদনগুলি সেই ভাল বিভাগে পড়ে ।
এটি ব্যবহার করা ঠিক আছে:
এটি সম্ভবত বিজনেস ইন্টেলিজেন্স বিভাগ যা করবে, তার বেশিরভাগ অংশ জুড়ে রয়েছে, এসএসআরএস বলে। অবশ্যই ব্যতিক্রম, এর সামনে লক্ষণগুলি সহ কিছু anything গ্রাহককে পরিষেবা দেওয়ার জন্য এবং প্রয়োজনীয় অর্থ উত্পন্ন করতে প্রয়োজনীয় মূল মেট্রিকগুলিতে প্রয়োগের চেয়ে অনেক বেশি উদ্যোগের সাথে অনেক লোক অর্থের জন্য অ্যাকাউন্ট করে। (আমি হিসাবরক্ষকদের দোষ দিই)।
ঝুঁকিপূর্ণ যখন
যে কোনও রিপোর্ট যা বিশদ স্তরে নেমে যায়। যদি সেই বিশদটির প্রয়োজন হয় তবে এটি সাধারণত বোঝায় যে প্রতিটি সারি কোনও সিদ্ধান্তের সাথে সম্পর্কিত। প্রকৃতপক্ষে, আপনি যদি অবরুদ্ধ না করে কোনও ছোট উপসেটটি টানতে না পারেন তবে এটি বর্তমানে সম্পাদিত হওয়ার কারণেই এটি হতে পারে।
ঐতিহাসিক তথ্য. এটি খুব কমই ব্যবহারিক পার্থক্য তৈরি করে তবে ব্যবহারকারীরা ক্রমাগত বুঝতে পারছেন যে ডেটা পরিবর্তন করা নিখুঁত হতে পারে না, তারা স্থির ডেটা সম্পর্কে একই অনুভব করে না। নোংরা রিডগুলি এখানে আঘাত করবে না তবে ডাবল রিডগুলি মাঝে মধ্যে হতে পারে। স্থিতিশীল ডেটাতে যাইহোক আপনার ব্লক থাকা উচিত নয় তা দেখে কেন এটি ঝুঁকিপূর্ণ?
প্রায়শই যে কোনও অ্যাপ্লিকেশনকে ফিড দেয় যা লেখার ক্ষমতাও রাখে।
এমনকি যখন ওকে পরিস্থিতি ঠিক হয় না।
NOLOCK
সেই টেবিলগুলিতে কোনও কিছুর জন্য সত্যিই ব্যবহার করতে পারবেন না ।read uncommitted
ওয়েব অ্যাপ্লিকেশনগুলির জন্য আমাকে ব্যবহার করা উচিত যখন ব্যবহারকারীরা এমন কিছু ইউআই গ্রিড দেখেন যেখানে ডেটা সঠিকতা এত গুরুত্বপূর্ণ নয়। ব্যবহারকারী কেবল কী রেকর্ড থাকতে পারে এবং এবং কিছু পেজিং, বাছাই এবং ফিল্টারিংয়ের সাথে একটি দ্রুত ওভারভিউ চায়। কেবলমাত্র ব্যবহারকারী যখন সম্পাদনা বোতামটি ক্লিক করেন, তারপরে আমি আরও কঠোর বিচ্ছিন্নতা স্তরের সাথে সর্বাধিক বর্তমানের রেকর্ডটি পড়ার চেষ্টা করি। পারফরম্যান্সের ক্ষেত্রে এই জাতীয় দৃষ্টিভঙ্গি আরও ভাল হওয়া উচিত নয়?
select item from things with (UPDLOCK)
। সেখানে একটি দ্রুত টাইমআউট রাখুন যাতে এটি যদি লকটি দ্রুত অর্জন করতে না পারে তবে এটি ব্যবহারকারীকে বলে যে এটি সম্পাদনা করা হচ্ছে। এটি আপনাকে কেবল ব্যবহারকারীদের থেকে নয় তবে বিকাশকারীদের থেকে সুরক্ষিত রাখবে। এখানে শুধুমাত্র সমস্যা হ'ল আপনাকে সময়সীমা সম্পর্কে এবং ইউআইতে কীভাবে আপনি এটি পরিচালনা করেন সে সম্পর্কে চিন্তাভাবনা শুরু করতে হবে।
রিপোর্টিং সম্পর্কিত, আমরা কোয়েরিটিকে ডেটাবেসগুলি বগিং থেকে রোধ করতে আমাদের সমস্ত প্রতিবেদনের প্রশ্নের উপরে ব্যবহার করি। আমরা এটি করতে পারি কারণ আমরা historicalতিহাসিক ডেটা টানছি, মাইক্রোসেকেন্ডের ডেটা আপ-টু না।
READ_UNCOMMITTED এমন পরিস্থিতিতে ব্যবহার করুন যেখানে উত্স পরিবর্তনের সম্ভাবনা খুব বেশি।
READ_UNCOMMITTED ব্যবহার করবেন না যখন আপনি জানেন যে আনার ক্রিয়াকলাপের সময় স্যুস পরিবর্তন হতে পারে।
READ UNCOMMITTED
।
READ UNCOMMITTED
আপনার ডেটা সক্রিয়ভাবে ব্যবহার করা হচ্ছে এমন পরিস্থিতিতে আপনি বেশিরভাগ ক্ষেত্রেই উপকৃত হতে পারেন এবং সম্ভাব্য অচলাবস্থা এবং লেনদেনের রোলব্যাকগুলি এড়াতে আপনি সার্ভারের বোঝা হ্রাস করতে চান কারণ কিছু ব্যবহারকারী যেখানে অযত্নে অপব্যবহার করছেন " একটি ডেটাগ্রিড সহ একটি ওয়েব পৃষ্ঠায় বোতামটি রিফ্রেশ করুন। ব্যবহারকারীরা একই সাথে প্রচুর রেকর্ডগুলি দেখেন, সাধারণত ডেটাটি কিছুটা পুরানো বা আংশিকভাবে আপডেট হয় তবে খুব বেশি যত্নশীল হন না। কেবলমাত্র যখন কোনও ব্যবহারকারী কোনও রেকর্ড সম্পাদনা করতে চলেছে, আপনি তখন তাকে সবচেয়ে সঠিক ডেটা দিতে চাইতে পারেন।
এটি আপনাকে নোংরা পাঠ্য দেবে এবং আপনাকে লেনদেনগুলি প্রদর্শন করবে যা এখনও প্রতিশ্রুতিবদ্ধ নয়। এটি সবচেয়ে সুস্পষ্ট উত্তর। আমি মনে করি না এটি কেবল আপনার পাঠকে গতি বাড়ানোর জন্য এটি ব্যবহার করা ভাল ধারণা। এটি করার অন্যান্য উপায় আছে যদি আপনি একটি ভাল ডাটাবেস ডিজাইন ব্যবহার করেন।
কী ঘটছে তা নোট করাও আকর্ষণীয়। অননুমুক্ত পড়া কেবল অন্য টেবিলের লকগুলিকেই উপেক্ষা করে না। এটি নিজস্ব কোনও লক তৈরি করে না।
আপনি একটি বড় রিপোর্ট তৈরি করছেন তা বিবেচনা করুন বা আপনি একটি বৃহত এবং সম্ভবত জটিল নির্বাচনী বিবৃতি ব্যবহার করে আপনার ডাটাবেস থেকে ডেটা স্থানান্তর করছেন rating এটি আপনার লেনদেনের সময়কালের জন্য ভাগ করা টেবিল লককে বাড়ানো হতে পারে এমন একটি ভাগ করা লক তৈরি করবে। অন্যান্য লেনদেনগুলি টেবিল থেকে পড়তে পারে তবে আপডেটগুলি অসম্ভব। এটি কোনও প্রোডাকশন ডাটাবেস যেহেতু উত্পাদন পুরোপুরি বন্ধ হয়ে যেতে পারে তবে এটি একটি খারাপ ধারণা হতে পারে।
আপনি যদি অনিদ্রিত পড়ুন ব্যবহার করছেন তবে আপনি টেবিলে ভাগ করা লক সেট করবেন না। কিছু নতুন লেনদেন থেকে আপনি ফলাফল পেতে পারেন বা আপনি টেবিলটি কোথায় সারণিটি সন্নিবেশ করানো হয়েছে এবং আপনার নির্বাচনী লেনদেন কতক্ষণ পড়েছে তা নির্ভর করে না। আপনি একই তথ্য দু'বারও পেতে পারেন উদাহরণস্বরূপ যদি কোনও পৃষ্ঠা বিভাজন ঘটে (ডেটা ফাইলের অন্য কোনও জায়গায় অনুলিপি করা হবে)।
সুতরাং, আপনার নির্বাচন করার সময় যদি ডেটাটি সন্নিবেশ করা যায় এটি যদি আপনার পক্ষে খুব গুরুত্বপূর্ণ হয় তবে পড়াশুনা ছাড়াই অর্থপূর্ণ হতে পারে। আপনাকে বিবেচনা করতে হবে যে আপনার প্রতিবেদনে কিছু ত্রুটি থাকতে পারে, তবে এটি লক্ষ লক্ষ সারির উপর ভিত্তি করে এবং ফলাফলটি নির্বাচনের সময় কয়েকটি মাত্র আপডেট করা থাকলে এটি "যথেষ্ট ভাল" হতে পারে। আপনার লেনদেনও সমস্ত একসাথে ব্যর্থ হতে পারে যেহেতু একটি সারির স্বতন্ত্রতা গ্যারান্টিযুক্ত নাও হতে পারে।
সম্পূর্ণরূপে আরও ভাল উপায় হতে পারে এসএনএপশট বিচ্ছিন্নতা স্তরটি ব্যবহার করা তবে আপনার অ্যাপ্লিকেশনগুলিতে এটি ব্যবহারের জন্য কিছু সামঞ্জস্যের প্রয়োজন হতে পারে। এর একটি উদাহরণ হ'ল যদি অন্যদের এটি পড়তে বাধা দেয় এবং UI- এ সম্পাদনা মোডে যেতে আপনার অ্যাপ্লিকেশনটি একটি সারিতে একচেটিয়া লক নেয়। স্নাপশট বিচ্ছিন্নকরণ স্তরটিও যথেষ্ট পারফরম্যান্স জরিমানা (বিশেষত ডিস্কে) নিয়ে আসে। তবে আপনি সমস্যার উপর হার্ডওয়্যার ফেলে দিয়ে তা কাটিয়ে উঠতে পারেন। :)
আপনি ডেটা গুদামে ডেটা রিপোর্টিং বা লোড করার জন্য ব্যবহার করতে ডাটাবেসের একটি ব্যাকআপ পুনরুদ্ধার করতেও বিবেচনা করতে পারেন।
আমি এখনই সবসময় পড়াশুনা করুন use এটি সর্বনিম্ন সমস্যাগুলির সাথে দ্রুত। অন্যান্য বিচ্ছিন্নতা ব্যবহার করার সময় আপনি প্রায় সবসময় কিছু ব্লকিং সমস্যা জুড়ে আসবেন।
যতক্ষণ আপনি অটো বর্ধন ক্ষেত্রগুলি ব্যবহার করেন এবং সন্নিবেশগুলিতে আরও একটু মনোযোগ দিন ততক্ষণ আপনার জরিমানা, এবং আপনি ব্লকিংয়ের সমস্যাগুলিকে বিদায় জানাতে পারেন।
আপনি অননুমোদিত পড়া দিয়ে ত্রুটিগুলি করতে পারেন তবে সত্য কথা বলতে, আপনার সন্নিবেশগুলি পুরো প্রমাণ কিনা তা নিশ্চিত করা খুব সহজ। নির্বাচন থেকে ফলাফলগুলি ব্যবহার করে এমন সন্নিবেশ / আপডেটগুলি কেবলমাত্র আপনার নজর রাখা দরকার। (এখানে রিড কমিট ব্যবহার করুন বা নিশ্চিত করুন যে নোংরা পাঠ্য কোনও সমস্যার কারণ হতে পারে না)
সুতরাং ডার্টি রিডগুলি যান (বিশেষত বড় প্রতিবেদনের জন্য), আপনার সফ্টওয়্যারটি মসৃণ চলবে ...
Committed
সন্নিবেশ এবং আপডেটের জন্য স্যুইচ করবে । অন্যান্য সমস্যা হিসাবে তিনি একটি অটো-ইনক্রিমেন্টিং কী ব্যবহার করার বিষয়ে উল্লেখ করে পৃষ্ঠা বিভাজন সম্পর্কিত সচেতনতাও প্রদর্শন করেছিলেন। আমি তার সাথে একমত হই যে, কেবলমাত্র একটি মানব দ্বারা পড়ার জন্য তৈরি প্রায় সমস্ত লাইভ রিপোর্টিং চূড়ান্ত দশমিক স্থানে সামান্য তাত্পর্য সহ্য করতে পারে। আমি সম্মত হয়েছি এটি বিশদ তালিকা বা ডেটা মেশিন পড়ার এবং রূপান্তরিত হওয়ার জন্য ডেটাযুক্ত ডেটা এবং ক্লাইভের মতো আলাদা গল্প