T-SQL'den Seçilmiş Çıktıyı Gizle


13

Sorgu yürütme zamanı almaya çalışıyorum, ama aynı zamanda sorgu çıktısını gizlemek istiyorum. Sadece geçen süreyi istiyorum - çıktı yok.

Misal

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]

Şu anda, sorgu çıktı almak ve altta benim süre, çıktı kadar istediğim tek şey budur. Bunu yapamadım ve başkalarının benzer sorunlarla karşılaşıp karşılaşmadığını merak etmedim mi? Bu, T-SQL Management Studio'da değil, bunun gibi bir şeyde yapmak istediğim bir şey.

Seçme deyimi çalıştırmak ve bir sunucuya rapor için gereken süreyi izlemeye çalışıyorum. Her dakika çalışacak ve trend / temel için zamanla kullanacağım zamanı (süreyi) alacak olan harici bir monitör sunucum var. Geçerli sorgu seçme sonuçları tükürdükçe ve sürem eğrilir ve monitör sunucum karışır. Sadece süre sütununu istedim. Bunu, bir seçim yapmak zorunda kalmayacağı için basit olacak olan ekler için de yapacağım.

Bunu tamamen T-SQL'de yapmaya çalışıyorum . Bir sorgu çalıştırdığımda (anlık görüntü) zaman almak istiyorum ve bu bana iyi bir fikir verecek gibi sunucu çeşitli yük seviyeleri geçerken zaman içinde değişip değişmediğini kontrol etmek istiyorum DMV'leri kullanmak istemiyorum sorgu yürütme süresinin değişip değişmediğine

Yanıtlar:


28

Bunu yapmanın birçok farklı yolu var.

Genellikle #tempherhangi bir tempdb yükü veya otomatik büyüme sonuçları etkileyebileceğinden bir tabloya yerleştirilmesini önermiyorum ve kesinlikle bir @tabledeğişken kullanmanızı önermiyorum , çünkü bu modifikasyonlarda zorlama seri (paralel plan kullanılamaz). gerçek sorgu sürelerini değiştirebilir.

Değişken Atama

Bir değişkeni bildirebilir ve sütunlarınızı buna atayabilirsiniz:

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]

Buna rağmen bazı parametre yerleştirme optimizasyonlarını engelleyebilir. Bkz . "Gömme Kısıtlaması" altındaki Parametre Koklama, Gömme ve TAVSİYE Seçenekleri .

Bu yöntemin, örtük dönüşümlerle ilgili plan uyarılarını tetikleyebileceğini unutmayın, ancak bunlar endişelenmeniz gereken tür değildir. Arka plan için şu Soru ve Cevaplara bakın: Bu Tetikleyiciyi Neler tetikler: İfadedeki Tür Dönüşümü, Sorgu Planı Seçiminde “CardinalityEstimate” 'ı Etkileyebilir .

SSMS'de

Sorgu sonuçlarını atmak için ayarları değiştirebilirsiniz.

FINDIK

SQL Sorgu Stresi

SQL Query Stress , yükü simüle etmek için SQL Server'a karşı sorgular çalıştırmanıza izin veren açık kaynaklı bir araçtır. Çalıştırıldığında uygulamaya hiçbir sorgu sonucu döndürülmez.

Burada bazı talimatları okuyabilirsiniz .

ostress (RML Araçları)

ostress , Microsoft tarafından yayınlanan ve bunu seçmediğiniz sürece sonuçları istemciye döndürmeyen benzer bir araçtır.

Burada bunun hakkında bir şeyler yazdım .

Plan Gezgini

SentryOne Plan Explorer , SQL Server yürütme planlarını ve kilitlenmelerini görüntülemek için ücretsiz bir alternatiftir.

SQL Serve'yi bir dereceye kadar sorgulamak için bir istemci olarak da kullanabilirsiniz:

FINDIK

Bu aynı zamanda sonuçları da silecektir.

FINDIK

Bu yardımcı olur umarım!


0

SET STATISTICS TIME ONHarici monitör sunucunuzdaki izleme uygulamanızı kullanarak sorgunuzu yürütebilir ve çıktı iletisini yakalayabilirsiniz.

.NET ile çıkış mesajı yakalamak için bir yolu açıklanmıştır bu yığın taşması cevap tarafından AdaTheDev :

Bunu , bağlantıdaki InfoMessage olayına bir olay işleyici ekleyerek yapabilirsiniz .

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

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

0

@End'inizi döndürmek için sadece ilk seçimi kullanamaz mısınız?

SELECT @blob_eater = [id], @ blob_eater = [veritabanı_kimliği], @ blob_eater = [proc_name], @ blob_eater = [exec_t] [DB] 'den. [Dbo]. [STAT]

SELECT @ End = GETDATE ()

Oluyor

SELECT @ End = [DB]. [Dbo] 'dan GETDATE (). [STAT]

Değişkende yalnızca son değer depolanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.