2 votes

Recherche de bases de données SQL Server inutilisées

Existe-t-il un moyen de trouver les bases de données SQL Server 2005 inutilisées ?

Je suis en train de mettre à niveau et de migrer mon serveur vers SQL Server 2008 x64 dans une nouvelle instance de serveur à partir de 2005 32 bit.

4voto

Martin Smith Points 174101

Ce n'est pas une méthode infaillible. Voici quelques exemples qui me viennent à l'esprit.

Voir quelles bases de données ont peu de pages dans le pool de mémoire tampon.

select db.name, COUNT(*) As page_count
from sys.databases db LEFT JOIN sys.dm_os_buffer_descriptors bd ON db.database_id = bd.database_id
group by db.database_id, db.name
order by page_count 

Ou regardez les statistiques d'utilisation des index pour chaque base de données.

SELECT db.name, 
(SELECT MAX(T) AS last_access FROM (SELECT MAX(last_user_lookup) AS T UNION ALL SELECT MAX(last_user_seek) UNION ALL SELECT MAX(last_user_scan) UNION ALL SELECT MAX(last_user_update)) d) last_access
FROM sys.databases db 
LEFT JOIN sys.dm_db_index_usage_stats iu ON db.database_id = iu.database_id
GROUP BY db.database_id, db.name
ORDER BY last_access 

Vous pourriez également utiliser des déclencheurs de connexion pour enregistrer les accès en cours pendant une certaine période, juste pour être sûr que rien ne semble accéder aux bases de données "mortes" avant de les mettre hors ligne.

3voto

Vivek Jagga Points 434

Avec SQL Server 2005, vous pouvez utiliser la vue de gestion dynamique sys.dm_db_index_usage_stats. Le nom dit "index" mais c'est un peu trompeur - chaque table a une entrée dans cette vue, même si elle n'a pas d'index. Voici une requête utile de 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 

Voici l'article original :

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

Gardez à l'esprit que ces statistiques d'utilisation sont réinitialisées lorsque le serveur SQL redémarre.

1voto

devio Points 22981

Combinez l'une ou l'autre de ces méthodes pour découvrir quelles bases de données sont toujours en service

  • liens de listage

    select * from sys.dm_exec_connections
  • liste des processus actifs

    select * from sys.sysprocesses
  • énumération des statistiques d'exécution

    select DB_NAME(database_id),  
        max(isnull(isnull(last_user_scan, last_user_update), 
            isnull(last_user_seek, last_system_scan))) 
    from sys.dm_db_index_usage_stats 
    group by DB_NAME(database_id)
  • stockage des horodatages de LOGON

créer un TRIGGER DE LOGON et insérer le EVENTDATA le contenu dans un tableau pour une interrogation ultérieure, exemples aquí , aquí

1voto

Francesco Mantovani Points 781

Essayez ceci : si le last_access est nulle, alors aucune lecture ou écriture n'a eu lieu :

WITH cte AS (
SELECT database_id, dt, op 
FROM sys.dm_db_index_usage_stats
    UNPIVOT (dt for op in (last_user_lookup, last_user_scan, last_user_seek, last_user_update)) b)
SELECT d.name DB, MAX(c.dt) last_access, MAX(i.sqlserver_start_time) sqlserver_start_time, GETUTCDATE() captured
FROM sys.databases d 
LEFT JOIN cte c ON d.database_id=c.database_id
CROSS JOIN sys.dm_os_sys_info i
WHERE d.database_id>4
GROUP BY d.name 
ORDER BY d.name;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X