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

引用・参考文献

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

タグ「SQL Server」を含む最近の記事