Query di registrazione e altri T-SQL


14

Vorrei sapere se SQL Server 2008 R2 ha uno schema di registrazione predefinito per le SELECTdichiarazioni (o qualsiasi altro T-SQL per quella materia).

Se sì, dove posso vederlo? In caso contrario, come potrei installarlo?

Risposte:


18

Per impostazione predefinita, l'attività di SQL Server non viene registrata come previsto. Alcune attività di scrittura sono registrate nel registro delle transazioni , ma ciò dipende anche dalla configurazione dei database.

Esistono quattro opzioni principali per tenere traccia dell'attività SELECT su un server:

  1. È possibile utilizzare SQL Server Profiler per connettersi al server e controllare l'attività specifica in tempo reale.

  2. È possibile creare una traccia sul lato server per registrare l'attività su un file di traccia sul server, che può quindi essere letto da SQL Server Profiler o utilizzando fn_trace_g impostabile per caricarlo in una tabella per ulteriori analisi.

  3. È possibile utilizzare gli eventi estesi , che offrono più funzionalità rispetto alle tracce sul lato server e che Microsoft consiglia invece di tracce sul lato server a partire da SQL Server 2012.

  4. È possibile utilizzare la modalità di controllo C2 .

È possibile utilizzare SQL Server Profiler per impostare la traccia (scegliere gli eventi specifici, i filtri, ecc. Desiderati), quindi copiarla utilizzando il menu File ed eseguirla sul server per creare una traccia sul lato server, come descritto qUI .


5

Esistono diverse soluzioni e tecniche di SQL Server per il monitoraggio delle istruzioni SELECT

  1. Procedure e funzioni memorizzate appositamente sviluppate - Nota: questo metodo richiede una conoscenza avanzata della programmazione T-SQL e un mantenimento aggiuntivo delle procedure e funzioni memorizzate (ad esempio in caso di modifica dello schema del database). Puoi vedere di più in questo articolo: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. Tecnologia di traccia di SQL Server: puoi leggere le istruzioni dettagliate in questo articolo: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Utilizzo della funzionalità di controllo di SQL Server: la funzione di controllo (introdotta in SQL Server 2008) è in grado di tenere traccia degli eventi del server e del database e utilizza la tecnologia degli eventi estesi. Ma il controllo a livello di database è supportato solo dalle versioni Developer Server ed Enterprise.

  4. Utilizzo di strumenti di terze parti come ApexSQL Audit o Idera SQL Compliance Manager


3

Per impostazione predefinita, non registra le istruzioni SELECT. Puoi fare riferimento alla mia risposta qui per maggiori dettagli per controllare le istruzioni SELECT.

Inoltre, per impostazione predefinita non registra nemmeno le istruzioni T-SQL, ma registra EVENTI come Cambio memoria server, Accesso controllo fallito, Evento aggiunta registro, ecc. È possibile trovare ulteriori informazioni qui insieme agli script T-SQL per estrarre informazioni da Traccia predefinita.


3

Finché non ti interessa chi ha eseguito le query, ci sono alcuni modi per visualizzare le metriche sulle query che vengono eseguite nel tuo sistema. Questo è limitato ai dati dall'ultimo riavvio e potenzialmente dalla pressione della cache del piano (o altra memoria) a seconda di quanto più profondamente estendi la query.

;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%';

Potresti voler estendere il modello - ad esempio questo ignorerà le query che iniziano ;WITH, ironicamente, e può catturare SELECT INTOe persino assegnare variabili che non fanno riferimento a tabelle reali.

Tuttavia, se hai bisogno di informazioni più dettagliate di così, la risposta di Nathan è un buon inizio (tranne se hai intenzione di usare trace, NON usare Profiler). Ricorda solo che la registrazione di ogni singola query sul tuo sistema non sarà gratuita.


Sono d'accordo con la dichiarazione di cui sopra. Sarei incredibilmente cauto nel monitorare tutte le dichiarazioni selezionate nel tuo database.
Zane,

Ho provato la tua soluzione: è possibile che fornisca solo procedure, funzioni e trigger e nessuna delle istruzioni sql eseguite ad hoc?
Magier,

@Magier No, sys.dm_exec_query_stats dovrebbe riferire solo su istruzioni di query (ad hoc o da un modulo).
Aaron Bertrand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.