টি-এসকিউএল থেকে নির্বাচন আউটপুট লুকান


13

আমি কোয়েরি এক্সিকিউশন সময় পাওয়ার চেষ্টা করছি, তবে আমি কোয়েরি আউটপুটটিও আড়াল করতে চাই। আমি কেবল অতিবাহিত সময় চাই - আউটপুট না।

উদাহরণ

DECLARE @Start datetime
DECLARE @End datetime

SELECT @StartTimeWA=GETDATE() 

SELECT 
       [id] 
      ,[database_id]
      ,[proc_name]
      ,[exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]

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

আমি নির্বাচিত বিবৃতি চালাতে যে সময় লাগে তা নিরীক্ষণের চেষ্টা করছি এবং কোনও সার্ভারে ফিরে রিপোর্ট করতে চাই। আমার কাছে একটি বাহ্যিক মনিটর সার্ভার রয়েছে যা প্রতি মিনিটে চলে এবং সময়টি ফিরে আসবে (সময়কাল) যা আমি সময়ের সাথে সাথে ট্রেন্ড / বেসলাইনটি ব্যবহার করব। বর্তমান কোয়েরিটি নির্বাচিত ফলাফলগুলি এবং আমার সময়কালকে ছিটকে দেয় এবং এটি এড়িয়ে যায় এবং আমার মনিটরের সার্ভারটি বিভ্রান্ত হয়। আমি কেবল সময়কাল কলামটি চেয়েছিলাম। আমি এটি সন্নিবেশকারীদের জন্যও করব, যা সরলতর হবে কারণ এটিতে কোনও নির্বাচনের সঞ্চালনের প্রয়োজন হবে না।

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

উত্তর:


28

এটি করার বিভিন্ন উপায় রয়েছে।

আমি সাধারণত কোনও #tempটেবিলের মধ্যে সন্নিবেশ করার পরামর্শ দিই না , যেহেতু কোনও টেম্পডিবি লোড বা অটোগ্রোথ ফলাফলগুলিতে প্রভাব ফেলতে পারে এবং আমি অবশ্যই একটি @tableপরিবর্তনশীল ব্যবহার করার পরামর্শ দিই না , যেহেতু তাদের পরিবর্তনগুলি বাধ্যতামূলক সিরিয়াল করা হয় (কোনও সমান্তরাল পরিকল্পনা ব্যবহার করা যায় না), যা প্রকৃত প্রশ্নের সময় পরিবর্তন করতে পারে।

চলক বরাদ্দ

আপনি একটি ভেরিয়েবল ঘোষণা করতে পারেন এবং আপনার কলামগুলিকে এতে নির্ধারণ করতে পারেন:

DECLARE @Start datetime
DECLARE @End datetime
DECLARE @blob_eater SQL_VARIANT;

SELECT @StartTimeWA=GETDATE() 

SELECT 
       @blob_eater = [id] 
      ,@blob_eater = [database_id]
      ,@blob_eater = [proc_name]
      ,@blob_eater = [exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]

যদিও এটি করার ফলে কিছু প্যারামিটার এম্বেডিং অপ্টিমাইজেশন আটকাতে পারে। দেখুন প্যারামিটার পাছা, এমবেডিং, এবং কম্পাইল বিকল্প অধীনে "একটি এমবেডিং সীমাবদ্ধতা"।

নোট করুন যে এই পদ্ধতিটি অন্তর্নিহিত রূপান্তরগুলি সম্পর্কে পরিকল্পনার সতর্কবার্তাগুলিকে ট্রিগার করতে পারে, তবে সেগুলি আপনাকে উদ্বিগ্ন হওয়ার মতো নয়। ব্যাকগ্রাউন্ডের জন্য এই প্রশ্নোত্তরটি দেখুন: এই সতর্কতাটি কী ট্রিগার করে: এক্সপ্রেশনটিতে টাইপ রূপান্তরকরণ প্রশ্ন পরিকল্পনার পছন্দটিতে "কার্ডিনালিটিসটিমেট" প্রভাবিত করতে পারে

এসএসএমএসে

আপনি ক্যোয়ারী ফলাফল বাতিল করতে সেটিংস পরিবর্তন করতে পারেন।

পাগল

এসকিউএল ক্যোয়ারী স্ট্রেস

এসকিউএল ক্যোয়ারী স্ট্রেস একটি ওপেন সোর্স সরঞ্জাম যা আপনাকে একটি এসকিউএল সার্ভারের বিরুদ্ধে লোড অনুকরণের জন্য অনুসন্ধান চালাতে সহায়তা করে। কোনও ক্যোয়ারির ফলাফলগুলি চালিত হলে অ্যাপ্লিকেশনটিতে ফিরে আসে না।

আপনি এখানে কিছু নির্দেশাবলী পড়তে পারেন ।

ostress (আরএমএল ইউটিলিটিস)

অস্ট্রেস হ'ল একটি অনুরূপ সরঞ্জাম, মাইক্রোসফ্ট দ্বারা প্রকাশিত, যা ক্লায়েন্টের কাছে ফলাফলগুলি ফিরিয়ে দেয় না, যদি না আপনি এটি করা বেছে নেন।

আমি এখানে এটি সম্পর্কে কিছু লিখেছি ।

প্ল্যান এক্সপ্লোরার

সেন্ট্রিওনের প্ল্যান এক্সপ্লোরারটি এসকিউএল সার্ভারের বাস্তবায়ন পরিকল্পনা এবং সাথে ডেডলকগুলি দেখার জন্য একটি মুক্ত বিকল্প।

আপনি এসকিউএলকে কিছুটা ডিভাইসে পরিবেশন করতে ক্লায়েন্ট হিসাবে এটি ব্যবহার করতে পারেন:

পাগল

এটি ফলাফলগুলিও বাতিল করে দেবে।

পাগল

আশাকরি এটা সাহায্য করবে!


0

আপনি SET STATISTICS TIME ONআপনার বাহ্যিক মনিটর সার্ভারে আপনার তদারকি অ্যাপ্লিকেশনটি ব্যবহার করে আউটপুট বার্তাটি দিয়ে আপনার ক্যোয়ারীটি কার্যকর করতে এবং ক্যাপচার করতে পারেন।

একটি উপায় নেট সঙ্গে আউটপুট বার্তা দখল করা ব্যাখ্যা করা হয় এই স্ট্যাক ওভারফ্লো উত্তর দ্বারা AdaTheDev :

আপনি সংযোগের ইনফরমেসেজ ইভেন্টে ইভেন্ট হ্যান্ডলার যুক্ত করে এটি করতে পারেন ।

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    myStringBuilderDefinedAsClassVariable.AppendLine(e.Message);
}

0

আপনি কি আপনার @ শেষটি ফেরত দিতে প্রাথমিক নির্বাচনটি ব্যবহার করতে পারবেন না?

@ ব্লোব_ইটার = [আইডি], @ ব্লব_ইটার = [ডাটাবেস_আইডি], @ ব্লব_ইটার = [প্র্যাক_নাম], @ ব্লব_ইটার = [এক্সিকিউটিটি] [ডিবি] থেকে। [ডিবিও]। [স্ট্যাট]

@ শেষ = GETDATE () নির্বাচন করুন

হয়ে

নির্বাচন করুন @ শেষ = GETDATE () থেকে [DB]। [ডিবিও]। [স্ট্যাট]

কেবলমাত্র সর্বশেষ মানটি ভেরিয়েবলে সংরক্ষণ করা হবে।

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