WSUS と SCCM 2012(ConfigMgr)を連携している環境で、未使用(不要)更新が長年蓄積し、WSUS 同期が止まった――このパターンは「クリーンアップが動かない」「SQL で消しても遅すぎる」がセットで起きがちです。本記事では最短復旧の現実解(入れ直し)と、再インストールを避けたい場合の次善策、再発防止の運用までを整理します。
状況の整理:WSUS 同期停止と「不要更新の山」が起きる理由
SCCM 2012 と WSUS を Software Update Point(SUP)として連携している場合、WSUS は「更新メタデータを保持し、同期とスキャンの土台になる役割」を担います。ここで長期間メンテナンス(不要更新の整理、DB メンテ、クリーンアップ)を行わないと、WSUS のデータベース(SUSDB)が肥大化し、同期やクリーンアップが破綻しやすくなります。
よくある症状
- WSUS 同期が途中で止まる/終わらない(SCCM 側の同期も止まる)
- WSUS コンソールや SUP の操作が極端に遅い
- サーバー クリーンアップ ウィザードが失敗する(タイムアウト、例外、途中で落ちる)
- SQL ストアド手順で「不要更新」が大量検出される(例:
spGetObsoleteUpdatesToCleanupで数万件) spDeleteUpdateで 1 件あたり数分かかり、現実的な時間で終わらない
なぜ SQL での 1 件削除が「異常に遅く」なるのか
WSUS の更新 1 件は、単純な 1 レコードではありません。更新メタデータ、関連するファイル情報、適用関係、検出ロジック、分類情報など、複数テーブルに関連がぶら下がっています。結果として、1 件削除でも内部的に多段の参照・削除が発生し、以下の条件が揃うと極端に遅くなります。
- 対象件数が多すぎる:削除対象が 2 万件を超えると「終わるが終わらない」状態になりやすい
- DB の断片化(フラグメント):インデックスが崩れていると、削除処理がテーブル全体スキャン寄りの挙動になりやすい
- ログと I/O が詰まる:削除はトランザクションログも増えやすく、ディスクが遅いと一気に詰まる
- WID(Windows Internal Database)運用:リソース制約や運用上の制限で、外部 SQL より詰まりやすいケースがある
- クリーンアップ失敗状態の継続:途中失敗を繰り返すと、より状態が悪化しやすい
| 現象 | 背景にあることが多い要因 | まず確認したいポイント |
|---|---|---|
| 同期が止まる/終わらない | 不要更新・メタデータ肥大、DB 劣化 | WSUS DB サイズ、同期ログ、SUSDB の配置(SQL/WID) |
| クリーンアップ ウィザードが失敗 | 処理量過多、タイムアウト、断片化 | イベントログ、WSUS/IIS のログ、DB メンテ有無 |
| spDeleteUpdate が 1 件数分 | 関連削除が重い、インデックス崩れ、I/O 詰まり | DB の I/O、ログ容量、ディスク空き、インデックス断片化 |
最短で解決したいなら:WSUS をアンインストールしてクリーンに再インストール
不要更新が大量に溜まり、SQL での削除が 1 件数分という状態まで悪化している場合、「1 件ずつ消す」アプローチは技術的に正しくても、運用上はほぼ詰みになりやすいです。結論として、復旧を急ぐならWSUS の入れ直し(再インストール)+ SUP の再構築が最も確実で、結果的に最短になりやすい選択です。
「入れ直し」が速い理由
- 削除は関連削除・ログ増大・ロック競合で雪だるま式に遅くなる一方、再作成は初期状態から同期し直すため処理の見通しが立ちやすい
- クリーンアップが壊れている状態を引きずらない(不整合や断片化をリセットできる)
- SCCM の更新管理は本体(サイトDB)側が主で、WSUS は SUP の土台なので作り直しても SCCM 自体を壊すわけではない(ただし SUP の再構成は必須)
実施前に押さえるべき「影響範囲」
入れ直しは強力ですが、影響がゼロではありません。次の整理を先にしておくと安全です。
| 確認項目 | ポイント | 判断の目安 |
|---|---|---|
| WSUS をスタンドアロン運用しているか | WSUS で直接「承認」や「コンピューター グループ」を運用しているか | しているなら、入れ直しで承認情報が消えるため要検討 |
| SCCM の SUP としてのみ使っているか | SCCM 側で更新を管理し、WSUS はメタデータ提供のみか | このケースは入れ直しの心理的ハードルが低い(復旧が早い) |
| WSUS DB が SQL Server か WID か | 削除・バックアップ・復旧作業の手間が変わる | どちらでも入れ直しは可能。SQL は SUSDB の drop が明確 |
| WSUS コンテンツの保存場所 | WSUSContent のパス(例:D:\WSUS など) | 再利用するか、削除して再取得するかを決める |
| IIS/SSL/ポート/プロキシ | カスタム構成をしている場合、再設定が必要 | 現状設定をメモしておくと復旧が速い |
手順イメージ:WSUS 再インストールと SUP 再構築(SCCM 2012 + WSUS)
環境差が出る部分はありますが、流れとしては次の順番が安全です。特に 「SCCM 側の SUP を外してから WSUS を外す」のがポイントです。
事前準備(必須)
- SCCM コンソールで、該当サイト システム サーバーの役割(SUP 設定、同期スケジュール、選択製品/分類)を記録
- WSUS コンテンツパス、ポート、SSL 有無、プロキシ、上流 WSUS の有無を記録
- 可能ならバックアップ(少なくともサーバースナップショットや VM バックアップ、SQL のバックアップ)
SCCM 側での作業(SUP をいったん切り離す)
- SCCM コンソールで、対象の Software Update Point 役割を削除(または WSUS 同期関連が動かない状態にする)
- 同期が走っていない時間帯を選ぶ(無理に走らせない)
- 関連コンポーネントの状態が落ち着くまで待つ(ログを確認し、明らかなエラーのループが止まっていること)
※SCCM 2012 の環境は個別差が大きいので、ここは「SUP を外す→WSUS を作り直す→SUP を戻す」という原則を守ることが重要です。
WSUS 側での作業(アンインストール→掃除→再インストール)
- WSUS ロール(必要なら管理ツール含む)を削除し、再起動
- WSUS のコンテンツ フォルダー(例:
D:\WSUS\WSUSContentなど)を削除(残す場合は「後で再利用する」という前提が必要) - WSUS の DB を削除
- 外部 SQL Server の場合:SUSDB を drop(実施前にバックアップ推奨)
- WID の場合:該当インスタンスの SUSDB を削除(または WID のデータファイルを削除する前にサービス停止など安全手順を踏む)
- IIS の WSUS 関連サイト(WSUS Administration 等)が残っていれば整理し、再起動
- WSUS を再インストールし、ポストインストール タスクを完了(DB 種別、コンテンツ格納先など)
SCCM 側での作業(SUP を作り直し、再同期)
- SCCM コンソールで Software Update Point を再追加(同一サーバーでも作り直し)
- 製品/分類/言語の選択を見直す(必要最小限へ)
- 同期を開始し、初回同期の完了を確認
再インストール後に確認したいチェックリスト
- WSUS の同期が完走する(途中で止まらない)
- SCCM 側でソフトウェア更新の同期が成功する
- WSUS コンテンツの格納先にファイルが生成されている
- IIS の WSUS 関連アプリケーション プールが停止していない
- クライアントのスキャン・更新展開が通常運用に戻る
| 確認箇所 | OK の目安 | 引っかかりやすい原因 |
|---|---|---|
| WSUS 同期 | 定期同期が一定時間内に完了する | プロキシ、上流設定、分類過多、言語過多 |
| SCCM 同期 | SUP 同期エラーが出ない | SUP 役割の再構成漏れ、ポート/SSL 不一致 |
| ディスク | WSUSContent/ログ/DB の空きが十分 | 空き不足、DB とログが同一遅ディスク |
再インストールを避けたい場合の次善策:WSUS DB の再インデックス → クリーンアップ
事情(ダウンタイム制約、スタンドアロン WSUS 併用、変更手続きの都合など)で入れ直しが難しい場合は、まずWSUS DB の状態を「削除が効く状態」まで戻すのが現実的です。具体的には再インデックス(reindex)と統計情報更新を行ってから、クリーンアップ(不要更新削除)に挑みます。
このルートの限界も知っておく
DB メンテで改善しても、削除対象が極端に多いと「結局、少しずつ削除して時間で解決」になりがちです。特に spDeleteUpdate が 1 件数分レベルの場合、改善しても「数十秒」程度までで、根本的に何万件も消すには厳しいことがあります。
まずやるべき:製品・分類・言語を絞る(将来の肥大化を止血)
クリーンアップを頑張っても、同期のたびに余計な更新を取り込み続けると追いつきません。SCCM 運用では「必要な製品・分類・言語だけ」を選ぶのが基本です。
- 使っていない製品(古い OS、旧 Office、不要なサーバー製品)を外す
- 分類(Drivers、Feature Packs など)を必要最小限にする
- 言語(全言語)を避け、必要な言語のみに限定する
WSUS DB メンテナンス(再インデックス/統計更新)の考え方
ここは環境により最適解が変わるため、記事としては「やるべき方向性」と「実行時の注意点」を明確にします。
- 目的:断片化したインデックスを整え、削除・検索・同期の I/O を減らす
- 実行タイミング:業務外(DB が重くなりやすい)
- 注意点:ログが増える、ロックが発生する、DB が大きいほど時間がかかる
- 事前確認:ディスク空き(DB/ログ)、DB 自動拡張設定、バックアップ
参考として、運用現場でよく使われる「WSUS DB のインデックス断片化を見ながら再構築する」方向の SQL を載せます。環境差があるため、必ず検証環境やメンテナンス時間で実施してください。
/* 例:WSUS(SUSDB)の断片化が大きいインデックスを再構築し、統計を更新する方針の一例
実行前にバックアップ・空き容量・メンテ時間を確保してください */
USE SUSDB;
GO
-- 断片化の大きいインデックスを対象にする例(しきい値は運用に合わせて調整)
DECLARE @TableName sysname, @IndexName sysname, @sql nvarchar(max);
DECLARE cur CURSOR FAST_FORWARD FOR
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(ps.object_id)) + '.' + QUOTENAME(OBJECT_NAME(ps.object_id)) AS TableName,
QUOTENAME(i.name) AS IndexName
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') ps
JOIN sys.indexes i
ON ps.object_id = i.object_id AND ps.index_id = i.index_id
WHERE
ps.index_id > 0
AND ps.avg_fragmentation_in_percent > 30
AND ps.page_count > 1000
AND i.name IS NOT NULL;
OPEN cur;
FETCH NEXT FROM cur INTO @TableName, @IndexName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = N'ALTER INDEX ' + @IndexName + N' ON ' + @TableName + N' REBUILD;';
EXEC sp_executesql @sql;
FETCH NEXT FROM cur INTO @TableName, @IndexName;
END
CLOSE cur;
DEALLOCATE cur;
-- 統計情報の更新(全体)
EXEC sp_updatestats;
GO
クリーンアップを「成功させる」ための運用テクニック
クリーンアップが失敗する環境では、いきなり「全部」を片付けようとすると落ちがちです。成功率を上げるには、負荷を分割して進めます。
- 一度にやる範囲を狭める:クリーンアップ ウィザードの項目を分けて実行する(不要更新、不要ファイル、期限切れなどをまとめてやらない)
- まず Decline(拒否)で整理:置き換え済み(Superseded)や期限切れ(Expired)を先に整理し、削除対象の質を上げる
- SQL で削除するならバッチ化:大量削除を 1 回で回さず、件数を区切って繰り返す(ログ肥大・ロック長期化を避ける)
- 処理中は同期を走らせない:同期と削除はぶつかると泥沼になりやすい
質問で挙がっている spGetObsoleteUpdatesToCleanup → spDeleteUpdate の流れは、理屈としては正しいです。ただし「1 件数分」の状態では、削除に入る前に DB メンテで土台を整える、もしくは入れ直しに切り替える判断が、結果的に最短になります。
「入れ直し」か「掃除で粘る」かの判断基準
同じ症状でも、選ぶべき解決策は運用要件で変わります。判断がぶれないよう、現場目線の分岐を表にしておきます。
| 条件 | おすすめ | 理由 |
|---|---|---|
| 不要更新が数万件、削除が 1 件数分 | WSUS 入れ直し + SUP 再構築 | 削除での完走が現実的でない。復旧最短 |
| WSUS を SCCM の SUP 専用で利用 | WSUS 入れ直しが特に有効 | WSUS 側の承認運用を捨てやすい |
| WSUS をスタンドアロンでも使っている | DB メンテ + 段階クリーンアップ | 承認やグループなどの運用情報が消える影響が大きい |
| 変更作業の停止時間が取れない | DB メンテ + 小分け削除 | 入れ直しのほうが停止時間を要することがある |
| 将来も同様の放置運用になりがち | 入れ直し後に定期メンテを組み込む | 一度直しても再発するため、運用設計が重要 |
再発防止:WSUS メンテナンスを「作業」ではなく「運用」にする
今回のような「未使用更新が溜まりすぎて同期停止」は、突発障害というより運用負債です。入れ直しで復旧しても、放置すれば同じことが起きます。再発防止のコツは、WSUS メンテを年 1 回の大掃除ではなく、定期ルーチンに落とすことです。
おすすめの運用サイクル
| 頻度 | やること | 狙い |
|---|---|---|
| 毎月 | 製品/分類/言語の棚卸し(不要を増やさない) | メタデータ肥大を抑える |
| 毎月〜隔月 | 置き換え済み更新の整理(Decline の方針を決める) | 不要更新の増殖を止める |
| 毎月〜四半期 | WSUS DB の再インデックス/統計更新 | 同期・検索・削除を重くしない |
| 毎月 | クリーンアップ(小分けで確実に) | 一度に詰まらないようにする |
定期運用で効く「絞り込み」の考え方(SCCM 連携を前提に)
- 本当に配布する製品だけ:テスト目的で一度入れた製品をそのままにしない
- 分類は増やしすぎない:特にドライバー系は運用方針がないなら避ける
- 言語は必要最小限:全言語は DB とコンテンツの肥大化を加速する
- SUP の役割を明確化:WSUS で「承認運用」をしない(SCCM に寄せる)
よくある質問
WSUS を入れ直すと SCCM 2012 は壊れませんか?
通常、WSUS は SUP の構成要素として動いているため、手順どおりにWSUS を再インストール → SUP を再構築 → 再同期を行えば、SCCM 本体を破壊する行為ではありません。ただし、SUP の再構成が必要で、同期が完了するまでは更新運用が止まる(または不安定になる)点は織り込む必要があります。
SQL の削除を速くする裏技はありますか?
「魔法の 1 手」で何万件削除が一気に速くなることは期待しにくいです。現実的には、DB の再インデックス(断片化解消)→ 小分け削除で “まだ回る状態” に戻すか、復旧優先なら入れ直しに切り替えるのが最短です。すでに 1 件数分レベルで詰まっているなら、後者が現場的に勝ちやすい判断になります。
入れ直した後、また同じことになりそうで不安です
不安があるなら、復旧と同時に「月 1 の WSUS メンテ」を運用に組み込むのが最も効果があります。やることは難しくなく、「絞り込み」「小分けクリーンアップ」「定期 reindex」の 3 点を回すだけで、同期停止級のトラブルは起きにくくなります。
まとめ:長年放置で同期が止まった WSUS は、入れ直しが最短ルートになりやすい
SCCM 2012 + WSUS の環境で、不要更新が大量に溜まり、クリーンアップが失敗し、SQL の 1 件削除が数分かかる状態は、技術的に「掃除で直す」ことはできても、運用上は現実的な時間で終わらないことが多いです。復旧優先ならWSUS をアンインストールしてクリーンに再インストールし、SUP を作り直して再同期が、結果的にもっとも速く確実な解決策になります。再インストールが難しい場合は、DB メンテ(reindex)で土台を整え、クリーンアップを小分けにして確実に進めるのが次善策です。そして最後に、同じ事故を繰り返さないために、WSUS メンテナンスを定期運用として組み込みましょう。

コメント