sql server 構築 運用 tips
TRANSCRIPT
SQL Server 構築/運用 Tips
Masayuki Ozawa
自己紹介
System Center User Group Japan 12第 回勉強会2
フリーランスエンジニアとして SQL Server の案件を中心に従事しています 案件等で協力できることがありましたらお声掛けいただけると幸いです
「SQL Server 現状診断」による SQL Server 稼働状況の報告書作成 SQL Server に関してのオンサイト / オフサイトでの技術支援
コミュニティやブログで SQL Server の情報を発信 コミュニティ活動 SQL Server : SQLTO (http://sqlto.net)Azure : JAZUG (http://r.jazug.jp/)
ブログ : SE の雑記 (http://blog.engineer-memo.com) Twitter : @Masayuki_Ozawa
2015/04/18
本日の Agenda
2015/04/18System Center User Group Japan 12第 回勉強会3
シングルインスタンスの基本的な構成を例とした Tipsクラスター等の環境は対象外です
SQL Server 構築 TipsSQL Server 運用 Tips
SQL Server 構築 Tips
2015/04/18System Center User Group Japan 12第 回勉強会4
使用する SQL Server の言語
2015/04/18System Center User Group Japan 12第 回勉強会5
インストールする SQL Server の言語 英語版はすべての言語でインストールが可能 それ以外の言語ローカライズされた OS (例 : 日本語版) MUI (例 : 日本語言語パック)をインストールした英語版 OS
SQL Server の言語の差による機能差は基本的にないが… CU で追加された SSMSの機能が英語版でないと動作しないケースが稀にある 例 : SQL Server 2014 CU5 の SQL Database v12 の GUI 対応
SQL Server のローカル言語版https://msdn.microsoft.com/ja-jp/library/ee210665.aspx
インストールパラメーター
2015/04/18System Center User Group Japan 12第 回勉強会6
インストール時には構成ファイル (ConfigurationFile.ini)が内部で自動作成されている C:¥Program Files¥Microsoft SQL Server¥120¥Setup Bootstrap¥Log
無応答セットアップ / 他の環境でどのようにインストールされたかを確認する場合に利用できる
インストール時に意識しておきたいポイント
2015/04/18System Center User Group Japan 12第 回勉強会7
.NET Framework 3.5 インターネット非接続環境では、OS インストールメディアを代替ソースパスに指定
インストールパス インスタンスルートディレクトリ : SQL Server のバイナリをインストールするディレクトリ
バージョンによっては、ベアメタル回復用のバックアップで上記ディレクトリが含まれる 共有機能ディレクトリ : SSMS 等の共有機能のバイナリをインストールするディレクトリ データルートディレクトリ : システムデータベース / ERRORLOG / SQL Server Agent ログが出力される
インスタンス 既定のインスタンス (TCP:1433) 名前付きインスタンス (動的ポート)
SQL Server Browser サービスは動的ポートを解決するためのサービス (UDP:1434)
照合順序 製品のよっては特定の照合順序を使用する必要がある
日本語版 OS (システムロケール : 日本語) のデフォルトは Japanese_CI_AS 英語版 OS のデフォルトは SQL_Latin1_General_CP1_CI_AS
照合順序
2015/04/18System Center User Group Japan 12第 回勉強会8
内容の照合 (文字列の比較 / ソート)や非 Unicode データの文字コードを指定する設定 照合順序が異なると列の評価 (結合等)でエラーとなるケースがある
サーバー (インスタンス) レベルの照合順序 インストール時にのみ設定可能
変更するためにはシステムデータベースの再構築が必要 システムデータベース (master/model/msdb/tempdb) の照合順序に利用される
サーバーの照合順序の設定または変更 https://technet.microsoft.com/ja-jp/library/ms179254(v=sql.120).aspx
データベースレベルの照合順序 ユーザーデータベース個別に設定が可能 SQL Server 2012 以降は包含データベースにより、一時オブジェクトを tempdb の照合順序ではなくユーザーデータベースの照合順序で利用可能
列レベルの照合順序 特定の列のみ大文字 / 小文字を区別するというような指定が可能
照合順序の影響の解消
2015/04/18System Center User Group Japan 12第 回勉強会9
SQL Server 2012 以降では、包含データベースを利用することで、インストール時の照合順序の影響を緩和 包含データベースの照合順序 https://msdn.microsoft.com/ja-jp/library/ff929080.aspx
アイテム 非包含データベース 包含データベースユーザー データ (既定値) DATABASE_DEFAULT DATABASE_DEFAULT 一時データ (既定値) TempDB の照合順序 DATABASE_DEFAULT メタデータ DATABASE_DEFAULT / CATALOG_DEFAULT CATALOG_DEFAULT 一時的なメタデータ tempdb の照合順序 CATALOG_DEFAULT 変数 インスタンスの照合順序 CATALOG_DEFAULT Goto ラベル インスタンスの照合順序 CATALOG_DEFAULT カーソル名 インスタンスの照合順序 CATALOG_DEFAULT
累積修正プログラム
2015/04/18System Center User Group Japan 12第 回勉強会10
2 か月単位で累積修正プログラム (Cumulative Update) が提供されている 構築時に、最新の CU を適用するかを検討する (4/16 時点の最新)
SQL Server 2014 SP1 ( Non SP の CU1 ~ CU5 の修正含む) SQL Server 2014 CU6 SQL Server 2012 SP2 CU5
SQL Release Services Blog http://blogs.msdn.com/b/sqlreleaseservices/
技術情報 SQL Server 2012
Non SP : KB2692828 / SP1 : KB2772858 / SP2 : 2983249 SQL Server 2014
Non SP / SP1 : KB2936603 英語版で確認しないと最新の修正プログラムが記載されていないことがあるので注意
ディスク構成
2015/04/18System Center User Group Japan 12第 回勉強会11
高負荷な SQL Serverではディスク構成も検討する パターン 1
E ドライブ : システムデータベース + ユーザーデータベース (データファイル) F ドライブ : ユーザーデータベース (ログファイル)
パターン 2 F ドライブ : システムデータベース F ドライブ : ユーザーデータベース (データファイル) G ドライブ : ユーザーデータベース (ログファイル)
パターン 3 E ドライブ : システムデータベース F ドライブ : tempdb G ドライブ : ユーザーデータベース (データファイル) H ドライブ : ユーザーデータベース (ログファイル)
ディスク性能の考慮の例
2015/04/18System Center User Group Japan 12第 回勉強会12
SQL Database を例とした性能の考慮 1 セッションで、連続した 10,000 件の単純 INSERT この時のトランザクションログの書き込み待ちの状態
DTU waiting_tasks_count wait_time_ms max_wait_time_ms signal_wait_time_ms 平均 処理時間
Basic 5 10,010 70,845 6,144 449 7.1 ミリ秒 1:13
S0 10 10,028 58,606 452 495 5.8 ミリ秒 1:03
S1 20 10,116 62,560 4,504 842 6.1 ミリ秒 1:03
S2 50 10,039 74,650 1,107 1838 7.4 ミリ秒 1:16
S3 100 10,010 65,998 1,513 414 6.6 ミリ秒 1:08
P1 100 47 146 268 4 - 0:18
P2 200 127 194 125 38 - 0:26
P3 1,000 31 98 8 2 - 0:22
ディスクの設定
2015/04/18System Center User Group Japan 12第 回勉強会13
アロケーションユニットサイズの推奨は 64KB fsutil fsinfo ntfsinfo <ドライブレター>
OLTP ではストライプサイズ 64KB / DWH 256KB を推奨
Azure Virtual Machines における SQL Server のパフォーマンスに関するベストプラクティス https://msdn.microsoft.com/ja-jp/library/azure/dn133149.aspx
SQL Server の設定
2015/04/18System Center User Group Japan 12第 回勉強会14
細かなパラメーターチューニングをしなくても、ある程度動作するそういう製品思想なので細かなパラメーター設定をしなくてもある程度の性能で動作する
一般的に変更する設定ローカルセキュリティーポリシー (secpol.msc)ユーザー権利の割り当て
SQL Server サーバー構成オプショントレースフラグ
DEMO
2015/04/18System Center User Group Japan 12第 回勉強会15
ローカルセキュリティポリシートレーフラグの設定
サービスアカウントの変更
2015/04/18System Center User Group Japan 12第 回勉強会16
サービスアカウントは必ずSQL Server 構成マネージャーから変更 MMCのサービス (Services.msc) からは実施しない
SQL Server構成マネージャーから変更しないと、サービスアカウントに適切な権限が付与されず、サービスが正常に起動しない恐れがある
SQL Server のサービス開始アカウントの変更 (SQL Server 構成マネージャー) https://msdn.microsoft.com/ja-jp/library/ms345578.aspx
SQL Server 2000 の SQL Enterprise Manager または SQL Server 2005 の SQL Server 構成マネージャを使用せずに SQL Server または SQL Server エージェントサービスのアカウントを変更する方法 https://support.microsoft.com/en-us/kb/283811/ja
サーバー名の変更
2015/04/18System Center User Group Japan 12第 回勉強会17
SQL Serverでは内部にサーバー名を保持しており、OSのサーバー名を変更する場合は SQL Serverとしてもサーバー名を変更する必要があるsp_dropserver <old_name>;GOsp_addserver <new_name>, local;GO
SQL Server のスタンドアロンインスタンスをホストするコンピューターの名前変更 https://technet.microsoft.com/ja-jp/library/ms143799.aspx
SQL Server 運用 Tips
2015/04/18System Center User Group Japan 12第 回勉強会18
通常運用
2015/04/18System Center User Group Japan 12第 回勉強会19
起動
バックアップ
データメンテナンス
監視
起動
2015/04/18System Center User Group Japan 12第 回勉強会20
正常に起動しない場合は、sqlservr.exeを最小構成オプション (-f) を使用して起動できるかを確認 データベースエンジンサービスのスタートアップオプション
https://msdn.microsoft.com/ja-jp/library/ms190737.aspx SQL Server のインスタンス (sqlservr.exe) を起動する方法
https://technet.microsoft.com/ja-jp/library/ms180965.aspx
ERRORLOGを確認することで起動時のログを確認することができる
DEMO
2015/04/18System Center User Group Japan 12第 回勉強会21
コマンドラインからの起動
バックアップ
2015/04/18System Center User Group Japan 12第 回勉強会22
復旧モデルに応じて適切なバックアップを設定する
完全と一括ログを使用する場合、定期的なログバックアップは必須 定期的なログバックアップを行わないとログファイルが肥大化する 初回の完全バックアップ以降にログが蓄積されていくので検証時は注意
本番環境での単純での運用は必ずしも悪いことではない バックアップ取得時点に復元できればよいのであれば単純で運用可能
復旧モデル 完全バックアップ 差分バックアップ ログバックアップ完全 ○ ○ ○一括ログ ○ ○ ○単純 ○ ○ -
DEMO
2015/04/18System Center User Group Japan 12第 回勉強会23
初回バックアップと復旧モデル
バックアップ間隔の例
2015/04/18System Center User Group Japan 12第 回勉強会24
パターン 1 完全バックアップ : 毎週 1 回 差分バックアップ : 完全バックアップを取得する曜日以外 ログバックアップ : 1 時間間隔
パターン 2 完全バックアップ : 毎日 1 回 ログバックアップ : 1 時間間隔
パターン 3 完全バックアップ : 毎日 1 回 パターン 3 は単純を使用している場合のみ適用可能
臨時バックアップの取得
2015/04/18System Center User Group Japan 12第 回勉強会25
バックアップチェーンを崩さないようにバックアップを取得
COPY_ONLY バックアップを使用することで、臨時バックアップを取得 コピーのみのバックアップ (SQL Server)
https://msdn.microsoft.com/ja-jp/library/ms191495.aspx
完全バックアップ差分バックアップ
差分バックアップ
臨時バックアップ
バックアップ圧縮の利用
2015/04/18System Center User Group Japan 12第 回勉強会26
SQL Server 2008 R2 以降は Standard Edition でバックアップ圧縮を利用することが可能 バックアップファイルのサイズ削減 バックアップ時間の削減 バックアップ中の CPU使用率の上昇
デフォルトの設定では明示的に圧縮を指定する必要がある
データメンテナンス
2015/04/18System Center User Group Japan 12第 回勉強会27
インデックスの断片化解消 再構成 : REORGANIZE オンラインで実施可能 既存のデータ領域を用いてデータを整列
再構築 : REBUILD Enterprise Edition の場合はオンラインで実施可能それ以外のエディションでは再構築中はオフラインとなる
新規のデータ領域に整列したデータを作成 Extent Scan Fragmentation の解消にもつながる
インデックスがどれくらいの期間で断片化するかを把握 例) 30 分で断片化するインデックスを 1 時間かけて解消する意味はあるか
データメンテナンス
2015/04/18System Center User Group Japan 12第 回勉強会28
統計情報 適切なクエリの実行プランを生成するためには、最新のデータを使用して十分なデータのサンプリングでの、統計情報の作成が必要となる
インデックスの再構築 (REBUILD) 時には 100% のサンプリングで統計情報が作成される
手動による統計情報の更新時にはWITH FULLSCANを使用しないと一定のサンプリングによる統計情報の作成となるので注意 UPDATE STATISTICS <テーブル名>(<インデックス名>) WITH FULLSCAN EXEC sp_updatestats 統計情報のサンプリングの確認 DBCC SHOW_STATISTICS ('<テーブル名>', '<インデックス名>')
DEMO
2015/04/18System Center User Group Japan 12第 回勉強会29
断片化の解消と統計情報の更新アプリケーション観点の情報取得 (スロークエリ)
メモリ使用量についての考慮
2015/04/18System Center User Group Japan 12第 回勉強会30
よくある監視 メモリの使用量が 90% を超えたら、監視でアラートを投げる
その監視、データベースサーバーでも有益ですか?? Max Server Memoryを設定して SQL Serverのメモリ割り当ての上限を指定
サーバーメモリに関するサーバー構成オプション https://msdn.microsoft.com/ja-jp/library/ms178067.aspx
データベースサーバーは可能な限りメモリにキャッシュする これを考慮して、メモリ使用量の監視を行う メモリ使用量が閾値を超えた→ さて、何をしましょう…。
ポート / サービス監視
2015/04/18System Center User Group Japan 12第 回勉強会31
ポート監視 既定のインスタンス : TCP 1433
TCP 1434 (データベース管理者用の診断接続 :DAC) 名前付きインスタンス : 動的ポート (起動のたびにポートが変わる)
SQL Server Browser (UDP 1434) は名前付きインスタンスのポート番号を解決するためのサービスであるため、既定のインスタンス / 名前付きインスタンスをポートを固定して、ポート番号指定で接続する場合は起動していなくても影響はない
サービス監視 既定のインスタンス : MSSQLSERVER 名前付きインスタンス : MSSQL$<インスタンス名> プロセスとしてはどちらも sqlservr.exe
可能であればサービスの正常起動の確認 例) SELECT 1 を定期的に実行
ERRORLOG
2015/04/18System Center User Group Japan 12第 回勉強会32
デフォルトでは 6 世代分作成される SQL Serverのサービスの起動時にローテーションされる 長期間起動しているサーバーでは ERRORLOGファイルが肥大化する
世代数は最大で 99 まで変更可能
手動でローテーションすることが可能 sp_cycle_errorlog (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms182512.aspx
SQL Server のエラーログの数を増やす方法 https://support.microsoft.com/en-us/kb/196909/ja
メンテナンスジョブのクリーンアップ
2015/04/18System Center User Group Japan 12第 回勉強会33
以下の情報のクリーンアップを検討する バックアップ情報 SQL Server エージェントジョブ履歴 メンテナンスタスクのログファイル
メンテナンスプランの履歴クリーンアップタスク / メンテナンスクリーンアップタスクを有効に活用する 履歴クリーンアップタスク
バックアップおよび復元の履歴 SQL Server エージェントジョブ履歴 メンテナンスプランの履歴
メンテナンスクリーンアップタスク バックアップファイル メンテナンスプランテキストレポート
まとめ
2015/04/18System Center User Group Japan 12第 回勉強会34
構築 構築時にしか設定できない設定できない項目を把握
インスタンスレベルの照合順序 ディスクのアロケーションユニットサイズ
サービスの再起動を伴う設定かどうかを考慮
運用 復旧モデルに応じた適切なバックアップ データメンテナンスの必要性 目的に適した監視が行える設定となっているか