SQL Server, неиспользуемые таблицы давно (как избавиться от ненужных таблиц)? - PullRequest
1 голос
/ 16 июля 2010

Есть ли способ найти неиспользуемые таблицы, которые являются ничем иным как мусором в базе данных?

Ответы [ 4 ]

2 голосов
/ 16 июля 2010

Единственный способ, с помощью которого я могу решить, используется ли таблица, это использовать sys.dm_db_index_usage_stats.Предостережение заключается в том, что он записывает только использование таблиц с момента последнего запуска службы SQL.Имея это в виду, вы можете использовать следующий запрос:

  SELECT DISTINCT
         OBJECT_SCHEMA_NAME(t.[object_id])   AS 'Schema'
       , OBJECT_NAME(t.[object_id])          AS 'Table/View Name'
       , CASE  WHEN rw.last_read > 0 THEN rw.last_read END  AS 'Last Read'
       , rw.last_write                        AS 'Last Write'
       , t.[object_id]
    FROM sys.tables                           AS t
    LEFT JOIN sys.dm_db_index_usage_stats     AS us
      ON us.[object_id]    = t.[object_id]
     AND us.database_id    = DB_ID()
    LEFT JOIN
         ( SELECT MAX(up.last_user_read)      AS 'last_read'
                , MAX(up.last_user_update)    AS 'last_write'
                , up.[object_id]
             FROM (SELECT last_user_seek
                        , last_user_scan
                        , last_user_lookup
                        , [object_id]
                        , database_id
                        , last_user_update, COALESCE(last_user_seek, last_user_scan, last_user_lookup,0) AS null_indicator
                     FROM sys.dm_db_index_usage_stats) AS sus 
                  UNPIVOT(last_user_read FOR read_date IN(last_user_seek, last_user_scan, last_user_lookup, null_indicator)) AS up
            WHERE database_id = DB_ID()
         GROUP BY up.[object_id]
         ) AS rw
      ON rw.[object_id] = us.[object_id]
ORDER BY [Last Read]
       , [Last Write]
       , [Table/View Name];

;

1 голос
/ 16 июля 2010

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

Я не уверен, какая статистика базы данных доступна в SQL Svr 2000.

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

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

1 голос
/ 16 июля 2010

Если вы используете систему контроля версий, посмотрите последний скрипт базы данных.Это самый простой способ.

0 голосов
/ 21 июля 2010

Вы можете использовать sp_depends , чтобы подтвердить любые зависимости для подозрительных таблиц.

Вот пример:

CREATE TABLE Test (ColA INT)
GO

CREATE PROCEDURE usp_Test AS 
BEGIN
  SELECT * FROM Test
END
GO

CREATE FUNCTION udf_Test() 
RETURNS INT 
AS 
BEGIN 
  DECLARE @t INT 
  SELECT TOP 1 @t = ColA FROM Test 
  RETURN @t 
END
GO

EXEC sp_depends 'Test'

/** Results **/

In the current database, the specified object is referenced by the following:
name          type
-----         ----------------
dbo.udf_Test  scalar function
dbo.usp_Test  stored procedure

Этот подход имеет несколько предостережений .Также это не поможет с таблицами, доступ к которым осуществляется непосредственно из приложения или другого программного обеспечения (например, Excel, Access и т. Д.).

Если быть точным, я бы порекомендовал использовать SQL Profiler , чтобы отслеживать базу данных и видеть, есть ли ссылки на эти таблицы.

...