2

私はコードによる答えではなく、戦略を望んでいます。私は無駄な量の役に立たない情報を含むデータベースを扱わなければならず、それは決してアクセスされることさえありません。ノイズに有利な信号対ノイズの比率を推測することさえできます。どのテーブルのどの列にアクセスされていないかを見つけるのに役立つ統計/分析ツールを探しています。

残念ながら、ほとんどの場合、使用されないのは列(テーブルではない)です。だから私はそれをこのレベルに分解する必要があるでしょう。重要な場合は、SQLServer2008を使用しています。

4

3 に答える 3

1

これを確認する唯一の方法は、データベースにアクセスしているすべてのアプリケーションコードにアクセスし、このコードがアプリケーションでどのように使用されているかを確認することです。select * from tableのようなクエリがない場合は、簡単な作業になります。

アプリケーションコードの検査:手動検査ほど正確な概要を示すものはありませんが、時間がかかる場合があります。データベースアクセスコードが1セットのクラスに格納されており、クラスがデータベーステーブルに強く結合されている場合は、各データベース列の「すべての参照を検索」できます。

トリガー:疑わしいすべてのテーブルに挿入、更新、削除のトリガーを設定し、更新されたすべての列を別のテーブルに保存します。これにより、更新に最も頻繁に使用される列の詳細がわかります。したがって、他の列が削除の対象になります。

プロファイリング:疑わしいテーブルのプロファイリングを設定し、しばらくの間実行して、ログを分析します。

サードパーティツール:これらのツールを使用して、データベース内の他のオブジェクトによって参照されていないすべてのオブジェクトを検索します。疑わしいテーブル/列を特定するのに役立つ場合があります。SQLDependancyトラッカー またはApexSQLCleanをお試しください

于 2013-03-12T13:52:39.060 に答える
0

あなたは:を使うことができauditます

use master
GO

create server audit MyAudit
    to file (filepath = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA')
GO

alter server audit MyAudit
    with (state = on);
GO

use [<YourDatabase]
GO

create database audit specification MyDatabaseAudit
for server audit MyAudit
add (
    select on [<YouSchema>].[YourTable] by dbo
)
with (state = on)
GO

select [<YourColumn>] from [<YouSchema>].[YourTable]
GO

use master
GO

alter server audit MyAudit
    with (state = off);
GO

select * from sys.fn_get_audit_file ('C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyAudit*',default,default);
GO

OK、これでは列のように細かく取得することはできませんが、各selectステートメントをキャプチャするため、提供されるデータからこの情報を取得できるはずです。

明らかに、上記のファイルパスは例のためだけのものです。

別の方法はSQL Profilerトレースですが、これでも列のレベルに到達することはできず、実行中のselectステートメントをキャプチャするだけです。これの欠点は、必要な情報を取得するために正しくフィルタリングする必要があることです。これは面倒な場合があります。また、オーバーヘッドが高くなる可能性があります。

于 2013-03-06T09:05:25.463 に答える
0

運が良ければ、すべてのデータがSP経由でアクセスされ、*がない場合は、information_schema.columnsテーブルを使用してみてください。`selectdistinct'のようなもの

select p.[type]
      ,p.[name]
      ,c.[definition]
  from sys.objects p
  join sys.sql_modules c
    on p.object_id = c.object_id
 where p.[type] = ''P''
   and c.[definition] like %'+COLUMN_NAME+'%' FROM INFORMATION_SCHEMA.COLUMNS

`

このクエリは、生成されたSQLステートメントを実行するために微調整する必要があります。

于 2020-02-05T16:56:27.930 に答える