Günlük sorguları ve diğer T-SQL


14

SQL Server 2008 R2 SELECTdeyimleri (veya bu konuda başka bir T-SQL) için varsayılan bir günlük düzeni olup olmadığını bilmek istiyorum .

Evet ise, nerede görebilirim? Değilse, nasıl ayarlayabilirim?

Yanıtlar:


18

Varsayılan olarak, SQL Server etkinliği beklediğiniz gibi günlüğe kaydedilmez. Bazı yazma aktiviteleri İşlem Günlüğüne kaydedilir , ancak bu aynı zamanda veritabanlarınızın nasıl ayarlandığına da bağlıdır.

Bir sunucudaki SELECT etkinliğini izlemek için dört ana seçenek vardır:

  1. Sunucunuza bağlanmak ve belirli etkinlikleri gerçekleşmesi için SQL Server Profiler'ı kullanabilirsiniz .

  2. Etkinliği sunucudaki bir izleme dosyasına günlüğe kaydetmek için sunucu tarafı izlemesi oluşturabilirsiniz ; bu dosya daha sonra SQL Server Profiler tarafından okunabilir veya daha fazla analiz için bir tabloya yüklemek üzere fn_trace_gettable komutunu kullanabilirsiniz.

  3. SQL Server 2012 ile başlayan sunucu tarafı izleri yerine Microsoft'un önerdiği Genişletilmiş Olaylar'ı kullanabilirsiniz .

  4. C2 denetim modunu kullanabilirsiniz .

İzlemenizi ayarlamak için SQL Server Profiler'ı kullanabilirsiniz (istediğiniz belirli olayları, filtreleri vb. Seçin), ardından Dosya menüsünü kullanarak komut dosyasını yazın ve açıklandığı gibi bir sunucu tarafı izi oluşturmak için sunucuda yürütün burada .


5

SELECT deyimlerini izlemek için birkaç SQL Server çözümü ve tekniği vardır

  1. Özel olarak geliştirilmiş saklı yordamlar ve işlevler - Not: Bu yöntem, T-SQL programlama hakkında ileri düzeyde bilgi sahibi olmayı ve saklı yordamların ve işlevlerin ek bakımını gerektirir (örn. Veritabanı şeması değişikliği durumunda). Bu makalede daha fazlasını görebilirsiniz: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. SQL Server izleme teknolojisi - bu makalede adım adım talimatları okuyabilirsiniz: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. SQL Server Denetim özelliğini kullanma - Denetim özelliği (SQL Server 2008'de tanıtıldı) hem sunucu hem de veritabanı olaylarını izleyebilir ve Genişletilmiş Olaylar teknolojisini kullanır. Ancak, veritabanı düzeyinde denetim yalnızca SQL Server Developer ve Enterprise sürümleri tarafından desteklenir.

  4. ApexSQL Denetimi veya Idera SQL Uyumluluk Yöneticisi gibi 3. taraf araçlarını kullanma


3

Varsayılan olarak, SELECT deyimlerini günlüğe kaydetmez. SELECT ifadelerini denetlemek için daha fazla ayrıntı için cevabımı burada bulabilirsiniz .

Ayrıca, varsayılan olarak bile bunun yerine Başarısız Sunucu Bellek Değişikliği, Denetim Giriş gibi EVENTS kaydeder T-SQL ifadeleri kütüğe Denetim Addlogin Olay, vs ve daha fazla bilgi bulabilirsiniz burada özü bilgilere T-SQL Kodları tarafından birlikte Varsayılan izleme.


3

Sorguları kimin çalıştırdığını umursamadığınız sürece, sisteminizde çalıştırılan sorgular ile ilgili metrikleri görmenin bazı yolları vardır. Bu, son yeniden başlatmadan sonraki verilerle ve potansiyel olarak sorguyu ne kadar derinleştirdiğinize bağlı olarak plan önbellek (veya başka bir bellek) basıncıyla sınırlıdır.

;WITH x AS
(
  SELECT 
    [text] = SUBSTRING(t.[text], 
      (s.statement_start_offset/2)+1, 
      COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
       -(s.statement_start_offset/2)), 
    s.execution_count, s.last_execution_time,
    s.max_logical_reads, s.max_elapsed_time
  FROM sys.dm_exec_query_stats AS s
  CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';

Deseni genişletmek isteyebilirsiniz - örneğin, bu ;WITH, ironik bir şekilde başlayan ve SELECT INTOgerçek tablolara başvurmayan değişken atamaları yakalayabilen ve hatta değişken atamaları göz ardı eder .

Ancak bundan daha ayrıntılı bilgiye ihtiyacınız varsa, Nathan'ın cevabı iyi bir başlangıçtır (iz kullanacaksanız Profiler'i KULLANMAYIN hariç). Sadece sisteminizdeki her sorguyu günlüğe kaydetmenin ücretsiz olmayacağını unutmayın.


Yukarıdaki beyanı kabul ediyorum Veritabanınızdaki tüm seçili ifadeleri izleme konusunda inanılmaz derecede dikkatli olurum.
Zane

Çözümünüzü denedim - bu sadece Prosedürler, Fonksiyonlar ve Tetikleyiciler sunabilir mi ve adhoc çalıştırılan sql deyimlerinin hiçbiri?
Magier

@Magier Hayır, sys.dm_exec_query_stats yalnızca sorgu ifadeleri (geçici veya bir modülden) hakkında rapor vermelidir.
Aaron Bertrand
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.