【SQL Server】統計情報の更新がめちゃ重い

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【SQL Server】統計情報の更新がめちゃ重い

2022-9-9 | ,

ある日突然、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#のガベージコレクションの問題と似たものを感じる。

引用・参考文献

下記のページを参考にさせていただきました。ありがとうございました。