このT-SQLスクリプトは、SUSDBデータベース(Windows Server Update Services (WSUS) で使用されるデータベース)の
基本的なメンテナンス作業を実行します。具体的には、インデックスの最適化と統計情報の更新を行います。
以下に、コードの各部分を解説します。
1. インデックスの断片化解消と最適化
USE SUSDB;
GO
SET NOCOUNT ON;
-- 断片化レベルに基づいて再構築または再編成するインデックスを特定
DECLARE @work_to_do TABLE (
objectid int,
indexid int,
pagedensity float,
fragmentation float,
numrows int
)
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @schemaname nvarchar(130);
DECLARE @objectname nvarchar(130);
DECLARE @indexname nvarchar(130);
DECLARE @numrows int
DECLARE @density float;
DECLARE @fragmentation float;
DECLARE @command nvarchar(4000);
DECLARE @fillfactorset bit
DECLARE @numpages int
-- 断片化を推定し、必要なインデックスを特定
PRINT 'Estimating fragmentation: Begin. ' + convert(nvarchar, getdate(), 121)
INSERT @work_to_do
SELECT
f.object_id,
index_id,
avg_page_space_used_in_percent,
avg_fragmentation_in_percent,
record_count
FROM
sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'SAMPLED') AS f
WHERE
(f.avg_page_space_used_in_percent < 85.0 and f.avg_page_space_used_in_percent/100.0 * page_count < page_count - 1)
or (f.page_count > 50 and f.avg_fragmentation_in_percent > 15.0)
or (f.page_count > 10 and f.avg_fragmentation_in_percent > 80.0)
PRINT 'Number of indexes to rebuild: ' + cast(@@ROWCOUNT as nvarchar(20))
PRINT 'Estimating fragmentation: End. ' + convert(nvarchar, getdate(), 121)
SELECT @numpages = sum(ps.used_page_count)
FROM
@work_to_do AS fi
INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id
-- 処理するインデックスのリストのカーソルを宣言
DECLARE curIndexes CURSOR FOR SELECT * FROM @work_to_do
-- カーソルを開く
OPEN curIndexes
-- インデックスをループ処理
WHILE (1=1)
BEGIN
FETCH NEXT FROM curIndexes
INTO @objectid, @indexid, @density, @fragmentation, @numrows;
IF @@FETCH_STATUS < 0 BREAK;
SELECT
@objectname = QUOTENAME(o.name),
@schemaname = QUOTENAME(s.name)
FROM
sys.objects AS o
INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id
WHERE
o.object_id = @objectid;
SELECT
@indexname = QUOTENAME(name),
@fillfactorset = CASE fill_factor WHEN 0 THEN 0 ELSE 1 END
FROM
sys.indexes
WHERE
object_id = @objectid AND index_id = @indexid;
IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) OR (@fragmentation < 30.0)
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
ELSE IF @numrows >= 5000 AND @fillfactorset = 0
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD WITH (FILLFACTOR = 90)';
ELSE
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
PRINT convert(nvarchar, getdate(), 121) + N' Executing: ' + @command;
EXEC (@command);
PRINT convert(nvarchar, getdate(), 121) + N' Done.';
END
-- カーソルを閉じて割り当てを解除
CLOSE curIndexes;
DEALLOCATE curIndexes;
IF EXISTS (SELECT * FROM @work_to_do)
BEGIN
PRINT 'Estimated number of pages in fragmented indexes: ' + cast(@numpages as nvarchar(20))
SELECT @numpages = @numpages - sum(ps.used_page_count)
FROM
@work_to_do AS fi
INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id
PRINT 'Estimated number of pages freed: ' + cast(@numpages as nvarchar(20))
END
GO
§断片化の特定: sys.dm_db_index_physical_stats DMV (Dynamic Management View) を使用して、
インデックスの断片化レベル、ページ密度、レコード数などの情報を取得します。
§断片化の条件: 特定の条件に基づいて、断片化が深刻なインデックスを特定します。
ページ密度が低い(85%未満)場合
ページ数が50を超え、断片化率が15%を超える場合
ページ数が10を超え、断片化率が80%を超える場合
§インデックスの再構築/再編成: 特定されたインデックスに対して、
ALTER INDEX コマンドを使用して再構築(REBUILD)または再編成(REORGANIZE)を実行します。
ページ密度が75%~85%で、FILLFACTORが設定されている場合、または断片化率が30%未満の場合、REORGANIZE を実行します。
レコード数が5000以上でFILLFACTORが設定されていない場合、REBUILD WITH (FILLFACTOR = 90) を実行します。
上記以外の場合は、REBUILD を実行します。
FILLFACTOR: FILLFACTORは、インデックスページの空き領域の割合を指定するもので、挿入パフォーマンスに影響します。
ページ数の計算: 断片化されたインデックスのページ数と、最適化後に解放されたページ数を計算し、結果を出力します。
2. 統計情報の更新
--Update all statistics
PRINT 'Updating all statistics.' + convert(nvarchar, getdate(), 121)
EXEC sp_updatestats
PRINT 'Done updating statistics.' + convert(nvarchar, getdate(), 121)
GO
§統計情報の更新: sp_updatestats ストアドプロシージャを使用して、
データベース内のすべてのテーブルの統計情報を更新します。
統計情報は、クエリのパフォーマンスに影響するため、定期的な更新が重要です。
まとめ
このスクリプトは、SUSDBデータベースのパフォーマンスを維持するために、
インデックスの最適化と統計情報の更新という2つの重要なメンテナンス作業を自動化します。
これにより、データベースのパフォーマンスが向上し、WSUSの安定性が確保されます。
[0回]
cybereasonの23.1はwindows11の24H2に対応しているか知りたいです。
Cybereasonのバージョン23.1がWindows 11 24H2に対応しているかについて、直接的な情報は見つかりませんでした。
しかし、Cybereasonの製品情報から、以下の点が確認できます。
対応OS:
Cybereasonは、Windows 11を含む複数のWindows OSに対応しています。
Cybereasonの対応OSには、「Windows 11 (Windows 11 24H2まで)」と記載されています。
このことから、CybereasonはWindows 11 24H2に対応していると考えられます。
しかし、OSの要件は詳細について問い合わせるように記載されているため、
正確な情報については、Cybereasonの公式情報をご確認いただくか、
Cybereasonに直接お問い合わせいただくことを推奨します。
参考情報として、Cybereasonの製品情報ページを以下に示します。
Cybereason センサー | サイバーリーズン合同会社: https://www.cybereason.co.jp/products/sensor/
最新の情報や詳細な仕様については、Cybereasonの公式ウェブサイトをご覧いただくか、直接お問い合わせください。
[0回]
1. 計画フェーズ
1.1 要件定義
クライアント数、ネットワーク構成、セキュリティ要件などの確認
WSUSサーバーの役割(アップストリーム、ダウンストリーム)の決定
必要なストレージ容量、CPU、メモリの決定
1.2 設計
WSUSサーバーの構成設計(データベース、同期スケジュールなど)
グループポリシーの設計
ネットワーク構成の設計
1.3 構築計画
構築スケジュール、担当者の決定
必要なハードウェア、ソフトウェアの調達
テスト計画の作成
2. 構築フェーズ
2.1 ハードウェア、ソフトウェアの準備
サーバーハードウェアのセットアップ
Windows Server 2022のインストール
WSUS役割のインストール
2.2 WSUS設定
WSUSコンソールの設定
同期設定(アップストリームサーバー、同期する製品と分類など)
データベース設定
2.3 グループポリシー設定
WSUSクライアント設定のグループポリシー作成
グループポリシーの適用範囲設定
2.4 テスト
WSUSサーバーの同期テスト
クライアントの更新プログラム受信テスト
グループポリシーの適用テスト
負荷テスト
3. 移行フェーズ
3.1 クライアント移行
グループポリシーの適用
クライアントのWSUSサーバーへの接続確認
移行後の動作確認
3.2 運用開始
WSUS運用手順書の作成
関係者への操作説明
WSUSの監視、管理体制の確立
4. 運用フェーズ
4.1 定期的なメンテナンス
WSUSサーバーのディスククリーンアップ
WSUSデータベースのメンテナンス
更新プログラムの承認、拒否
4.2 トラブルシューティング
クライアントの更新プログラム受信エラー対応
WSUSサーバーの同期エラー対応
4.3 運用状況の監視
イベントログの監視
WSUSの同期状況などの監視
WBS作成のポイント:
各タスクの担当者、期限を明確にする。
タスク間の依存関係を考慮する。
リスク管理計画を含める。
テスト計画の作成は重要です。
Microsoft LearnのWindows Server Update Services (WSUS) のベスト プラクティス - Configuration Managerの内容は大変参考になるので参照ください。
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-server-update-services/plan/plan-your-wsus-deployment
[0回]