2011-02-02 5 views
2

Есть ли способ найти неиспользуемые базы данных SQL Server 2005?Поиск неиспользуемых баз данных SQL Server

Я в процессе обновления и миграции моего сервера в SQL Server 2008 x64 в новом экземпляре сервера из 32-го 32-го сервера.

Спасибо.

+4

Возьмите их в автономном режиме - посмотрите, кто жалуется? В зависимости от того, что этот сервер, это может быть действительным подходом (т. Е. Возможно для серверов разработки, не столь реалистичным для жизни). –

+1

Но для живых серверов вы получаете более быструю обратную связь :) – Arvo

ответ

4

Не дурачок доказательства. Несколько вещей, которые приходят на ум.

См каких базы данные имеют несколько страниц в буферном пуле

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 

Или посмотреть на статистике использования индекса для каждой базы данных

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 

Вы можете также использовать вход триггера для регистрации доступа продолжающегося для определенный период, чтобы быть уверенным, что ничто не похоже на доступ к «мертвым» базам данных, прежде чем переключать их в автономном режиме.

1

Комбинат любой из этих методов, чтобы выяснить, какие базы данных еще в использовании

  • списка соединений

    select * from sys.dm_exec_connections 
    
  • листинг активные процессы

    select * from sys.sysprocesses 
    
  • перечисляя исполнение улица atistics

    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) 
    
  • хранящей LOGON временные метки

создать LOGON TRIGGER и вставьте EVENTDATA содержимое в таблицу для последующего выполнения запросов, примеры here, here

2

С SQL Server 2005, вы можете использовать динамический вид управления sys.dm_db_index_usage_stats. Название говорит «index», но это немного вводит в заблуждение - каждая таблица имеет запись здесь, даже если у нее нет индексов. Вот полезный запрос от 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 

Вот оригинал статьи:

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

Имейте в виду, что эти статистические данные об использовании сброса, когда SQL Server перезагружается.

+0

Не следует ли вам присоединяться к sys.databases вместо таблиц? То есть ВЫБОР t.name AS 'Таблицы', SUM (i.user_seeks + i.user_scans + i.user_lookups) А.С. 'Общего доступа', SUM (i.user_seeks), как 'Seeks', SUM (i.user_scans) AS 'Scans', SUM (т.е.user_lookups) КАК '' Lookups ИЗ sys.dm_db_index_usage_stats я правое внешнее соединение sys.databases Т на (t.database_id = i.database_id) GROUP BY i.database_id, t.name ORDER BY [Всего] получает доступ к DESC – GaussZ

Смежные вопросы