1

データベース内のゴミに他ならない未使用のテーブルを見つける方法はありますか?

4

4 に答える 4

2

テーブルが使用されているかどうかを判断する唯一の方法は、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];

;

于 2010-07-16T11:51:01.980 に答える
1

ソース管理を使用する場合は、最新のデータベース スクリプトを参照してください。その最も簡単な方法です。

于 2010-07-16T08:35:50.900 に答える
1

データベースの統計が最も有益な場所であることがわかると思います。どのテーブルから最も多く読み取られ、どのテーブルが最も更新されているかがわかります。読み取りも書き込みもされていないテーブルが見つかった場合、それらはおそらくあまり使用されていません。

ただし、SQL Svr 2000 でどのデータベース統計が利用できるかはわかりません。

しかし、単純にあまり使われていないテーブルを見るのではなく、それぞれのテーブルが何を保持していて、それが何のためにあるのかを調べて、設計を正しく理解する方が良いのではないでしょうか? この場合、必要なものとそうでないものを適切に判断できるようになります。

ただし、ソース管理が何であるかがわからないことは懸念事項です (ソース管理はファイルへの変更を管理する方法です。通常はソース コードです。そのため、誰が、いつ、なぜ変更したかを追跡できます)。 man プロジェクト (および一部の 1 人プロジェクト) で使用する必要があります。

于 2010-07-16T11:36:08.027 に答える
0

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 プロファイラーを使用してデータベースを監視し、これらのテーブルが参照されているかどうか、いつ参照されるかを確認することをお勧めします。

于 2010-07-21T04:08:34.623 に答える