記事では私はこのサーバー私の政権のだろうと格納されてスクリプトを提示するいくつかの手続きのためのSQLの一環として、定期的に私が使用しているServer 2005の。 これらのスクリプトは、サーバーの使用を追跡するの大部分は、データベースのサイズを変更できるように、使用するインデックスは、自動的にそれらを再構築、またはテーブルの最後の利用日を確認します。
1。 監視サーバーの活動
SQLサーバの監視は、おそらく1つの管理者の最も重要な責任のデータベースです。 プロシージャについては、この私が使用してsp_WhoIsActive をMachanicsアダム開発された。 このプロシージャは、サーバー上の保留中の要求が表示されますすべてのユーザーアプリケーションを実行してなどの情報を関連のCPU、I / Oまたはアプリケーション自身。
プロシージャのパラメータを2回指定された間隔(例えば5秒)の活動(測定するためにサイクルを実行するほとんど)を簡単にほとんどのCPUを使用する消費を決定することができます別のクエリのインスタントtempdbまたはいるディスクにアクセスします。
手順も待ってから、ブロックを引き起こすクエリの種類についての情報を表示します。
各リンクをクリックしてリクエストでは、便利な明らかにも集中的にリソースをアプリケーションを考慮に関連付けられたXMLファイルが表示されます。
より速く、代替が、ほぼ完全に私は定期的に使用可能ですここ。
2。 監視ディスクスペースの使用を
私はプロシージャを使用sp_SDS ファイルをのインスタンス(必須)無料登録レポートを生成する鼎書かれたリチャードログオンし、サイズのデータベース。 スペースも両方のファイルタイプと全身に計算されます。
これは/ Excelのスプレッドシートにコピー&ペーストしやすいストアドプロシージャを代わりには:
インスタンスとしてSELECT @ @ SERVERNAMEは db.name、基本 のSUM(ケース0にしてaf.groupid = 0 * ELSEの8192.0E af.size / 1048576.0E END)はのAS Taille_Base、 のSUM(ケースのWHEN af.groupid = 0し8192.0E *を/ 1048576.0EのELSE 0 END)はのAS Taille_Log af.size、 のSUM(* 8192.0E af.size / 1048576.0E)Taille_TotaleのAS からマスタ.. sysdatabasesのをDBとして 入れ子は、ASのAFのAFオン[DBIDが] [DBIDが] = dbをマスタ..がsysaltfilesのJOIN Db.nameのWHEREしない('ディストリビューション'、'リソース'、'マスタ'、'tempdb'を、'モデル'、'msdb'は)における GROUP BYのdb.name
あなたはあなたのデータベースのサイズを監視する場合、それはおそらく必要なデータベース管理の特定のテーブルを作成することです。 この表は、あなたが見て興味を持ったすべてのデータが含まれます。 スクリプトについては、この私が使用してDBINFO フォードティム書かれた。 これは、テーブルファイルのサイズ(データベースに記録することができますログ)、空き領域を、ファイル名または回復モードに入ります。
単にテーブルDBINFOで、あなた、またはレポートを作成する塩基の大きさの進化を予測する、このデータを格納するSQLのjobを定期的にこのスクリプトを実行作成します。たとえばSQLのサーバーを使用してAnalysis Servicesの。
3。 分析性能指数の
経営指標は、SQLサーバーの管理の別の重要な課題です。 データベースには分析のテーブルにインデックスを、これらの使用の関連性と、私が使用してスクリプトをストレイトジェイソン開発された 。 このスクリプトは、(ヒープを含む、つまり、数としてその有用性を評価するためにテーブル自体)と情報の必要な無数の言っているデータベースのすべてのインデックスが表示されますスキャンとシーク、列インデックスは、インデックスの大きさや影響(プラス)のユーザーのインデックス。 スクリプトでは、行方不明のインデックスは、SQL Serverによって提案されたが表示されます。
場合は、スキャンとルックアップをすばやくシークを表示する場合は、次のスクリプトを使用できます:
セレクトobject_nameは(米[のSYS第1 object_idにのAS]を)として[オブジェクト名]は、I. [名]は、[名前索引] USER_SEEKS、USER_SCANS、USER_LOOKUPS、USER_UPDATES SYS.DM_DB_INDEX_USAGE_STATSからオンとして参加私のS入れ子。インデックス[をobject_idに] =米[はobject_idに]と私は=米'が、index_id] index_idのWHERE OBJECTPROPERTYをobject_idに(米[はIsUserTable')= 1 インデックスに挿入、更新および削除の要求の影響を検討するには、このスクリプトを使用できます:
セレクトobject_nameはについて(A. [)[オブジェクト名]のAS、]をobject_idに 第1 [名前] [名前のインデックス]のAS A.のLEAF_INSERT_COUNT、 A.のLEAF_UPDATE_COUNT、 ÅのLEAF_DELETE_COUNT SYS.DM_DB_INDEX_OPERATIONAL_STATS(NULLのは、NULL、NULLには、NULL)から 入れ子は、ASは私sys.indexesにJOINを 第1 [はobject_idにオン] = Åの[が]をobject_idに とアイエーは= index_id index_id のWHERE OBJECTPROPERTYについて(A. [は]、'object_idにIsUserTable')= 1
未使用インデックスを列挙し、かどうかは削除することができますしない場合は、次のスクリプトを使用してできるかを決定するには:
のDECLARE @ DBIDがご 、@ dbnameにはvarchar(100); セレクト@でdbid = DB_IDを() 、@ dbnameに= db_nameに(); partitionCTE(object_idが、index_id、partition_countマッチするレコード)と のAS ( セレクト[は]をobject_idに 、Index_id は、SUM([ROWSを])のAS'マッチするレコード' は、COUNT(partition_id)のAS'partition_count' からのsys.partitions GROUP BYの[が]をobject_idに 、Index_id ) セレクトobject_nameの(第1 [object_idの])のObjectNameのAS 、I.name 、ケース のWHEN i.is_unique = 1 その後、独自の' ELSEの'' + I.type_desc END'ののAS索引型を' 、Ddius.user_seeks 、Ddius.user_scans 、Ddius.user_lookups 、Ddius.user_updates 、Cte.row_count 、ケースのWHEN partition_count> 1して'はい' ELSEの'いいえ'ENDと'パーティション?" 、ケース のWHEN i.type = 2 = 0とi.is_unique_constraint 次に、'ドロップインデックス'+ i.name +'で'+ @ dbnameは +'。dboが。"は、 + object_nameの(ddius. [object_idの])+'; のWHEN i.type = 2 = 1とi.is_unique_constraint 次に、'アルターテーブル'+ @ dbnameは +'。dboが。"は、 + object_nameの(ddius. [object_idが]) +'ドロップ制約'+ i.nameの+'; ELSEの'' END'ののAS SQL_DropStatementを' のAS私からsys.indexesに 入れ子に参加しddius sys.dm_db_index_usage_stats = i.OBJECT_ID ddius.OBJECT_IDオン そしてi.index_id = ddius.index_id 入れ子に参加partitionCTEのAS熱膨張 = i.OBJECT_ID cte.OBJECT_IDオン そしてi.index_id = cte.index_id のWHERE = @ ddius.database_idでdbid ORDER BY句 (Ddius.user_seeks)はASCは+ +のddius.user_lookupsをddius.user_scans 、User_updatesはDESCを。
最後に、あなたはこのスクリプトを使用することができます不足しているインデックスは、SQL Serverによって提案されたリストに:
セレクトt.nameのAS'テーブル'、'インデックスの作成非クラスタ化ix_'+ t.name +'_missing_'+ CAST関数(のAS VARCHAR型のddmid.index_handle(10))+'で'+ ddmid.STATEMENT +'('+のISNULL( ddmid.equality_columnsは、'')ddmid.equality_columnsのddmid.inequality_columnsを+のとNULLの場合ではない含める'、'')+')を'+のISNULLです(ddmid.inequality_columnsしないnullの場合、''をELSE''END +のISNULL( ('+ + ddmid.included_columns ');',';')sql_statementのAS、ddmigs.user_seeks、ddmigs.user_scansは、CAST((+ ddmigs.user_seeks ddmigs.user_scans)としてint ddmigs.avg_user_impact *)のAS'est_impact' ONにddmid.OBJECT_IDトンddmigs.last_user_seek sys.dm_db_missing_index_groups ASはddmig.index_handle = sys.tables ddmid.index_handle入れ子結合としてからインナーはddmig ONにASをddmid ONに結合sys.dm_db_missing_index_group_statsのddmigsとしてddmigs.group_handle = ddmig.index_group_handle sys.dm_db_missing_index_details入れ子に参加し= t.OBJECT_ID WHEREとddmid.database_id DB_IDを()キャスト((+ ddmigs.user_seeks ddmigs.user_scans)としてint ddmigs.avg_user_impact *)> 100 ORDER BYでキャスト((+ ddmigs.user_seeks ddmigs.user_scans)* ddmigs.avg_user_impact INT)をDESCをのAS; 4。 デフラグインデックス
として、データが追加され、更新、または削除、インデックスが断片化され、パフォーマンスが大幅に低下させることができます。 したがって、重要な断片化の場合には高すぎる取られる断片化インデックスと行動を監視するのポリシーを持ってすることです。
場合には私の私は、手続きの週末を実行しているジョブを実行するdba_IndexDefrag_spをミシェルアフォード 。 この手順は、すべてのデータベースおよびサーバーのすべてのインデックスを確認し、断片化のレベルに応じて再編成、または完全に再生成することができます。 オプションは、手順では、断片化のレベルを変更することができますが、チェックするためのベースまたは1つのテーブルを指定する両方の操作をトリガまたはプロセッサの数を使うように設定。
5。 最後のMERGE
実稼働環境に応じて、そのテーブルの非常に大きな数はその後引退に任せるのユーザーによって作成されますが起こることがあります。 この例ではインポートファイルから、それは他のSQLサーバー上よりもチェックする興味深いものになる可能性がありますが発生することができます。 それはどうか、これらのテーブルはまだかアーカイブする前に使用されて見守らなければならない。 については、あなたに読んで、指定されたデータベース内のテーブルを書くの最後の日付を与える次のスクリプトを使用して本:
ANSI_WARNINGSをがOFFに設定する。 SET NOCOUNTをONに。 行く のAS aggで ( セレクト [は]をobject_idを last_user_seek、 last_user_scan、 last_user_lookup、 last_user_update から sys.dm_db_index_usage_stats のWHERE database_id DB_IDを=() ) セレクト [スキーマ] = OBJECT_SCHEMA_NAMEは([)、]をobject_idに [Table_Or_View] = object_nameは、([)、]をobject_idに last_read =マックス(last_read) last_write =マックス(last_write) から ( セレクト[はagg]をlast_user_seekは、NULLからobject_idに は、UNION ALL セレクト[はagg]をlast_user_scanは、NULLからobject_idに は、UNION ALL セレクト[はagg]をlast_user_lookupは、NULLからobject_idに は、UNION ALL セレクト[はlast_user_updateをagg]をNULLにからobject_idに )ASは×([]は、last_read、last_write)object_idに GROUP BYを OBJECT_SCHEMA_NAMEは([)、]をobject_idに object_nameは、([)]をobject_idに オーダー1,2による。タグ: SQL Server 2005の
















