Domanda

È un compito banale scoprire se un oggetto è referenziato da qualcos'altro o no. Quello che vorrei fare è identificare se è effettivamente utilizzato .

La mia soluzione inizialmente prevedeva una combinazione di una tabella che conteneva un elenco di oggetti nel database e un lavoro orario.

Il lavoro ha fatto due cose. Innanzitutto, ha cercato nuovi oggetti che erano stati aggiunti al database dall'ultima esecuzione. In secondo luogo, ha esaminato la cache degli oggetti di sql. Se un oggetto nella tabella era elencato nella cache, era contrassegnato nella tabella come recentemente "visto" in uso.

Alla fine di un periodo di sei mesi o altro, sono stati esaminati i contenuti della tabella. Qualunque cosa elencata nella tabella che non era stata vista come referenziata da quando ho iniziato il monitoraggio era probabilmente sicura per il backup e la rimozione.

Certo, c'è la possibilità di oggetti che vengono usati, diciamo, solo una volta all'anno o altro, ma sembra funzionare per la maggior parte.

Tuttavia, è stato un po 'doloroso lavorare con.

Ci sono circa una mezza dozzina di database con cui sto lavorando, la maggior parte dei quali contiene tonnellate di tabelle legacy, che rimangono molto tempo dopo che i loro creatori originali sono passati ad altre società.

Quello che sto cercando è un metodo abbastanza affidabile per tenere traccia di quando viene chiamato un oggetto (tabella, vista, procedura memorizzata o funzione).

Per quelli di voi che attualmente monitorano questo genere di cose, quale metodo / codice usi e lo consiglieresti?

È stato utile?

Soluzione

Con SQL Server 2005 è possibile utilizzare la vista di gestione dinamica sys.dm_db_index_usage_stats. Il nome dice "indice" ma è un po 'fuorviante: ogni tabella ha una voce qui, anche se non ha indici. Ecco una query utile da SQL Magazine:

SELECT 
  t.name AS 'Table', 
  SUM(i.user_seeks + i.user_scans + i.user_lookups) 
    AS 'Total accesses',
  SUM(i.user_seeks) AS 'Seeks',
  SUM(i.user_scans) AS 'Scans',
  SUM(i.user_lookups) AS 'Lookups'
FROM 
  sys.dm_db_index_usage_stats i RIGHT OUTER JOIN 
    sys.tables t ON (t.object_id = i.object_id)
GROUP BY 
  i.object_id, 
  t.name
ORDER BY [Total accesses] DESC

Ecco l'articolo originale:

http://www.sqlmag.com/Article/ArticleID/53878/ sql_server_53878.html

Tieni presente che queste statistiche sull'utilizzo si ripristinano al riavvio di SQL Server.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top