-
Notifications
You must be signed in to change notification settings - Fork 0
MS_SQLServerBasicSettings
- 戻る(SQL Server)
- SQL Server の基本的な設定
- SQL Server の認証 / SQL Server の照合順序 / SQL Server での設定取得方法
ここでは、SQL Server 構築における一般的な設定と、
性能の向上につながる重要な「環境設定オプション」の設定と見込まれる効果について解説する。
-
SQL Server は、Windows Server(Windows 自動パラメタとチューニング(
MS_WindowsAutoTuning.md))と同様に、
既定のパラメータ設定で利用しても、大部分のユーザの負荷に対して適切に実行される。 -
ただし、高い負荷が長時間変化しないような場合、
サーバの設定をチューニングすることにより、性能が向上する可能性がある。 -
設定を誤ると、SQL Server が正しく動作しなくなるため、変更には注意が必要である。
- 設定を変更する場合は、最初にシステム データベースをバックアップすること。
- 設定の妥当性の確認には、性能検証テストや、運用テストが必要になる。
-
参考
- SQL Server 2000 チューニング全工程(1):
メモリの自動チューニング機能を完全に把握しよう (1/3) - @IT
http://www.atmarkit.co.jp/ait/articles/0407/31/news024.html
- SQL Server 2000 チューニング全工程(1):
SQL Server インスタンスのアドレス空間は、SQL Server インスタンスが使用している、
- 「実行コード」領域
- 「プール メモリ」領域
の 2 つの領域から構成される。
このうち、チューニング可能な領域は、「プール メモリ」領域である。
「プール メモリ」は、SQL Server によって、動的にサイズが変更される。
| 項番 | 領域名 | 役割 |
|---|---|---|
| 1 | システム レベルのデータ構造体 | DB 記述子、ロック、テーブルなどの、SQL Server インスタンスにグローバルなデータを保持するデータ構造体 |
| 2 | バッファ キャッシュ | データ ページが読み取られるバッファ |
| 3 | プロシージャ・キャッシュ | T-SQL の実行プランが入っているバッファ |
| 4 | ログ キャッシュ | ログ ページの読み書きに使用するキャッシュ。ログ バッファとデータ バッファの同期を減らすため、バッファ キャッシュとは別に管理される。 |
| 5 | 接続コンテキスト | 接続ごとに、「クエリやストアド プロシージャのパラメータ値」、「カーソル位置情報」、「現在参照されているテーブル」等の状態を記録するデータ構造体。 |

補足(最新化:「プール メモリ」という呼称): 本文の「プール メモリ」は
SQL Server 2000 世代の用語で、現在のドキュメントでは
バッファ プールおよびメモリ クラークという枠組みで説明される。
また、SQL Server 2012 以降は
max server memoryがバッファ プール以外の領域も含むようになり、
それ以前より広い範囲を制御する設定に変わっている。
現在の実使用量は以下で確認できる。SELECT (physical_memory_in_use_kb / 1024) AS physical_memory_in_use_mb, (locked_page_allocations_kb / 1024) AS locked_pages_mb, process_physical_memory_low, process_virtual_memory_low FROM sys.dm_os_process_memory; SELECT TOP 10 type, SUM(pages_kb) / 1024 AS mb FROM sys.dm_os_memory_clerks GROUP BY type ORDER BY mb DESC;
設定可能な「環境設定オプション」の「設定可能範囲」、「設定値」を確認するには、
以下を使用する。
SSMS(MS_SSMS.md)
| 項番 | 種類 | 略号 | 説明 |
|---|---|---|---|
| 1 | 拡張オプション | A | このオプションを変更する場合は、SQL Server に詳しい技術者に確認する。 参照や設定をする場合は show advanced options を 1 に設定する必要がある。 |
| 2 | 再起動オプション | RR | 設定を有効にするには SQL Server インスタンスを再起動する必要がある。 |
| 3 | 自己設定オプション | SC | SQL Server がシステムのニーズに合わせて自己設定する。 |
sp_configure '<option name>'
-
「SSMS(
MS_SSMS.md)」などを使用してsp_configureを呼び出し、
「環境設定オプション」を参照する。 -
パラメータを指定せずに実行した場合、
sp_configureは、
次に示す「環境設定オプション」の情報を、
オプション名のアルファベットの昇順に並べて返す。 -
sp_configureで出力される情報
| 項番 | 列名 | データ型 | 説明 |
|---|---|---|---|
| 1 | name | nvarchar(70) | 環境設定オプションの名前 |
| 2 | minimum | int | 環境設定オプションの最小値 |
| 3 | maximum | int | 環境設定オプションの最大値 |
| 4 | config_value | int |
sp_configure で設定した環境設定オプションの値 |
| 5 | run_value | int | 現在実行中の環境設定オプションの値 |
sp_configure '<option name>', <value>
-
sp_configureを呼び出し、「環境設定オプション」を変更する。 - 変更後、
RECONFIGUREステートメントを実行していない場合、
変更結果が即時反映されない(config_valueと、run_valueが異なる)。 - 即時反映させるためには、
RECONFIGUREステートメントを使用する(run_valueを更新する)。 - 「環境設定オプション」によっては、設定変更後、SQL Server インスタンスを
再起動しないと、現在実行中の値(run_value)を更新できないものがあるため注意が必要である。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure
GO「拡張オプション」の設定を表示または変更するには、
show advanced options オプションを 1(有効)に設定する必要がある。
- このオプションは、既定では 0(無効)に設定されている。
- 必要に応じて
show advanced optionsオプションを 1(有効)にする。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure
GO確保する「プール メモリ(ページングされるメモリ、仮想記憶のメモリ)」の最大値を設定する。
値が「物理メモリ」のサイズを超える場合、実際に確保される「プール メモリ」は、
「物理メモリ」の最大値に自動調整される。
- 既定値 : 2,147,483,647(MB)
- 既定値の場合、DB サーバに搭載されている全ての「物理メモリ」に合わせて、
SQL Server インスタンスは可能な限りの「プール メモリ」を確保する。 - このため、他のアプリケーションが「物理メモリ」を必要としている時には、
ページングにより他のアプリケーションに「物理メモリ」を割り当てる。
- 既定値の場合、DB サーバに搭載されている全ての「物理メモリ」に合わせて、

-
サーバ種類
-
SQL Server 専用の DB サーバの場合
既定値の設定を使用する。 -
DB サーバが SQL Server 専用でない場合
(他のアプリケーションまたは、他の SQL Server インスタンスが
定期的に「物理メモリ」を必要とする場合)- 他のアプリケーションまたは、他の SQL Server インスタンスの使用する
「物理メモリ」が不足しないように、当該 SQL Server インスタンスの、
max server memoryオプションの設定を変更する。 - DB サーバに搭載されている全ての「物理メモリ」の合計から、
他のアプリケーションに必要な「物理メモリ」を引いて、
SQL Server インスタンスが確保する「プール メモリ」の最大値を計算する。 - 他のアプリケーションに必要な「物理メモリ」は、
起動に必要な「物理メモリ」の量だけでなく、
ニーズの変化に対応できるように残す「物理メモリ」の量を考慮する。
- 他のアプリケーションまたは、他の SQL Server インスタンスの使用する
-
-
sp_configureによる設定
EXEC sp_configure 'max server memory', nnnn
RECONFIGURE
EXEC sp_configure
GOnnnn の単位は、MB で指定する。
- 現在の推奨値の目安(専用 SQL Server の場合)
| 物理メモリ | 推奨 max server memory | OS&他プロセスに残す目安 | 備考 |
|---|---|---|---|
| 16–32 GB | 物理メモリの 75–85% | 4–6 GB | 小規模~中規模 |
| 32–64 GB | 物理メモリの 80–88% | 6–10 GB | 最も多いゾーン |
| 64–128 GB | 物理メモリの 85–90% | 10–16 GB | - |
| 128 GB 以上 | 物理メモリの 88–92% | 16–24 GB 以上 | 大規模環境 |
補足(専用サーバでも既定のままにしない): 本文には
「SQL Server 専用の DB サーバの場合、既定値の設定を使用する」とあるが、
上の推奨値の表のとおり、専用サーバでもmax server memoryは明示設定する
のが現在の定石である。既定値(無制限)のままだと、
- OS 自身やバックアップ エージェント、監視エージェントが
メモリ不足に陥り、SQL Server のワーキング セットが
ページ アウトされて劇的に遅くなる- 複数インスタンスを同居させている場合に取り合いになる
といった問題が起きうる。
併せて、SQL Server のサービス アカウントに
**「メモリ内のページのロック」**権限を付与しておくと、
OS によるページ アウトを防げる。
確保する「プール メモリ(ページングされるメモリ、仮想記憶のメモリ)」の最小値を設定する。
min server memory オプションを 1GB に設定しても、
SQL Server が自動的に 1GB の「物理メモリ」を取得するわけではない。
その時々のサーバの負荷に基づいて、必要に応じて割り当てられる。
- 既定値 : 0(MB)
- 既定値の場合、他のアプリケーションが「物理メモリ」を必要として、
ページングが発生している場合、動的に確保した「プール メモリ」を解放する。
- 既定値の場合、他のアプリケーションが「物理メモリ」を必要として、

-
サーバ種類
-
SQL Server 専用の DB サーバの場合
既定値の設定を使用する。 -
DB サーバが SQL Server 専用でない場合
(他のアプリケーションまたは、他の SQL Server インスタンスにより
「物理メモリ」を奪われ、当該 SQL Server の使用する「物理メモリ」が
不足する可能性がある場合)- 「物理メモリ」が不足しないように、当該 SQL Server インスタンスの、
min server memoryオプションの設定を変更する。 - 例えば、サーバが SQL Server の DBMS 機能と、印刷とファイル サービス機能を
提供する場合、印刷とファイル サービス機能に「物理メモリ」を消費され、
SQL Server 用の「物理メモリ」が不足し、応答時間が遅くならないようにする。
- 「物理メモリ」が不足しないように、当該 SQL Server インスタンスの、
-
-
sp_configureによる設定
EXEC sp_configure 'min server memory', nnnn
RECONFIGURE
EXEC sp_configure
GOnnnn の単位は、MB で指定する。
-
max server memoryオプションとmin server memoryオプションを同じ値に設定する。 - これにより、設定したサイズまで確保した「プール メモリ」を、その後、解放しないようになる。
- DB サーバが SQL Server 専用でない場合
SQL Server インスタンスで確保する「プール メモリ」を固定し、
他の「物理メモリ」が不足しないように、この設定を適用する。- 当該 SQL Server の使用する「物理メモリ」
- 他のアプリケーションまたは、他の SQL Server インスタンスの使用する「物理メモリ」
補足(固定は仮想化環境で特に有効): 仮想マシン上の SQL Server では、
ハイパーバイザ側の動的メモリ(バルーニング)と
SQL Server 側の動的確保がぶつかると性能が不安定になる。
仮想マシンのメモリを固定し、max=minで SQL Server 側も固定する
のが安定運用の定石である
(仮想化アーキテクチャ参照)。
SQL Server の障害復旧を参照。
データ ファイルの圧縮と拡張(MS_DataFileShrinkAndGrow.md)
補足(最新化:まず確認したい構成オプション): 元ページはメモリ設定を
中心に構成されているが、現在の新規構築で併せて確認すべき項目を挙げておく。
オプション 既定 推奨と理由 max degree of parallelism0(無制限) OLTP では NUMA ノードあたりの論理コア数(最大 8)を目安に cost threshold for parallelism5 25〜50。既定値は 1990 年代基準で小さすぎる optimize for ad hoc workloads0 1。1 回しか実行されないアドホック クエリでプラン キャッシュが埋まるのを防ぐ backup compression default0 1。バックアップ時間とサイズを削減(CPU は増える) remote admin connections0 1。緊急時に DAC でリモート接続できるようにする xp_cmdshell0 0 のまま。有効化は攻撃面を大きく広げる blocked process threshold0 一時的に 5〜20 秒に設定してブロッキング レポートを採取(SQL Server でのロック・タイムアウト) SQL Server 2016 以降は、DB 単位で調整できる
ALTER DATABASE SCOPED CONFIGURATION(MAXDOP、レガシー基数推定、
パラメータ スニッフィングの無効化など)もあるため、
インスタンス全体を変えずに済むケースが増えている。
- SQL Server の認証
- SQL Server の照合順序
- SQL Server の障害復旧
- SQL Server での設定取得方法
- つながらない!- SQL Server(つながらない!)
- DOsDONTs – Microsoft SQL Server Japan Support Team Blog
https://learn.microsoft.com/ja-jp/archive/blogs/jpsql/
-
(1):メモリの自動チューニング機能を完全に把握しよう
http://www.atmarkit.co.jp/fdb/rensai/sqlstune01/sqlstune01_1.html -
(2):動的ディスク管理でのチューニングポイント
http://www.atmarkit.co.jp/ait/articles/0409/25/news011.html -
(3):速報! SQL Server 2005 のデータパーティション
http://www.atmarkit.co.jp/ait/articles/0411/30/news113.html -
(4):SQL Server のインデックス構造(前編)
http://www.atmarkit.co.jp/ait/articles/0501/18/news097.html -
(5):SQL Server のインデックス構造(後編)
http://www.atmarkit.co.jp/ait/articles/0503/18/news123.html
-
(1)パフォーマンスを語るために歴史を語ろう
http://www.atmarkit.co.jp/fdb/rensai/10_drk/01/drk01.html -
(2)CAT 秘伝、バランスド・システムの考え方
http://www.atmarkit.co.jp/fdb/rensai/10_drk/02/drk01.html -
(3)内部動作を知らずしてチューニングは語れない
http://www.atmarkit.co.jp/fdb/rensai/10_drk/03/drk01.html -
(4)DB 管理者がいますぐ確認すべき 3 つの設定
http://www.atmarkit.co.jp/fdb/rensai/10_drk/04/drk01.html- その1:tempdb の数を CPU コア数にあわせよ
- その2:x64 環境なら「メモリ内のページロック指定」を変えよ
- その3:OLTP では、並列処理の最大限度(Max DOP)は CPU コア数の「4 分の 1」に設定せよ
-
(5)64 ビット時代の「バランスド・システム」
http://www.atmarkit.co.jp/fdb/rensai/10_drk/05/drk01.html -
(6)キャッシュを無駄遣いしないようにクエリを書く
http://www.atmarkit.co.jp/fdb/rensai/10_drk/06/drk01.html
元ページには全 69 個の構成オプションの一覧(最小値・最大値・既定値)が
掲載されていたが、値がバージョンによって変わるため、
本ページでは特に重要なものに絞って掲載する。
網羅的な一覧は上記の公式ドキュメント、または
SELECT * FROM sys.configurations ORDER BY name; で確認すること。
| 構成オプション | 種類 | 最小 | 最大 | 既定 |
|---|---|---|---|---|
show advanced options |
- | 0 | 1 | 0 |
max server memory (MB) |
A、SC | 16 | 2147483647 | 2147483647 |
min server memory (MB) |
A、SC | 0 | 2147483647 | 0 |
recovery interval (min) |
A、SC | 0 | 32767 | 0 |
max degree of parallelism |
A | 0 | 32767 | 0 |
cost threshold for parallelism |
A | 0 | 32767 | 5 |
optimize for ad hoc workloads |
A | 0 | 1 | 0 |
backup compression default |
- | 0 | 1 | 0 |
blocked process threshold (s) |
A | 0 | 86400 | 0 |
fill factor (%) |
A、RR | 0 | 100 | 0 |
max worker threads |
A | 128 | 32767 | 0(自動) |
remote admin connections |
- | 0 | 1 | 0 |
user connections |
A、RR、SC | 0 | 32767 | 0(無制限) |
nested triggers |
- | 0 | 1 | 1 |
clr enabled |
- | 0 | 1 | 0 |
xp_cmdshell |
A | 0 | 1 | 0 |
移行メモ(旧バージョン専用のオプション): 元の一覧に含まれていた
allow updates/open objects/set working set size/
affinity mask系 /priority boost/lightweight poolingなどは、
非推奨または旧バージョン専用であり、現在は使用しない
(priority boostとlightweight poolingは
有効化すると不安定になるため特に触らないこと)。
affinity mask系はALTER SERVER CONFIGURATION SET PROCESS AFFINITYに
置き換えられている。
Tags: 移行, データアクセス, SQL Server
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。