ซ่อนเลือกเอาต์พุตจาก T-SQL


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]

ในขณะนี้ฉันได้รับผลลัพธ์ของแบบสอบถามและที่ด้านล่างระยะเวลาของฉันซึ่งเป็นสิ่งเดียวที่ฉันต้องการเท่าที่ผลผลิตจะไป ฉันไม่สามารถทำสิ่งนี้และสงสัยว่ามีคนอื่นเจอปัญหาที่คล้ายกันหรือไม่ นี่คือสิ่งที่ฉันต้องการทำใน T-SQL ไม่ใช่ Management Studio หรืออะไรทำนองนั้น

ฉันพยายามตรวจสอบเวลาที่ใช้ในการเรียกใช้คำสั่ง select และรายงานกลับไปที่เซิร์ฟเวอร์ ฉันมีเซิร์ฟเวอร์มอนิเตอร์ภายนอกซึ่งจะทำงานทุกนาทีและได้รับเวลาย้อนกลับ (ระยะเวลาที่ใช้) ซึ่งฉันจะใช้เมื่อเวลาผ่านไปแนวโน้ม / พื้นฐาน ในขณะที่การสืบค้นปัจจุบันแยกแยะผลลัพธ์ที่เลือกและระยะเวลาของฉันมันจะลื่นและเซิร์ฟเวอร์จอภาพของฉันก็สับสน ฉันต้องการคอลัมน์ระยะเวลา ฉันจะทำเช่นนี้เพื่อแทรกซึ่งจะตรงไปตรงมาเพราะมันไม่จำเป็นต้องเลือก

ฉันพยายามที่จะทำเช่นนี้ได้อย่างหมดจดใน T-SQL ฉันไม่ต้องการใช้ DMV เพราะฉันต้องการรับเวลา (snapshot) เมื่อฉันเรียกใช้แบบสอบถามและตรวจสอบว่าการเปลี่ยนแปลงนี้เมื่อเวลาผ่านไปหรือไม่เมื่อเซิร์ฟเวอร์ผ่านการโหลดในระดับต่างๆซึ่งจะทำให้ฉันมีความคิดที่ดี ว่าเวลาในการดำเนินการแบบสอบถามมีการเปลี่ยนแปลงหรือไม่

คำตอบ:


28

มีหลายวิธีในการทำเช่นนี้

ฉันมักจะไม่แนะนำให้แทรกลงใน#tempตารางเนื่องจากโหลด tempdb หรือ autogrowth ใด ๆ อาจส่งผลต่อผลลัพธ์และฉันไม่แนะนำให้ใช้@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]

แม้ว่าการทำเช่นนี้อาจป้องกันพารามิเตอร์บางอย่างที่ฝังการปรับให้เหมาะสม ดูพารามิเตอร์ดมกลิ่นฝังตัวและ RECOMPILE ตัวเลือกภายใต้ "ข้อ จำกัด การฝัง"

โปรดทราบว่าวิธีนี้อาจเรียกใช้คำเตือนแผนเกี่ยวกับการแปลงโดยนัย แต่ไม่ใช่ประเภทที่คุณต้องกังวล ดู Q & A นี้สำหรับพื้นหลัง: สิ่งที่เรียกคำเตือนนี้: ประเภท Conversion ในนิพจน์อาจมีผลต่อ“CardinalityEstimate” ในแบบสอบถามแผน Choice

ใน SSMS

คุณสามารถเปลี่ยนการตั้งค่าเพื่อละทิ้งผลการสืบค้น

ถั่ว

ความเครียดของแบบสอบถาม SQL

SQL Query Stressเป็นเครื่องมือโอเพนซอร์สที่ช่วยให้คุณสามารถเรียกใช้แบบสอบถามกับ SQL Server เพื่อจำลองการโหลด ไม่มีผลลัพธ์แบบสอบถามจะถูกส่งกลับไปยังแอ็พพลิเคชัน

คุณสามารถอ่านคำแนะนำบางอย่างกับมันนี่

ostress (ยูทิลิตี้ RML)

ostressเป็นเครื่องมือที่คล้ายกันซึ่งเผยแพร่โดย Microsoft ซึ่งจะไม่ส่งคืนผลลัพธ์ให้ลูกค้าเว้นแต่คุณเลือกที่จะทำ

ผมเคยเขียนเกี่ยวกับมันบางที่นี่

แผนสำรวจ

Plan Explorerของ SentryOne เป็นทางเลือกฟรีเพื่อดูแผนการดำเนินการของ SQL Server และการหยุดชะงักด้วย

คุณยังสามารถใช้เป็นไคลเอนต์เพื่อสอบถาม SQL Serve ในระดับหนึ่ง:

ถั่ว

นี่จะเป็นการยกเลิกผลลัพธ์ด้วย

ถั่ว

หวังว่านี่จะช่วยได้!


0

คุณสามารถดำเนินการค้นหาด้วยSET STATISTICS TIME ONและจับข้อความเอาต์พุตโดยใช้แอพตรวจสอบของคุณบนเซิร์ฟเวอร์มอนิเตอร์ภายนอกของคุณ

วิธีการดักจับข้อความเอาต์พุตด้วย. Net ถูกอธิบายในคำตอบของ Stack OverflowโดยAdaTheDev :

คุณสามารถทำได้โดยเพิ่มตัวจัดการเหตุการณ์ในเหตุการณ์InfoMessageในการเชื่อมต่อ

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

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

0

คุณไม่เพียงแค่ใช้ตัวเลือกเริ่มต้นเพื่อส่งกลับ @End ของคุณ?

SELECT @blob_eater = [id], @ blob_eater = [database_id], @ blob_eater = [proc_name], @ blob_eater = [exec_t] จาก [DB]. [dbo] [STAT]

SELECT @ End = GETDATE ()

กลายเป็น

SELECT @ End = GETDATE () จาก [DB]. [dbo]. [STAT]

เฉพาะค่าสุดท้ายเท่านั้นที่จะถูกเก็บไว้ในตัวแปร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.