Upload
masayuki-ozawa
View
13.726
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
SQL Server よく聞く設定とその効果
小澤 真之 (@Masayuki_Ozawa)
http://engineermemo.wordpress.com
自己紹介
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 2
SQLTO の運営スタッフ
現在、フリーランスのエンジニアとして活動中 お仕事がありましたらお声がけいただけると生活に潤いができて嬉しいです
SE の雑記というブログ (http://engineermemo.wordpress.com) を公開しています。 SQL Server を中心とした Microsoft 製品の検証結果を誤字 / 脱字を交えながら、気ままに公開しています
SNS のアカウント Twitter : @Masayuki_Ozawa
Facebook :masayuki.ozawa
本日の Agenda
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 3
ファイルの瞬時初期化
メモリ内のページのロック
データファイルの分割
本日の Agenda
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 4
ファイルの瞬時初期化
メモリ内のページのロック
データファイルの分割
ファイルの瞬時初期化
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 5
どこで設定する??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 6
グループポリシー (またはローカルセキュリティポリシー) で設定
SQL Server のサービスアカウントに [ボリュームの保守タスクを実行] を付与
デフォルトでは Administrators グループのみが設定されている
(Local System は権限が付与されている)
設定の確認
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 7
Process Explorer で [sqlservr.exe] の情報を表示して、[SeManageVolumePrivilege] が有効になっているかを確認 データベース ファイルの初期化
http://msdn.microsoft.com/ja-jp/library/ms175935.aspx
Process Explorer : http://technet.microsoft.com/ja-jp/sysinternals/bb896653.aspx
設定をするとどのような効果が??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 8
ファイルの瞬時初期化 (Instant File Initialization) が使用できるようになる
設定をした場合、データファイルのサイズ変更時のゼロ埋め (Zeroing) が発生しなくなるため瞬時にサイズの変更が可能となる 設定はデータファイル (mdf / ndf)にのみ有効
ログファイル (ldf) は瞬時初期化を有効にしてもゼロ埋めが発生する
効果が見れる操作 データベースの作成
データファイルのサイズ変更 (手動拡張 / 自動拡張)
データベースのリストア
ゼロ埋め
設定なし 設定あり
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 9
データファイル
ログファイル
データファイル
ログファイル
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
データベースリストアと瞬時初期化の影響
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 10
ロールフォワードの実施
リストアの実施
データファイルのゼロ埋め
ログファイルのゼロ埋め
瞬時初期化で スキップできる
効果が見れる操作 • データベースの作成 • データファイルのサイズ変更 • データベースのリストア
ゼロ埋めは何のためにしている??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 11
主にセキュリティ面を考慮しての動作 削除したはずの内容 (データファイルを格納していたディスク内に以前存在していたデータ) を公開されることを防ぐ
Books Online (BOL) のデータベース ファイルの初期化の内容 “削除されたディスクの内容は、新しいデータがファイルに書き込まれるときにのみ上書きされるため、許可されていないプリンシパルがこの削除された内容にアクセスする可能性があります。”
WinHex : http://www.x-ways.net/winhex/
設定有無で SQL Server の起動は早くなる??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 12
temdb は SQL Server の起動のたびに初期化がされる 瞬時初期化を設定することによる起動への影響は??
SQL Server 2008 R2 SP1 / SQL Server 2012 CU2 で検証してみたところ、tempdb のデータファイルが再作成されるのは、[データファイルが存在しなかった場合] のようで、既にファイルが存在している場合はゼロ埋めを伴うファイルの新規作成は実施されないようである ただし、ファイルの新規作成がされないだけで tempdb は起動のたびに初期化されますので混同しないようにお願いします
リストアも同様だが、データファイルが既に存在しているかどうかで瞬時初期化の処理に影響がでてくる データファイルのサイズを大きくするかどうかも影響しているようですのでリストア時間の計測をする際には注意が必要
ファイルの瞬時初期化関係の TF
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 13
ファイルの瞬時初期化関係のトレースフラグ (TF) トレースフラグ 効果
-T1806 瞬時初期化を無効化
-T3004 -T3605
ゼロ埋め発生時の情報をログ (ERRORLOG) に出力
Zeroing G:¥SQL2012¥TEST_log.ldf from page 0 to 6400 (0x0 to 0x3200000) Zeroing E:¥SQL2012¥TEST.mdf from page 0 to 25600 (0x0 to 0xc800000) Zeroing completed on G:¥SQL2012¥TEST_log.ldf Zeroing completed on E:¥SQL2012¥TEST.mdf Starting up database 'TEST'. FixupLogTail(progress) zeroing G:¥SQL2012¥TEST_log.ldf from 0x5000 to 0x6000. Zeroing G:¥SQL2012¥TEST_log.ldf from page 3 to 483 (0x6000 to 0x3c6000) Zeroing completed on G:¥SQL2012¥TEST_log.ldf
ゼロ埋めのログ (ERRORLOG)
トレースフラグの設定
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 14
SQL Server 構成マネージャーの起動時の パラメーターで –T<数値> で設定
デモ環境
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 15
ThinkPad X201 CPU : Core i3 HD : 500GB Memory : 8GB OS : Windows Server 2012 RC (Release Candidate)
ゲスト OS (Hyper-V 3.0) CPU : 2 コア Memory : 4GB OS : Windows Server 2012 RC RDBMS : SQL Server 2012 SP1 CTP3
Minimum version requirements when you install SQL Server on Windows Server 2012 Release Candidate or on Windows 8 Release Preview
http://support.microsoft.com/kb/2681562
Demo ゼロ埋め発生時のログ出力
ファイルの瞬時初期化の有無による処理の違い
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 16
参考 : 瞬時初期化についての技術情報
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 17
データベース ファイルの初期化
http://msdn.microsoft.com/ja-jp/library/ms175935.aspx
How and Why to Enable Instant File Initialization
http://blogs.msdn.com/b/sql_pfe_blog/archive/2009/12/23/how-and-why-to-enable-instant-file-initialization.aspx
How It Works: What is Restore/Backup Doing?
http://blogs.msdn.com/b/psssql/archive/2008/01/23/how-it-works-what-is-restore-backup-doing.aspx
本日の Agenda
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 18
ファイルの瞬時初期化
メモリ内のページのロック
データファイルの分割
メモリ内のページのロック (Lock Page in Memory)
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 19
どこで設定する??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 20
グループポリシー (またはローカルセキュリティポリシー) で設定 SQL Server のサービスアカウントに [メモリ内のページのロック] を付与
デフォルトでは設定されていない (Local System は権限が付与されている)
参考 : バージョンによる注意点
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 21
SQL Server 2008 R2 までの Standard Edition では以下の技術情報の対応が必要 TF845 を設定する Support for Locked Pages on SQL Server 2008 R2 Standard Edition x64, on SQL
Server 2005 Standard Edition 64-bit systems, and on SQL Server 2008 Standard Edition 64-bit systems http://support.microsoft.com/kb/970070/en-us
SQL Server 2012 では上記対応は不要 How to enable the "locked pages" feature in SQL Server 2012
http://support.microsoft.com/kb/2659143/en-us
max server memory と併用して、SQL Server が確保可能な上限値を設定するのが推奨 Lock Pages in Memory ... do you really need it?
http://blogs.technet.com/b/askperf/archive/2008/03/25/lock-pages-in-memory-do-you-really-need-it.aspx
設定の確認 (1/2)
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 22
Process Explorer で [sqlservr.exe] の情報を表示して、[SeLockMemoryPrivilege] が有効になっているかを確認 Lock Pages in Memory オプションの有効化 (Windows)
http://msdn.microsoft.com/ja-jp/library/ms190730.aspx
設定の確認 (2/2)
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 23
SQL Server の ERRORLOG に以下の行が出力されていることを確認
Using locked pages in the memory manager.
参考 : 3 種類のメモリモデル
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 24
AWE モデル メモリ内のページのロックを設定
Using locked pages in the memory manager.
Using conventional memory in the memory manager.
Using large pages in the memory manager.
従来モデル
メモリ内のページのロックを設定しない
ラージページモデル AWE モデルの設定 + 物理メモリ 8GB 超え + TF834
トレースフラグ 効果
-T834 ラージページを有効にする
-T835 AWE モデルを無効化
x64 の場合 • Small Page : 4KB • Large Page : 2MB
設定をするとどのような効果が??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 25
設定することでSQL Server のバッファプールのメモリをロックしたページとして取得し、バッファプールをページングの対象外にする
SQL Server と他のミドルウェアが共存しているときに、SQL Server で使用しているメモリ (バッファプール) のページアウトを抑制する
ワーキングセットのトリミングを発生を防ぐ DO’s&DONT’s #12: やった方がいいこと - max server memory を設定する
http://blogs.msdn.com/b/jpsql/archive/2012/02/06/do-s-amp-dont-s-12-max-server-memory.aspx
SQL Server で一定のメモリを確保しておきたい / SQL Server 専用のサーバーで設定することが多い
ワーキングセットのトリミング??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 26
他のプロセス (SQL Server 以外のプロセス) がメモリが必要となった時に、SQL Server が使用しているメモリをページアウトして、他のプロセスがメモリを確保できる状態にする
詳しくは SQLTO の兄貴 (@elanlilac) のブログ参照
SQL Server プロセスのワーキングセットのトリミング
http://elan.blog.so-net.ne.jp/2010-08-17
ワーキングセットのトリミング
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 27
サーバーの 物理メモリ 使用状況
SQL Server
他のプロセス SQL Server
他のプロセス
SQL Server メモリの一部をページアウト
参考 : ワーキングセットのトリミング発生時のイベント
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 28
ログの種類 : アプリケーション ソース : MSSQLSERVER イベント ID : 17890
使用メモリを確認する際の注意
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 29
Lock Page in Memory を有効にするとワーキングセットではなくロックされたページとしてメモリが取得されるため、タスクマネージャーからメモリの確認はできなくなる
設定後はパフォーマンスモニターの SQL Server のカウンターや DMV で使用しているメモリを確認する sqlservr.exe のプロセスの Working Set ではなく、SQL Server 固有のカウンターで使用しているメモリを確認する SQL Server:Memory Manager¥Total Server Memory (KB)
sys.dm_os_process_memory
参考 : タスクマネージャーでメモリを確認
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 30
AWE モデル / ラージページモデルを 使用している場合、表示されている メモリでは正確なメモリ使用量を
把握できない
Demo 設定有無によるメモリ使用状況の確認方法の違い
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 31
本日の Agenda
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 32
ファイルの瞬時初期化
メモリ内のページのロック
データファイルの分割
データファイルの分割
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 33
どこで設定する??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 34
SQL Server Management Studio (SSMS) で設定
データファイルを 4 個で構成 (mdf : 1 / ndf 3)
設定をするとどのような効果が??
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 35
ディスク I/O の分散 データファイルを異なるディスク (物理ディスク / 論理ドライブ) に分散させて格納することで I/O を分散させることができる。
ログファイルは特定のファイルにシーケンシャル (順次) 書き込みをするため、複数のファイルを異なるディスクに配置しても I/O 分散の効果はない
データファイルのサイズを均等にすることがポイント SQL Server はデータファイルの空き領域に応じて使用するファイルを決めるため、ファイルサイズが均等でないと特定のファイルに I/O が集中し、分散した効果が薄くなる データ書き込みの分散 / データ読み込みの分散
参考 : SAP のベストプラクティスで見るファイル数
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 36
Small sized systems: 4 data files. Systems usually run on dedicated database servers which have between 4 and
8 CPU cores.
Medium sized systems: 8 or 16 data files. Systems usually run on dedicated database servers which have between 8 and
16 CPU cores.
Large sized systems: A minimum of 16 data files and maximum of 32. Systems which today run on hardware between 16 and 32 CPU cores or up to
64 threads.
Xtra large sized systems: 32 Datafiles for systems with 32 to 256 cores (Contact Microsoft for very large >15TB databases)
Frequently Asked Questions we heard on the SAP on SQL 2008 Training course this year http://blogs.msdn.com/b/saponsqlserver/archive/2010/06/28/frequently-asked-questions-we-heard-on-the-sap-on-sql-2008-
training-course-this-year.aspx
サイズが均等でない場合の I/O
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 37
DEMODB2 : 400MB それ以外 : 100MB
DEMODB2 の書き込みが他のファイルより多い
サイズが均等の場合の I/O
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 38
すべてのファイル : 100MB
各ファイルに均等に 書き込み
ファイルサイズと I/O
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 39
ファイルグループ ログファイル
データ挿入 データ更新
線の太さ : I/O の量
Demo ファイルサイズによる I/O の偏り
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 40
自動拡張時の注意
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 41
ファイルの自動拡張が発生するとデフォルトの設定では、特定のファイルのみが拡張され、拡張以降は I/O の分散の効果が薄れてしまう。
TF1117 を設定することで、自動拡張が発生した場合、ファイルグループ内の全ファイルを拡張することができる。
ファイルの均等拡張
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 42
トレースフラグを設定していない場合
トレースフラグを設定している場合
拡張前 拡張後
拡張前 拡張後
Demo トレースフラグによる自動拡張の違い
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 43
本日お話させていただいた内容
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 44
ファイルの瞬時初期化
メモリ内のページのロック
データファイルの分割
2012/08/04 SQLTO 第 5 回勉強会 http://www.sqlto.net 45
FAQ