মন্তব্যটি থেকে এমএসডিএন ফোরামের লিঙ্কটি পড়ার পরে সম্পাদিত , খুব আকর্ষণীয়।
বিচ্ছিন্নতা স্তর নির্বিশেষে, দুটি ব্যবহারকারী একসাথে একটি পৃষ্ঠা আপডেট করতে পারবেন না , বা কোনও ব্যবহারকারী আংশিকভাবে আপডেট হওয়া পৃষ্ঠাটি পড়তে পারবেন না। ভেবে দেখুন কীভাবে এসকিউএল সার্ভার এমন কোনও পৃষ্ঠার সাথে মোকাবেলা করবে যেখানে শিরোনামটি বলেছে কল 3 বাইট 17 থেকে শুরু হয় But তবে এটি সত্যই 25 বাইটে শুরু হয়, কারণ সারিটির অংশটি এখনও আপডেট হয়নি। কোনও ডাটাবেস হ্যান্ডেল করার উপায় নেই।
তবে 8k এর চেয়ে বড় সারিগুলির জন্য, একাধিক পৃষ্ঠাগুলি ব্যবহৃত হয় এবং এটি একটি অর্ধ-আপডেট হওয়া কলামকে সম্ভব করে তোলে। এমএসডিএন লিঙ্ক থেকে অনুলিপি করা হয়েছে (লিঙ্কটি ভেঙে যাওয়ার ক্ষেত্রে), এই কোয়েরিটি একটি উইন্ডোতে শুরু করুন:
if object_id('TestTable') is not null
drop table TestTable
create table TestTable (txt nvarchar(max) not null)
go
insert into TestTable select replicate(convert(varchar(max),
char(65+abs(checksum(newid()))%26)),100000)
go 10
update TestTable set txt=replicate(convert(varchar(max),
char(65+abs(checksum(newid()))%26)),100000)
go 100000
এটি একটি সারণী তৈরি করে এবং তারপরে এটি একই চরিত্রের 100.000x এর স্ট্রিং সহ আপডেট করে। প্রথম ক্যোয়ারি চলাকালীন, অন্য একটি উইন্ডোতে এই ক্যোয়ারীটি শুরু করুন:
while 1=1 begin
if exists (select * from TestTable (nolock) where left(Txt,1) <> right(Txt,1))
break
end
অর্ধেক আপডেট হওয়া কলামটি পড়লে দ্বিতীয় ক্যোয়ারি বন্ধ হয়ে যায়। অর্থাৎ প্রথম চরিত্রটি যখন শেষের থেকে আলাদা হয়। অর্ধ-আপডেট হওয়া কলামগুলি পড়া সম্ভব কিনা তা প্রমাণ করে এটি দ্রুত শেষ হবে। আপনি যদি nolock
ইঙ্গিতটি সরিয়ে থাকেন তবে দ্বিতীয় কোয়েরিটি কখনই শেষ হবে না।
অবাক করার ফলাফল! অর্ধ-আপডেট হওয়া এক্সএমএল কলামটি একটি (nolock)
প্রতিবেদনটি ভেঙে দিতে পারে, কারণ এক্সএমএলটি ত্রুটিযুক্ত।