বিবৃতি কার্যকর করার গতিটি নেটওয়ার্ক সংযোগের উপর নির্ভর করে কেন?


31

দেখে মনে হচ্ছে টি-এসকিউএল কার্যকর করার গতিটি সার্ভারের বিরুদ্ধে নেটওয়ার্ক সংযোগের বিলম্বের উপর নির্ভরশীল। আমি ধরে নিয়েছিলাম যে এসকিউএল সার্ভারের যদি ক্লায়েন্টকে পুনরায় রিপোর্ট করার মতো কিছু না থাকে তবে এটি শেষ না হওয়া পর্যন্ত এটি কার্যকর করা হবে তবে টেস্টিং অন্য গল্প দেখায়।

create procedure UselessLoop
  @I int
as
declare @D datetime = getdate()
while @I > 0 set @I -= 1
print datediff(millisecond, @D, getdate())

exec UselessLoop 100000

Server    Milliseconds
local     53
nearby    63
faraway   660

exec UselessLoop 1000000

Server    Milliseconds
local     546
nearby    640
faraway   6183

এসএসএমএস ব্যবহার করে বিভিন্ন কম্পিউটার থেকে একই সার্ভারের বিরুদ্ধে পরীক্ষা চালানো হয়। স্থানীয় সার্ভার থেকে কার্যকর করা হয়, কাছাকাছি একই স্থানীয় নেটওয়ার্কে রয়েছে এবং 1 গিগাবিট ফাইবারের সাথে সংযুক্ত 500 কিলোমিটার দূরের অন্য অফিস থেকে দূরে কার্যকর করা হয়।

স্পষ্টতই এসকিউএল সার্ভার এবং ক্লায়েন্টের মধ্যে কিছু যোগাযোগ চলছে যা সম্পাদন করা বিবৃতিগুলির সংখ্যার উপর সরাসরি নির্ভর করে।

আমি ওয়্যারশার্ককে কী পরিবহণ করা হয়েছে তা দেখার জন্য ব্যবহার করেছি এবং আমি এটি বলতে পারি না যে আমি এটি অনেক কিছুই বুঝতে পেরেছি তবে এটি ছিল একটি টিসিপি.স্ট্রিম 22740 প্যাকেটে মোট 26 এমবি এক্সচেঞ্জ করে।

পরিবর্তে একটি অকেজো কর্ম সম্পর্কে?

create function dbo.UDFUselessLoop(@I int)
returns int
as
begin
  declare @D datetime = getdate()
  while @I > 0 set @I -= 1
  return datediff(millisecond, @D, getdate())
end

print dbo.UDFUselessLoop(1000000)

এটি কোথা থেকে নির্বাহ করা হয় নির্বিশেষে 406 মিলিসেকেন্ডে এটি কার্যকর করে। দেখে মনে হচ্ছে লুপটিতে ক্লায়েন্টের সাথে কোনও যোগাযোগ নেই।


3
আমার প্রশ্নে এই উত্তরটি খুব দয়া করে দেখুন stackoverflow.com/a/1547539
gbn

উত্তর:


33

স্পষ্টতই এসকিউএল সার্ভার এবং ক্লায়েন্টের মধ্যে কিছু যোগাযোগ চলছে যা সম্পাদন করা বিবৃতিগুলির সংখ্যার উপর সরাসরি নির্ভর করে।

হ্যা এখানে. ডিফল্টরূপে, এসকিউএল সার্ভার স্টোরেজDONE_IN_PROC পদ্ধতিতে প্রতিটি বিবৃতি দেওয়ার পরে একটি টিডিএস বার্তা প্রেরণ করে । বার্তাটি ক্লায়েন্টের কাছে সম্পূর্ণ বিবৃতিটির জন্য স্থিতি এবং সারি গণনা সম্পর্কিত তথ্য জানায়।

আপনি এই বার্তাগুলি টি-এসকিউএল কমান্ডটি ব্যবহার করে দমন করতে পারেন:

SET NOCOUNT ON;

এই আদেশের জন্য বুকস অনলাইন এন্ট্রি থেকে নিম্নলিখিতটি (আমার জোর) রয়েছে :

সঞ্চিত প্রক্রিয়াগুলিতে যেগুলিতে অনেকগুলি স্টেটমেন্ট থাকে যা অনেক বেশি প্রকৃত ডেটা ফেরত দেয় না বা লেনদেন-এসকিউএল লুপ ধারণ করে এমন পদ্ধতির জন্য, সেট অন নট সেট না করে সেট করা একটি কার্যকর পারফরম্যান্স উত্সাহ দিতে পারে, কারণ নেটওয়ার্ক ট্রাফিক প্রচুর পরিমাণে হ্রাস পেয়েছে।

সম্পর্কিত প্রশ্নোত্তর: কেন ASYNC_NETWORK_IO এর জন্য একটি সাধারণ লুপ ফলাফল?

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