【SQL Server】統計情報の更新がめちゃ重い
2022-9-9 | SQL, SQL Server
ある日突然、SQL Serverがめちゃ重くなってWEBサービスがグルグル状態になった。そして、いつの間にか元に戻る。
概要
今回の記事では、いきなりSQL Serverがめちゃ重くなる原因と対策について掲載する。
仕様書
環境
- SQL Server 15.0.2095
原因
統計情報の自動更新に時間がかかってる模様。テーブルの内容がある程度(20%)以上更新されると自動更新が発動するみたい。
ユーザーがサービスを利用してる時間帯に自動更新が行われないよう、ユーザーが利用してない時間帯(例えば深夜)に手動で統計情報を更新するようにする。
手順書
統計情報を更新するクエリ(update_statistics.sql
)を作成する。
sp_updatestats;
USE [<database_name>]
UPDATE STATISTICS <table_name> WITH FULLSCAN;
GO
sp_updatestats;
で全てのテーブルの統計情報を更新する。ただしこのコマンドではすべてのレコードがスキャンされないので、頻繁に更新が行われるテーブルに対しては、テーブル毎にUPDATE STATISTICS <table_name> WITH FULLSCAN;
でフルスキャンを行う。
クエリを実行するバッチファイル(update_statistics.bat
)を作成する。
@echo off
sqlcmd -S <instance_name> -U <user_name> -P <password> -i "update_statistics.sql"
<instance_name>
は例えばローカルのデータベースならlocalhost\SQLEXPRESS
のように設定する。
このバッチファイルをタスクスケジューラーで定期的に実行されるよう設定する。
まとめ(感想文)
C#のガベージコレクションの問題と似たものを感じる。
引用・参考文献
下記のページを参考にさせていただきました。ありがとうございました。