এমন কোয়েরি রয়েছে যেখানে আমরা যখন "এক্সিকিউট" হিট করি তখন এটি কিছু সারি দেখায় এবং এটি বাড়তে থাকে তবে কোয়েরিটি এখনও শেষ হয়নি। তবুও কখনও কখনও, এটি ক্যোয়ারির শেষ পর্যন্ত অপেক্ষা করে।
কেন এমন হয়? এটি নিয়ন্ত্রণ করার কোনও উপায় আছে?
এমন কোয়েরি রয়েছে যেখানে আমরা যখন "এক্সিকিউট" হিট করি তখন এটি কিছু সারি দেখায় এবং এটি বাড়তে থাকে তবে কোয়েরিটি এখনও শেষ হয়নি। তবুও কখনও কখনও, এটি ক্যোয়ারির শেষ পর্যন্ত অপেক্ষা করে।
কেন এমন হয়? এটি নিয়ন্ত্রণ করার কোনও উপায় আছে?
উত্তর:
উত্তরটি যথারীতি (ঠিক আছে, বেশিরভাগ সময়) কার্যকর করার পরিকল্পনার মধ্যে রয়েছে।
কিছু নির্দিষ্ট অপারেটর রয়েছে যাদের those সারিগুলি প্রক্রিয়াজাতকরণ শুরু করতে এবং স্রোতটি প্রবাহিত করার আগে তাদের কাছে সমস্ত সারি পৌঁছানো দরকার, উদাহরণস্বরূপ:
এগুলিকে হয় ব্লকিং বলা হয়, বা এ কারণে অপারেটরগুলি থামুন এবং যান এবং অপটিমাইজার যখন মনে করে এটি আপনার ডেটা সন্ধানের জন্য সম্পূর্ণ প্রচুর ডেটা প্রসেস করতে হবে তখন তাদের চয়ন করা হয়।
এমন আরও কিছু অপারেটর রয়েছে যা স্ট্রিমিং শুরু করতে বা তত্ক্ষণাত কোনও সন্ধান করা সারি পাশ করতে সক্ষম
যখন অনুসন্ধানগুলি তাত্ক্ষণিকভাবে ডেটা ফিরিয়ে দেওয়া শুরু করে তবে তাত্ক্ষণিকভাবে শেষ না করে, এটি সাধারণত একটি চিহ্ন যে অপটিমাইজারটি অপারেটরগুলির সাহায্যে কিছুটা সারি দ্রুত সন্ধান করার এবং ফিরিয়ে আনার জন্য একটি পরিকল্পনা বেছে নিয়েছিল যার কম দাম ব্যয় হয়।
এটি আপনার দ্বারা বা অপ্টিমাইজার দ্বারা প্রবর্তিত সারি লক্ষ্যগুলির কারণে ঘটতে পারে।
কোনও কারণে যদি কোনও খারাপ পরিকল্পনা বেছে নেওয়া হয় (এসএআরজিবিলিটির অভাব, প্যারামিটার স্নিফিং, অপর্যাপ্ত পরিসংখ্যান ইত্যাদি) তবে এটি ঘটতেও পারে, তবে এটি বের করতে আরও খনন লাগে takes
আরও তথ্যের জন্য রব ফারলির ব্লগটি এখানে দেখুন
এবং পল হোয়াইট সিরিজ এখানে সারি গোল , এখানে , এখানে , এবং এখানে ।
এটিও লক্ষ করা উচিত যে, আপনি যদি এসএসএমএসের কথা বলছেন তবে কেবলমাত্র উইলি-নিলি নয়, পুরো বাফারটি পূরণ করার পরে কেবল সারিগুলি উপস্থিত হয়।
তাহলে আমি বুঝতে পারছি তুমি কি দেখে করছি, কিভাবে এই ম্যানেজমেন্ট স্টুডিও হয় রেন্ডার সারি, এবং সামান্য কিভাবে SQL সার্ভার কি আছে আয় সারি। প্রকৃতপক্ষে যখন আপনি এসএসএমএস-এ বড় ফলাফলগুলি ফিরিয়ে দিচ্ছেন এবং গ্রিডে তাদের রেন্ডার করার চেষ্টা করছেন তখন এসএসএমএস রাখতে পারে না এবং এসকিউএল সার্ভার অ্যাপ্লিকেশনটিকে আরও সারি প্রক্রিয়াকরণের জন্য অপেক্ষা করতে শেষ করে। এই ক্ষেত্রে আপনি এসকিউএল সার্ভার ASYNC_NETWORK_IO
অপেক্ষা করতে অপেক্ষা করছেন।
গ্রিডের ফলাফলের পরিবর্তে ফলাফলের পাঠ্যগুলিতে ফলাফল ব্যবহার করে আপনি কিছুটা নিয়ন্ত্রণ করতে পারেন, যেহেতু এসএসএমএস গ্রিডগুলি আঁকতে পারে তার চেয়ে বেশি দ্রুত টেক্সট আঁকতে পারে তবে আপনি সম্ভবত এটি কলামের সংখ্যা এবং সম্পর্কিত ডেটাগুলির উপর নির্ভর করে পাঠযোগ্যতার উপর প্রভাব ফেলতে পারবেন। উভয়ই প্রভাবিত হয় যখন এসএসএমএস প্রকৃতপক্ষে সেই ফলকে ফলাফল লেখার সিদ্ধান্ত নেয়, যা আউটপুট বাফার কতটা পূর্ণ তার উপর নির্ভর করে।
যখন আপনার একাধিক বিবৃতি রয়েছে, এবং আপনি বার্তার বার্তাগুলি ফলকে আউটপুট ফলাফলগুলি সরবরাহ করতে বাফারকে বাধ্য করতে চান, আপনি বিবৃতিগুলির মধ্যে সামান্য মুদ্রণের কৌশল ব্যবহার করতে পারেন:
RAISERROR('', 0, 1) WITH NOWAIT;
আপনি যখন সমস্ত আউটপুট একক বিবৃতি থেকে আসে তখন আপনি যখন এসএসএমএসকে আরও দ্রুত সারিগুলি সরবরাহ করার চেষ্টা করছেন তখন এটি সাহায্য করবে না।
আরও সরাসরি, আপনি এসএসএমএসে কতগুলি ফলাফল উপস্থাপন করছেন তা সীমাবদ্ধ করে আপনি এটি নিয়ন্ত্রণ করতে পারেন। আমি প্রায়শই লোকে গ্রিডে এক মিলিয়ন সারি ফেরাতে কত সময় নেয় সে সম্পর্কে অভিযোগ করতে দেখি। পৃথিবীতে কেউ এসএসএমএস গ্রিডে মিলিয়ন সারি নিয়ে কী করতে চলেছে, আমার কোনও ধারণা নেই।
এর মতো কিছু হ্যাক রয়েছে OPTION (FAST 100)
, যা প্রথম 100 টি সারি (বা কোনও বাহ্যিক না থাকলে 100 টি সারি ORDER BY
) পুনরুদ্ধার করতে অনুকূল করবে , তবে এটি সারিগুলির বাকী অংশগুলির জন্য আরও ধীর গতিতে পুনরুদ্ধার ব্যয় করতে পারে এবং আরও বেশি পরিকল্পনা রয়েছে সামগ্রিকভাবে অদক্ষ, তাই সত্যিই একটি যেতে যাওয়ার বিকল্প আইএমএইচও নয়।
আপনার প্রশ্নটি প্রতি এসকিউএল সার্ভার সম্পর্কে নয় তবে:
এটি নিয়ন্ত্রণ করার কোনও উপায় আছে?
সংক্ষিপ্ত উত্তর :
sqlcmd
পরিবর্তে ssms
বা sqlcmd
-Mode এর চেষ্টা করুনssms
দীর্ঘ উত্তর :
অবশ্যই! তবে এক নয় - প্রোব
sqlcmd
বা এর সাথে চালিত করুনsqlcmd
এসএমএসে -মোডে চালিত করুন।spid
এবং আপনি সেশন সেটিংসের পুরো তালিকা পাবেন। sqlcmd
সেশনের সেটিংসের সাথে তুলনা করুন । যদি কিছুই না ক্লিক করে - আপনার কোয়েরি স্ক্রিপ্টে প্রোফাইলার থেকে সমস্ত সেশন সেটিংস অনুলিপি করুন, ইন- sqlcmd
মোড কার্যকর করুন এবং ধীরে ধীরে সেটিংসে স্যুইচিং করে আপনি আপনার অপরাধীকে খুঁজে পাবেন।শুভকামনা!
Sp_BlitzErik এর উত্তরে যুক্ত করতে, NOT IN ()
সাব-সিলেক্ট সহ একটি ব্যবহার করে উদাহরণটি ধরুন । কোনও আইটেম নেস্টেড ক্যোয়ারির ফলাফলের মধ্যে রয়েছে কিনা তা নির্ধারণের জন্য, পুরো ফলাফলটি পুনরুদ্ধার করা (সাধারণত) প্রয়োজন।
সুতরাং এই জাতীয় প্রশ্নের পারফরম্যান্সের উন্নতির জন্য একটি উপায় সহজ উপায় হ'ল পাশের LEFT OUTER JOIN
শর্তটি RIGHT
শূন্য হওয়ার সাথে তাদের এমনভাবে পুনরায় রচনা করা (আপনি এটিকে ঘিরে ফেলতে পারেন, অবশ্যই তবে কে ব্যবহার করেন RIGHT OUTER JOINS
?)। এটি ফলাফলগুলি এখনই ফিরে আসতে শুরু করে।
WHERE t.x IN (<complex SELECT subquery>)
সমতুল্য বাম যোগে পরীক্ষা না করার আগে উত্পাদিত ক্যোয়ারীর পুরো সাবলেটকে মূল্যায়ন করতে হবে LEFT JOIN (<complex SELECT subquery>) AS r ON r.x = t.x .... WHERE r.x IS NULL
, তবে সাবকিউরি উইল ল্যাভকেও মূল্যায়ন করতে হবে (নোটের সাথে একই জটিল পরিকল্পনা) সংস্করণ)।
NOT EXISTS
কিন্তু NOT IN
প্রশ্নগুলিতে ওরাকল । তবে আজ অবশ্যই এটি অবশ্যই জেনারেটরের ত্রুটি হিসাবে বিবেচিত হবে