SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Archive for 11月, 2010

あらためて SQL Server と /3GB スイッチ

leave a comment

最近は 64 ビット (x64) の OS を使う機会の方が多いと思いますが、あらためて 32 ビット (x86) の SQL Server のメモリチューニングについてまとめていきたいと思います。

今回は

  • Windows Server 2008 Datacenter Edition x86 SP2
  • SQL Server 2008 R2 Enterprise Evaluation x86
  • SQL Server Code Name ‘Denali’ Enterprise Evaluation x86
  • 4 CPU
  • 6GB Memory

の環境を使用しています。

■仮想アドレス空間の確認

32 ビット の SQL Server の場合、ユーザーモードの仮想アドレス空間 (VAS : Virtual Address Space) の最大サイズは通常 [2GB] となります。
image
SQL Server のユーザーモードの VAS ですが、SQL を実行して確認をするためには二種類の方法があります。

  1. DBCC MEMORYSTATUS を実行
  2. sys.dm_os_memory_nodes を参照

この 2 種類の方法で VAS の状態を確認することが可能です。

DBCC MEMORY STATUS については技術情報が提供されています。
DBCC MEMORYSTATUS コマンドを使用して SQL Server 2005 のメモリ使用量を監視する方法

sys.dm_os_memory_nodes に関しては BOL に情報が記載されています。
sys.dm_os_memory_nodes (Transact-SQL)

これらを使用することで SQL Server の VAS の情報を確認することができます。

DBCC MEMORYSTATUS  を実行するとこのような情報が取得できます。

Memory Manager                           KB
—————————————- ———–
VM Reserved                              1114756
VM Committed                             1048580
AWE Allocated                            0
Large Pages Allocated                    0
Emergency Memory                         1024
Emergency Memory In Use                  16
Target Committed                         1048576
Current Committed                        1048576
Pages Allocated                          1019480
Pages Reserved                           0
Pages Free                               2672
Pages In Use                             105968
Page Alloc Potential                     890176
NUMA Growth Phase                        2
Last OOM Factor                          0
Last OS Error                            0

sys.dm_os_memory_nodes ではこのような情報が取得できます。

memory_node_id virtual_address_space_reserved_kb virtual_address_space_committed_kb
————– ——————————— ———————————-
0              1114692                           1048568                           
32             0                                 12                                

locked_page_allocations_kb pages_kb             shared_memory_reserved_kb
————————– ——————– ————————-
0                          1019480              0                        
0                          1019480              0                        

shared_memory_committed_kb cpu_affinity_mask    online_scheduler_mask
————————– ——————– ———————
0                          15                   15                   
0                          15                   15                   

processor_group foreign_committed_kb
————— ——————–
0               0
0               0

どちらのコマンドを実行しても VAS の情報を確認可能です。
DBCC MEMORYSTATUS で取得できる情報は、[sys.dm_os_memory_nodes] [sys.dm_os_memory_clerks] [sys.dm_os_memory_objects] [sys.dm_os_memory_cache_counters] [sys.dm_os_memory_pools] から取得することも可能です。

これらの情報を取得することで、[reserved][committed] の2 種類を確認することができます。
[reserved] (予約) は仮想メモリの領域を予約しているが実際には物理メモリを割り当てていない状態、 [committed] (確定) は物理メモリを割り当てている状態になります。

■max server memory の設定

SQL Server では [max server memory] を設定することでメモリの上限を設定することができますが、この設定をすることで、[reserved] とするサイズの上限を制限することが可能です。

今回は 32 ビット版の SQL Server を使用しているのですが、1.6GB 程度 VAS が確保できています。
# 大量のデータを検索して SQL Server のメモリを使用させた状態です。
image

この情報は以下のクエリを実行して取得しています。

SELECT
    [virtual_address_space_reserved_kb] / 1024 AS [VAS Reserved (MB)],
    [virtual_address_space_committed_kb] / 1024 AS [VAS Committed (MB)]
FROM
    [sys].[dm_os_memory_nodes]
WHERE
    [memory_node_id] = 0

初期設定の状態なので max server memory は [2147483647] が設定されているので、使用できる上限まで SQL Server はメモリを確保します。

それでは、max server memory を [1024] に設定して VAS の状態を確認してみたいと思います。
image

max server memory を設定することで、[Committed] のサイズが変更されていることが確認できます。
今回は設定変更後はサービスを再起動していないため、[Reserved] に関しては 1024 MB 以上の値となっています。
このことから max server memory は [Reserved] ではなく [Committed] 状態のメモリのサイズを制御していることが確認できます。

サービスの再起動をして、Reserved を解放し再度メモリの割り当てを確認してみます。

起動直後の VAS の状態は以下のようになっています。
SQL Server は通常の設定では max server memory を設定しても、起動直後は最小限のメモリのみ [Reserved] [Committed] で確保を行います。
image

サービスを再起動すると最小限の [Reserved] [Committed] から開始されますので、[Reserved] の確保も抑えられた状態となります。
# [Committed] が [1024 MB] で上限となるので、[Reserved] の確保も抑えらえた状態となります。
image

 

■/3GB スイッチによる VAS 上限の変更

今回の環境ではメモリを 6GB 割り当てているのですが、32 ビット OS の制限でユーザーモードの VAS の上限は 2GB となっています。
以下は SQL Server のメモリ割り当て (Memory ManagerTotal Server Memory (KB)) とサーバーの空きメモリ (MemoryAvailable MBytes) の関係をグラフ化したものになります。

image

サーバーの空きメモリはあるのですが、SQL Server で使用しているメモリについては VAS の上限に達してから頭打ちになっているのが確認できます。

この状態が 32 ビット版の SQL Server の通常設定時の限界となります。
空きメモリがあるにも関わらず、32 ビット OS の制限でメモリを最大限使用できない状態となっています。

32 ビット OS では [/3GB] オプションを設定することで、ユーザーモードのVAS の上限値を 2GB → 3GB に変更することが可能となります。
# [/3GB スイッチ] [4GB チューニング] と呼ばれる設定になります。

Windows Server 2003 向けなりますが以下の技術情報が公開されています。
/userva スイッチと /3GB スイッチを使用してユーザー モード領域を 2 ~ 3 GB の間でチューニングする方法
4 GB RAM チューニング機能と物理アドレス拡張のスイッチの説明

Windows Server 2008 以降は boot.ini ではなく、BCD が使用されていますので bcdedit を使用して設定を行う必要があります。

[/3GB] スイッチは、[increaseuserva 3072] で設定することが可能です。

bcdedit /set {current} increaseuserva 3072

上記コマンドをコマンドプロンプトで実行することでユーザーモードの VAS を3GB まで使用することが可能となります。
# 代わりにカーネルモードが 1GB に制限されますが。
image

設定を削除する場合は以下のコマンドを実行します。

bcdedit /deletevalue {current} increaseuserva

 

設定をしたら一度サーバーを再起動して、SQL Server のメモリの使用状況を確認してみます。
image
image

 

設定をすることで設定前と比較して 1GB 程メモリの割り当てが増えていることが確認できます。

この設定をすることで 2GB 以上のメモリを使用することが可能となりますが、サーバーの空きメモリはまだ残っておりメモリを最大限活用できていない状態となっています。

これ以上のメモリを使用するためには AWE (Address Windowing Extensions) を有効にする必要があります。
AWE については次の投稿でまとめたいと思います。

Written by Masayuki.Ozawa

11月 28th, 2010 at 7:55 pm

Posted in SQL Server

Tagged with ,

SSMS で大量の結果を返すクエリを実行する際の注意点

leave a comment

AWE と PAE のテストをしようと思って、大量のデータを作成して SSMS (SQL Server Management Studio) で SELECT 文を実行してキャッシュに載せる検証をしていました。

SELECT 文を実行してみたところ以下のようなエラーが。
image

C ドライブの空き容量を確認したところ、[0 バイト] との表示が…。
image

C ドライブに tempdb を格納しているのですが、今回はソートをしていないのでサイズも増えていないのですよね。
image

ディレクトリのサイズを確認していたら、SSMS を実行しているユーザーの TEMP ディレクトリのサイズが肥大化していました。
image

Temp ディレクトリに一つ大きなファイルが作成されていました。
image

Process Explorer で確認をすると SSMS がつかんでいるファイルのようでした。
image

このファイルですが、大量のデータを返すクエリを実行していたクエリウィンドウを閉じたところ削除がされました。
今まであまり意識していなかったのですが、SSMS で [グリッド形式] で結果を表示するようにすると一時ファイルが作成されるようですね。
10 件程度の結果を返す軽いクエリでもファイルが作成されていました。
image
image

[テキスト形式] で結果を返すようにするとファイルは作成されませんでした。
image

 

急に C ドライブの容量が減ってびっくりしたのですが、SSMS が一時ファイルを作っていることが分かったので勉強になりました。

Written by Masayuki.Ozawa

11月 27th, 2010 at 10:41 pm

Posted in SQL Server

Tagged with

The Microsoft Conference Japan Tour 2010 に参加してきました。

leave a comment

KeyNote だけですが、MSC 2010 に参加してきましたのでレポートを。

Cloud Power
未来へと続く新しいチカラ
CCC (シーシーシー)
# マークの呼称

グローバルに通用するグローバル基盤の整備という流れがある。
# グローバル経営の基盤

ブレークしたいニーズとクラウドが重なって一材料となるのではないか。
パートナーがグローバルな基盤を持つことでグローバル展開ができるようになるのではないか。

プライベートクラウド
パートナークラウド
パブリッククラウド

 

■ リクルート様講話

個人の方にとって重要な情報/機会を提供するのが役割。

戦略からみたIT

[以前]
情報が集まれば価値になる

[現在]
デバイス/ネットワークの進歩により個人にとって重要な情報を提供するのが重要になってきている。
タイミング / スピード
個人にベストマッチする情報の提供
コストとしてどのようなサービスを提供できるか

グローバルに展開するに際し、IT 基盤をどのように構築するかが重要になってくる

クラウドについて

情報の絶対量の増加/時代のニーズに合わせた情報を提供するシステムをいかに短期間で作成するか
→クラウドの柔軟性がポイントになってくる

コミュニケーションを円滑に行う必要がある。(M&A により海外にも拠点がr増えていくことも考慮)
企業運営の中にクラウドサービスをどこまで取り込んでいけるか
(スピード感を増すためにも重要となってくる)

Microsoft のオンラインサービスを利用している

増大している情報量をさばきながら社内のコミュニケーションを円滑にする必要がある。

省内の環境変化による応用の面でもクラウドは頼もしく思っている。

グローバル戦略における IT /クラウド

IT の進化による流れを自社のチャンスにどのようにつなげていくか
新しい技術を企業経営につなげていくうえでも Microsoft は頼もしいパートナー

 

■ Office 365 のデモ

Office 365 / Windows Phone 7 / Lync

Office 365 Beta の SharePoint に Office ドキュメントをドラッグ & ドロップでファイルをアップロード
# Excel 2010 の Web に保存 / SharePoint に保存でも実施可能

Office 365 Beta の Outlook のデモ
Outlook 2010 で開いていたメールをブラウザからも確認できる。

HTC の WP7 を使用したデモ
WP 7 から Office 365 にアクセスして Excel を開いてみる。

クラウド上での共同作業による生産性向上
Office 365 のチームサイトを使用して、Office Web App の Excel を 2 名で開き共同編集
共同編集中は Office Web App で他ユーザーの編集状況が分かる

富士通製 Slate PC / ONKYO 製 Slate PC
USB ポートを備えた Windows 7 モデル
Slate 端末から Office 365 にアクセスをするデモ

Lync
Lync (クラウドサービス版) を使用してマイクロまいこさんと Excel の共同作業
Excel は PC のローカルに保存されているものを使用して Lync を使用して共同編集を実施。
# 画面を共有して情報の共有を実施

Online Servicesの利用状況
全世界 : 4,000 万人以上
日本国内 : 30 万人以上

 

伊藤病院のメッセージビデオの上映
Exchange Online Service の Standard を利用している
60% のコスト削減を実施できるとのことであった

スマートフォンユーザーから評判も良かった (スマートフォンユーザーがビックるしていた)

 

Dynamics CRM Online

Online のサービスの方がオンプレミスより先にリリースされる
2011 年 1 月に日本で差ーービス提供開始
40 か国 / 41 言語一斉インターナショナルリリース

Dynamics CRM Online を使用したデモ
画面のカスタマイズもブラウザ上で実施することが可能
データのインポート機能も備えている
→ Sales Force からエクスポートしたデータをインポートできる
オンプレミスの Outlook 2010 と Dynamics CRM の連携デモ
→ メール / 予定表から Dynamics CRM とシームレスに SSO で連携

Dynamics CRM Online から Excel にエクスポートすることができる。

スピード経営を支える迅速な展開が可能となる

58 社のパートナーが対応を表f明

 

帝国データバンク様 講話
Dynamics CRM Online の利用を表明
Dynamics CRM Online  TBD 企業情報サービスを組み合わせたクラウド型統合顧客管理サービス

Dynamics CRM Online に情報を乳rykすると TBD 企業情報サービスで照会され最新の企業情報を抽出する。
# 最新の企業情報に基づく照会を実施できる

利便性の高い新サービスの実現
2011 年 2 月のサービス開始を予定

■ 三和コムテック様 メッセージビデオ上映
Sales Force から Dynamics CRM Online に乗り換えをされた
BPOS も利用されている

Outlook との連携がポイント
ストレージが他社と比べると大きい
2/3 程度のコストに落ちた

Sales Force 用の標準で用意されているマップを使用して移行が実施できた

■ シームレスな連携
System Center / Windows Server / Windows azure をシームレスに統合することが可能になる

OpsMgr 2007 R2 を使用して Azure Based Customer Portal Diagram を表示
Azure のインスタンスを追加してダイアグラムを更新して、インスタンスが増えていることを確認

Windows Intune
クラウドからオンプレミス資産を管理
社内の PC 7 台を実際に管理
Windows XP / 2008 R2 / Windows 7 を管理している画面を表示
# Windows 7 Ultimate をインストールした Slate PC も管理している

Windows Azure Marketplace DataMarket
クラウドからビジネスデータを取得
犯罪履歴のデータを使用したデモ
# DATA.GOV
Excel から Marketplace のデータを取得
データ → Import data from DataMarket で Excel から直接データを取り込み

 

■ パソナ様 / パソナグループ様 講話
アーバンファーム
エコを含めた農業への関心

パソナの案件 / 取り組みに Azure を利用している
実際に使ってみようから始まっている
# Azure / Sales Force を使ってみた

導入に当たって感じたこと
Sales Force を使ってクラウドのスピード感を感じた
もう一
つ使ってみるという事で Azure を使った
PaaS もスピード感がある
他のグループ会社への展開にたいしての苦労は少なそうというところでメリットを感じている

 

■ NTT データ様 講話
社内システムの Azure への移行プロジェクト
オンプレミスからクラウド化への流れ

プライベートクラウド
パブリッククラウド
コミュニティクラウド
ハイブリッドクラウド

Azure ~ NTT データのクラウドと連携を行いハイブリッドクラウドの実現

Windows Azure + Windows Azure platform AppFabric + SQL Azure + intra-mart
# intra-mart は Java ベース
インフラのコストが 90% 抑えられる

[課題]
IP/ポート番号が指定できない
既定の AP インストールフォルダは書き込みできない
詳細な ACL が設定できない
標準で OS / DB で暗号化の機能を有していない
スイッチやファイアウォールを設定できないため AP でアクセス制御が必要

アプリケーションを PaaS に移すサービスを立ち上げている
# 今回のプロジェクトもその一環

 

■ 弥生株式会社様 講話
弥生オンラインのご紹介

Why Saas? Why Azure?
20 周年周期でのテクノロジーサイクル (中央→分散→中央)
パッケージ開発との親和性 (C#/.NET Framework)

従来の弥生製品とは異なる統合業務ソフトウェア (ミニ ERP)
仕訳ではなく取引を入力する
日常の業務と弥生オンラインを一体化

2010 年 11 月 クローズドβ開始
2011 年 7 月 オープンβ 開始
2011 年 9 月 一般オープン

 

■ 富士通株式会社様 講話
Azure アプライアンスは、館林に機器導入が完了し、現在試験中

FJ-Azure と 富士通プライベート クラウドサービスとのハイブリッドインテグレーションを進めていく

Azure 技術者 5,000 名教をグローバルに育成

Interstage / Systemwalker / WebSERVE の Azure 対応

FJ-Azure インテグレーションパートナーの育成

 

 

■ Cloud Power
IDC フロンティア様によるクラウドサービス (NOAH)
SQL Server 2008 + WIndows Server

NTT コミュニケーションズ様のハイブリッドクラウド

■ Hyper-V Cloud
Deployment Guide
Fast Track
Service Providers
Hyper-V Cloud Accelerate
(プライベートクラウド導入支援プログラム)

 

■日立製作所様 講話
高信頼クラウドサービスの実現

幅広い業種 / 業務にクラウドソリューションの導入実績を持つ
# NASA の観測データを一括してオンデマンドに管理できるソリューションも提供を行っている

Cloud を支える製品軍
BladeSynmphony
Virtual Storage Platform
CommuniMax AX
JP1

Hyper-V Cloud Fast Track
検証済みの安全、安心なソリューション
クラウド運用の効率化
プライベートクラウドの構築

 

■ NEC 様 講話
NEC グループ 12 万人を支える基幹システムをクラウド化
# Microsoft との技術協業により実現

2010 年 10 月にプライベートクラウドとしてグローバル標準経営システムを全面稼働
# Windows Server 2008 / SQL Server 2008

業務プロセス / IT システムのコストを 20% 削減

クラウド指向データセンター (CODC) を 5 極で順次立ち上げ
(欧州 / APAC /  北米 / 日本 / 中国)

クラウドサービス事業を支える共通プラットフォーム
Windows 基盤システムとして Hyper-V Cloud を採用予定
Express 5800
iStorage

 

■ Microsoft のコミットメント
社内体制強化
パートナーシップ推進
オファリング拡充

Written by Masayuki.Ozawa

11月 25th, 2010 at 12:54 pm

Posted in セミナー

Tagged with

WSUS の管理コンソールに突然つながらなくなりました…

leave a comment

最近、自宅の検証環境に Windows Update Services (WSUS) を導入しました。
image

新しい検証サーバーをデプロイして、Windows Update の参照先として構築した WSUS を設定したのですが更新プログラムの適用をすることができませんでした。

どうしてだろうと思って、WSUS の管理コンソールを開いてみたところこのようの画面になっていました…。
image

エラーの内容を見てみたところこのような内容が。

WSUS 管理コンソールは、リモート API 経由で WSUS サーバーに接続できませんでした。

Update Services サービス、 IIS および SQL がサーバー上で実行されていることを確認してください。問題が解決しない場合は、IIS、SQL、および Update Services サービスを再起動してみてください。

System.Net.WebException — HTTP ステータス 401: Unauthorized で要求が失敗しました。

Source
System.Web.Services

Stack Trace:
   場所 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   場所 Microsoft.UpdateServices.Internal.ApiRemoting.ExecuteSPGetUpdateServerStatus(Int32 updateSources, Boolean includeDownstreamComputers, String updateScopeXml, String computerTargetScopeXml, String preferredCulture, Int32 publicationState, Int32 propertiesToGet)
   場所 Microsoft.UpdateServices.Internal.DatabaseAccess.AdminDataAccessProxy.ExecuteSPGetUpdateServerStatus(UpdateSources updateSources, Boolean includeDownstreamComputers, String updateScopeXml, String computerTargetScopeXml, String preferredCulture, ExtendedPublicationState publicationState, UpdateServerStatusPropertiesToGet propertiesToGet)
   場所 Microsoft.UpdateServices.Internal.BaseApi.UpdateServer.GetStatus(UpdateSources updateSources, Boolean includeDownstreamComputers, UpdateScope updatesToInclude, ComputerTargetScope computersToInclude, UpdateServerStatusPropertiesToGet propertiesToGet)
   場所 Microsoft.UpdateServices.Internal.BaseApi.UpdateServer.GetReplicaStatus(UpdateSources updateSources)
   場所 Microsoft.UpdateServices.UI.SnapIn.Common.CachedUpdateServerStatus.GetFreshObjectForCache()
   場所 Microsoft.UpdateServices.UI.AdminApiAccess.CachedObject.GetFromCache()
   場所 Microsoft.UpdateServices.UI.SnapIn.Pages.ServerSummaryPage.backgroundWorker_DoWork(Object sender, DoWorkEventArgs e)

IIS / SQL Server / Update Service も正常に起動はしているのですよね…。

管理コンソールで再接続をしようとしてもこのようなエラーが。
image

‘2008R2-WSUS-01’ に接続できません。
サーバーが別のポートを使用しているか、別の SSL (Secure Sockets Layer) 設定を使用している可能性があります。

 

WSUS の Web サービスを開こうとしてもエラーとなっていました。
image

‘/ApiRemoting30’ アプリケーションでサーバー エラーが発生しました。
——————————————————————————–

要求形式が認識されません。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.InvalidOperationException: 要求形式が認識されません。

ソース エラー:

現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 

スタック トレース:

[InvalidOperationException: 要求形式が認識されません。]
   System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +401178
   System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +281
   System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +425
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +263

 

——————————————————————————–
バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.4952; ASP.NET バージョン:2.0.50727.4955

WSUS のログは [C:Program FilesUpdate ServicesLogFilesSoftwareDistribution.log] に出力がされているのですが、このログには以下のように出力がされていました。

2010-11-20 13:27:35.395 UTC    Error    WsusService.8    HmtWebServices.CheckDssAuthWebService    DssAuth WebService SoapException:System.Web.Services.Protocols.SoapException: System.W
eb.Services.Protocols.SoapException: サーバーは要求を処理できませんでした。 —> System.InvalidOperationException: 一時クラスを生成できません (result=1)。
error CS2001: ソース ファイル ‘C:WindowsTEMPy4sk819r.0.cs’ が見つかりませんでした。
error CS2008: 入力が指定されていません。

   場所 System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
   場所 System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
   場所 System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
   場所 System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Evidence evidence)
   場所 System.Web.Services.Protocols.SoapServerType..ctor(Type type, WebServiceProtocols protocolsSupported)
   場所 System.Web.Services.Protocols.SoapServerProtocol.Initialize()
   場所 System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
   場所 System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
   — 内部例外スタック トレースの終わり —
   場所 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   場所 Microsoft.UpdateServices.Internal.DssAuthWebService.DssAuthWebService.Ping(Int32 pingLevel)
   場所 Microsoft.UpdateServices.Internal.HealthMonitoring.HmtWebServices.CheckDssAuthWebService(EventLoggingType type, HealthEventLogger logger)
   場所 Microsoft.UpdateServices.Internal.HealthMonitoring.HmtWebServices.CheckDssAuthWebService(EventLoggingType type, HealthEventLogger logger)
   場所 Microsoft.UpdateServices.Internal.HealthMonitoring.HealthMonitoringTasks.ExecuteSubtask(HealthMonitoringSubtask subtask, EventLoggingType type, HealthEventLogger logger)
   場所 Microsoft.UpdateServices.Internal.HealthMonitoring.HealthMonitoringTasks.Execute(EventLoggingType type)
   場所 Microsoft.UpdateServices.Internal.HealthMonitoring.HealthMonitoringThreadManager.Execute(Boolean waitIfNecessary, EventLoggingType loggingType)
   場所 Microsoft.UpdateServices.Internal.HealthMonitoring.HealthMonitoringThreadManager.PeriodicTask()
   場所 Microsoft.UpdateServices.Internal.HealthMonitoring.PeriodicTaskExecuter.ThreadStart()
   場所 System.Threading.ExecutionContext.runTryCode(Object userData)
   場所 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   場所 System.Threading.ThreadHelper.ThreadStart()

情報を探してみたところ、以下のようなものがありました。
ASP.NET 2.0 をユーザー アカウントで実行されるように構成するとエラー メッセージ "一時クラスを生成できません" が表示される
Issues with the WSUS 3.0 Administration Console
WSUS に関連した Web サービスが、Windows Server 2003 ベースのコンピューターを Windows Server 2008 にアップグレードするときの動作を停止します。
WSUS Install Fails; There is a problem with this Windows Installer package.
そこが知りたい Windows Server Update Services(第3回)

今回の現象ですが、最後の [そこが知りたい Windows Server Update Services(第3回)] に記載されている現象が原因のようでした。

[C:Windowstemp]  から [Network Service] の権限が外れてしまっていたため Web サービスを実行した際の一時クラスが生成できずエラーになってしまったみたいですね。

[フォルダーの一覧/データの読み取り] の権限を付与したところエラーを回避することができました。
image

どうして突然外れてしまったのかはわからないのですが今後、同様の現象が発生した際の対応策のメモとして残しておきたいと思います。

Written by Masayuki.Ozawa

11月 20th, 2010 at 11:06 pm

Posted in Windows Server

Tagged with

Denali の HADR のフェールオーバーについて

leave a comment

Denali の HADR の構築はできましたので、今回はフェールオーバーについてまとめてみたいと思います。

■HADR 用のクラスターグループについて

HADR は WSFC が必須の構成となります。
HADR を構築するとクラスターグループとして Availability Group として設定したグループ名が作成されます。
image

このクラスターグループにはリソースが一つ含まれています。
image
このリソースですが、[SQL Server Availability Group] というリソースで作成されています。
image

リソースの所有者が [Primary] として設定されているサーバーになるようですね。

このグループですが、WSFC の管理コンソールからはグループを移動させることはできないようになっているようです。
image

 

■SSMS で Primary サーバーを切り替え

WSFC のグループは WSFC の管理コンソールからは切り替えることができません。
Primary サーバーを切り替える (フェールオーバーさせる) 場合は、SSMS から操作をする必要があります。

Primary サーバーの切り替えですが、現在 [Primary] サーバーとなっているサーバーの接続からは変更することができません。

  • DENALI-01 : Primary
  • DENALI-02 : Secondary

となっている場合、DELALI-01 の接続では、サーバーの切り替えをするためのメニューは表示されません。
image
image

DENALI-02 に接続し、Secondary で右クリックをするとメニューが少し変わります。
image
image

SSMS で Secondary のサーバーに接続をして、Secondary のサーバーを右クリックすると [Force Failover] が表示されます。
[Force Failover] を使用することで Primary と Secondary を切り替えることができます。

CTP1 の Release Notes には以下の記載があります。

The SQL Server Code-Named “Denali” CTP1 release of "HADR" is a preview and does not support the following features:

  • Synchronous data movement (synchronous-commit availability mode).

  • Manual failover and automatic failover.

    The only supported form is forced failover, which allows data loss and suspends the secondary databases.

  • Log compression.

  • Automatic page repair.

  • The ALTER AVAILABILITY GROUP Transact-SQL statement does not support changing the configuration of the availability group such as changing read-only access to an availability replica, adding or removing an availability database, and adding or removing a secondary availability replica. For information about what this Transact-SQL statement supports, see ALTER AVAILABILITY GROUP (Transact-SQL) in Books Online.

 

現状は マニュアル / 自動フェールオーバーは実装されていないようです。
そのため、Primary / Secondary を切り替えるためには強制フェールオーバーをする必要があります。
# Primary のサービスを停止しても Secondary には切り替わりません。

それでは、[Force Failover] を実行して Primary と Secondary を切り替えてみたいと思います。
DEHALI-02 に接続し、[HADR Group] → [Availability Replicas] を展開して、[DENALI-02] を右クリックし、[Force Failover] をクリックします。
# Secondary の接続でないと [Force Failover] が表示されません。

image

[OK] をクリックして、フェールオーバーを実施します。
image

image

H
ADR の強制フェールオーバーは以上で完了です。

強制フェールオーバー前は以下の状態となっていました。
image

[DENALI-01]
image

[DENALI-02]
image

 

強制フェールオーバーを実施すると以下の状態となります。
image
強制フェールオーバー前は [Primary] であった、[DENALI-01] が [Secondary] になっているのが確認できます。
強制フェールオーバーを実施した影響だと思うのですが、[Synchronization State] が [Synchronized] から [Not Synchronizing] に変わっています。

データベースの状態も [Online] から [Suspended] に変わっています。

[DENALI-01]
image

[DENALI-02]
image

強制フェールオーバーを実施した場合は、自動で [Online] にはならないため手動で HADR による同期を再開する必要があります。

 

同期を再開するためには、[Secondary] に接続をして [Resume Data Movement] を実行する必要があります。
image

[OK] をクリックして、HADR によるデータ同期を再開します。
image

Resume をすることでデータ同期が再開されます。
image

image

 

自動フェールオーバーや自動ページ修復が実装されるとミラーリングと変わらない利用が出来そうなので期待大ですね。

次の CTP で検証できるようになっているとうれしいですね~。

Written by Masayuki.Ozawa

11月 20th, 2010 at 9:54 pm

Posted in SQL Server

Tagged with ,

GT110b で iSCSI Boot を設定

one comment

NEC Express5800/GT110b で iSCSI Boot を実行する方法についてまとめてみたいと思います。

GT110b のオンボード NIC には、Intel の [82574L] というチップセットの NIC が使用されています。
このチップセットですが iSCSI Boot に対応しているのですが、GT110b のオンボード NIC ではiSCSI Boot 用のファームに書き換えることができないため、iSCSI Boot をすることができません。

メーカーのホームページにも iSCSI Boot 不可という記載がされています。
Express5800/GT110b

image

実際にオンボード NIC のファームを更新しようとすると、以下のように表示がされて更新することができませんでした。
image

そこで、今回は Intel の [EXPI9301CT] という NIC を購入してこの NIC で iSCSI Boot を設定してみました。
この NIC もオンボードと同じ [82574L]  のチップセットを使用しているのですが iSCSI Boot 用のファームのアップデートを行うことが可能です。
また、オンボードの NIC と同じ Intel の チップセットなのでチーミングを組むことも可能です。
# iSCSI Boot 用のファームにした場合はチーミングを組むことができませんが。
お値段も 3,000 円台と手ごろな価格で入手が可能です。

この NIC を使用して iSCSI Boot を設定していきたいと思います。

ファームのアップデートですが 2 種類の方法があります。

  1. 一度ローカルディスク上に OS をインストールしてそこからデバイスマネージャーで iSCSI 用のファームにアップデート
  2. USB メモリに起動可能な DOS のイメージを格納して、そこから iSCSI Boot 用のユーティリティを実行

どちらの場合も、以下の URL からダウンロードできるファームを適用します。
iSCSI boot BIOS firmware utility

ファームを書き換えるとチーミング / PXE ブートができなくなるのですが、元のファームに戻したい場合はこちらのファームを適用します。
Intel Boot Agent BIOS image utility ? IBABUILD

 

GT110b の iSCSI Boot の検証をしていて気づいたのですが、オンボードの Software RAID を使用すると iSCSI Boot がうまくできなかったので、この点は注意が必要になるかもしれません。
# Software RAID を有効にすると iSCSI Boot のファームが起動してこなかったのですよね。

 

■ OS インストール後にファームをアップデート

今回は OS として Windows Server 2008 R2 をインストールしています。
82574L のチップセットの NIC ですが、OS のインストールメディアに含まれるドライバで認識ができるのですが、標準ドライバでは細かな設定をすることができません。
image
image

Intel のサイトから最新のデバイスドライバをダウンロードしてインストールします。
Network Adapter Driver for Windows Server 2008 R2*
# [PROWinx64.exe] を使用します。

インストールに関してはデフォルトでインストールをすれば問題ありません。
image

デバイスドライバを最新にするとタブが増えます。
image

[起動オプション] タブに [フラッシュの更新] ボタンがありますのでこれをクリックして、ダウンロードした iSCSI Boot 用ファームウェアの [iscsi.flb] というファイルを選択し、ファームをアップデートします。

  1. [フラッシュの更新] をクリックします。
    image
  2. [はい] をクリックします。
    image
  3. [いいえ] をクリックします。
    # PXE ブートのファームに関してはダウンロードできますので。
    image
  4. [はい] をクリックします。
    image
  5. [iscsi.flb] を選択して、[開く] をクリックします。
    image
  6. [はい] をクリックします。
    image
    image
  7. [OK] をクリックします。
    image

これでファームの変更は完了です。
ファームが iSCSI Boot バージョンに変更されています。
image

[アクティブ イメージ] を [iSCSI Boot] に変更すると iSCSI Boot 用の設定をすることが可能になります。
image

 

 

■DOS 起動可能な USB で起動してファームをアップデート

 

OS をインストールしないでも DOS 起動可能な USB メモリで起動をしてファームを更新することも可能です。
DOS 起動可能な USB メモリを作成する方法ですが、[Windows 98 System Files][HP USB Disk Storage Format Tool] を使うと作成することが可能です。

 

作成した USB メモリで起動をすると DOS が起動しますので、コマンドを実行してファームの更新を行います。
USB メモリの中には、iSCSI boot BIOS firmware utility でダウンロードしたファイルを解凍したものを入れておきます。

今回は USB メモリの直下に [iSCSI] というディレクトリを作成してその中に格納をしています。

DOS 起動でファームを iSCSI Boot 用のものにアップデートするときには、[ISCSIUTL.EXE] を使用します。

この EXE を起動すると現在のファームのバージョンを確認することができます。

CD C:ISCSIISCSIUTLDOS
ISCSIUTL

Intel(R) iSCSI Remote Boot Utility
Copyright (C) 2003-2010 Intel Corporation

Type iSCSIUTL ?? for help

Port Network Address Series  WOL Flash Firmware       Version
==== =============== ======= === ==================== ========
1   xxxxxxxxxxxxxxxx Gigabit YES PXE Enabled          1.3.53
2   xxxxxxxxxxxxxxxx Gigabit YES FLASH Not Present  

 

[1] が今回追加した NIC で [2] がオンボードの NIC になります。
オンボードの NIC は [Flash Firmware] が [FLASH Not Present] となっており、ファームウェアの更新を行うことができません。
これが回避できればオンボード NIC で iSCSI Boot ができるのですけどね…。

ISCSIUTL には[-FLASHENABLE] というオプションがあるのでそれを試してみたのですが駄目でした…。

本題に戻って iSCSI 用のファームにアップデートしたいと思います。

ISCSIUTL でファームを更新する場合、2 種類のオプションのどちらかを使用することが可能です。

  1. 全アダプターを対象にして更新可能なものを更新
  2. 特定のアダプターを対象として更新

ただし、[2] の [-NIC] [-UPDATE] オプションを使用して更新する方法だと、うまく更新を行うことができませんでした。
そのため、今回は [1] の全アダプターを対象にして更新しています。

CD C:ISCSIISCSIUTLDOS
ISCSIUTL ?ALL ?UP

Intel(R) iSCSI Remote Boot Utility
Copyright (C) 2003-2010 Intel Corporation

Press ‘q’ in a prompt to exit the command operation
Programing flash on port 1 with flash firmware image
Create restore image before proceeding?  (Y)es or (N)o:N
Continue update without restore image?   (Y)es or (N)o:Y
Updating iSCSI Remove PXE functionality
Would you like to Continue?              (Y)es or (N)o:Y
Flash update successful

Unsupported feature on port 2
ERROR: Flash update was unsuccessful

Port Network Address Series  WOL Flash Firmware       Version
==== =============== ======= === ==================== ========
1   xxxxxxxxxxxxxxxx Gigabit YES iSCSI Enabled        2.5.12
2   xxxxxxxxxxxxxxxx Gigabit YES FLASH Not Present  

現状のファームのバックアップを取得しないでファームをアップデートする場合はこのような形で実行を行います。
全アダプターを対象として実行していますので、オンボード NIC も更新しようとするのですがファームのアップデートには対応をしていないためエラーとなっています。

以上でファームのアップデートは完了です。

 

続いて iSCSI Boot 用の設定をしていきたいと思います。
iSCSI Boot 用の設定ですが、OS のデバイスマネージャーかファームのユーティリティを起動して設定をすることができます。

 

■OS から iSCSI Boot を設定

デバイスマネージャーから iSCSI Boot の設定をしてみたいと思います。
デバイスマネージャーからネットワークアダプターのプロパティを開いて設定を行います。

  1. [起動オプション] タブをクリックします。
    image
  2. [アクティブ イメージ] を iSCSI Boot に設定します。
    アクティブイメージを変更することで iSCSI Boot 用の設定をすることが可能となります。
    image
  3. [起動の優先度] を選択して、[プロパティ] をクリックします。
    image
  4. [プライマリーの設定] をクリックして、[OK] をクリックします。
    image
    image
  5. [OK] をクリックします。
    image
  6. [イニシエータ] を選択して、[プロパティ] をクリックします。
    image
  7. iSCSI イニシエーターの設定情報を入力して、[OK] をクリックします。
    DHCP がある場合は iSCSI  Boot をする NIC の IP アドレスを自動で取得することができますが、今回は固定 IP を割り当てています。
    image
  8. [ターゲット] を選択して、[プロパティ] をクリックします。
    image
  9. iSCSI Boot で使用する LUN を用意している iSCSI ターゲットの情報を入力して、[OK] をクリックします。
    私は iSCSI に QNAP の TS-439 を使用していますので、ターゲットの IQN はQNAP 用の設定になっています。
    iSCSI ターゲットの [起動 LUN] に関しては、最初の LUN が [0] になるようですね。
    今回は対象のターゲットにはブート用の LUN 一つのみを設定しています。
    image
  10. 認証設定をしている場合は、[認証] を選択し [プロパティ] をクリックします。
    image
    image

続いてファームのユーティリティから iSCSI Boot の設定を実施してみたいと思います。

 

■ファームのユーティリティから iSCSI Boot を設定

オンボードの Soft RAID を有効にしている場合は無効に設定します。

  1. 起動時に iSCSI Remote Boot 用のファームが起動してきますので [Ctrl] + [D] をクリックしてファームのユーティリティを起動します。
    # Soft RAID を有効にしているとこの画面が表示されないのですよね…。

    Intel (R) iSCSI Remote Boot version 2.5.12
    Copyright (c) 2003-2010 Intel Corporation. All rights reserved.
    Press ESX key to skip iSCSI boot initialization.
    Press <Ctrl-D> to run setup…
  2. iSCSI Remote Boot が起動しますので、設定を行うポートを選択して [P] を押して PRIMARY に設定をします。
    設定をしたら [Enter] を押し、確定します。

    Intel(R) iSCSI Remote Boot v2.5.12
    ==================================================================================

    iSCSI Port Selection

    MAX:xxxxxxxx Dev:i0D3 Loc:13:0:0 BOOT:PRIMARY

     

    ==================================================================================
    Select iSCSI Boot priority: P=PRIMARY S=SECONDARY D=DISALED B=BLINK LED

  3. [iSCSI Port Selection] を選択し、[Enter] を押します。

    Intel(R) iSCSI Remote Boot v2.5.12
    ==================================================================================

    iSCSI Port Configuration

    iSCSI Port Selection

    iSCSI CHAP Configuration

    Discard change and Exit

    Save change and Exit

     

    ==================================================================================
    Copyright (c) 2003-2010 Intel Corporation. All rights reserved.

  4. iSCSI イニシエーターとターゲットの設定をして、[OK] を押します。

    Intel(R) iSCSI Remote Boot v2.5.12
    ==================================================================================

    iSCSI Boot Configuration

    [ ] Use dynamic IP Configuration (DHCP)                             

    Initiator Name:     iqn.2010-11.gt110b-03.local                
    Initiator IP:       192.168.0.1                                
    Subnet Mask:        255.0.0.0                                  
    Gateway:            192.168.0.254                              
    VLAN ID:                                                       

    [ ] Use DHCP for iSCSI Target information                             
    Target Name:    iqn.2004-04.com.qnap:ts-439.iscsi.iscsiboot.xxxxxx
    Target IP:      192.168.0.10                                      
    Target Port:    3260                                              
    Boot LUN:       0                                                 

    [OK]                [Cancel]

    ==================================================================================
    Copyright (c) 2003-2010 Intel Corporation. All rights reserved.

  5. 認証設定がある場合は、トップのメニューで [iSCSI CHAP Configuration] を選択して設定を行います。

    Intel(R) iSCSI Remote Boot v2.5.12
    ==================================================================================

    iSCSI CHAP Configuration
    Specify the same authentication information
    as configured on the target.

    [ ] Use CHAP                                                          

    User Name:                                                   
    Targert Secret:                                              

     

    [ ] Use MutualCHAP                                                      

    Initiator Secret:                                                                            

    Minimum CHAP secret length is 12 and maximum 16.

    [OK]                [Cancel]

    ==================================================================================
    Copyright (c) 2003-2010 Intel Corporation. All rights reserved.

  6. 設定が終わったら、トップメニューの [Save changes and Exit] を押して設定を保存します。
  7. [ESC] を押してユーティリティを終了させます。

設定が終了して、ユーティリティを終了させると起動画面に戻るのですが設定が正しく行われていれば以下のように表示がされ iSCSI ターゲットの LUN に接続ができていることを確認できます。

Initializing adapter configuration ? MAC address (xxxxxxxxxxxxxxxxx).
Using STATIC configuration for primary port, please wait.
iSCSI Target Name       : iqn.2004-04.com.qnap:ts-439.iscsi.iscsiboot.xxxxxx 
iSCSI Target IP Address : 192.168.0.10
LUN ID: 0                   Port: 3260
iSCSI Initiator IP      : 192.168.0.1
iSCSI Gateway IP        : 192.168.0.254
iSCSI Initiator Name    : iqn.2010-11.gt110b-03.local

Attempting to connect to target disk using MAC address (xxxxxxxxxxxx)
LUN: 0   DEVICE: QNAP iSCSI Storage  40.0 GB

ここまでで設定は完了です。

内蔵のディスクに OS をインストールしている場合は、BIOS のブート順で [PCI SCSI: Intel (R) iSCSI Remote Boot][IDE HDD] より上になるように設定をしておきます。
# Soft RAID を有効にしていると Remote Boot がブート対象として表示されないのですよね。

iSCSI Boot でインストールした環境がこちらになります。
40GB の領域が iSCSI の領域になります。
image

Soft RAID と併用する方法が分かっていないのですが、iSCSI Boot の検証したいときには利用ができそうです。
Soft RAID 構築後にジャンパピンを変更しても設定はそのまま残っていますので、iSCSI Boot に切り替えたいときも既存環境を壊さないで確認ができます。

 

iSCSI Boot から PXE Boot 用のファームに変更したいときは、Intel Boot Agent BIOS image utility ? IBABUILD からダウンロードしたファームを適用すれば戻すことができます。

作業内容は同じで、OS から変更する場合はデバイスマネージャーで NIC のプロパティを開いて、[フラッシュの更新] から
image

[BA1353L2.FLB] を選択して適用を行います。
image
image
image

iSCSI Boot で起動している状態で、iSCSI Boot に使用している NIC に対して変更できました。

DOS 起動可能な USB メモリから変更する場合は、以下のコマンドを実行します。
# USB メモリに [Boot] というディレクトリを作成してその中にダウンロードしたファイルを展開しています。

CD C:BOOT
IBAUTIL.EXE ?ALL ?UP

設定も簡単に戻せるので気軽に検証ができそうですね。
EXPI9301CT は amazon でも購入できますので入手も難しくありませんので結構おすすめかもしれないですね。

Written by Masayuki.Ozawa

11月 20th, 2010 at 3:01 pm

Posted in Windows Server

Tagged with

Denali で HADR 環境を構築

leave a comment

Denali では高可用性の構成として、

  • レプリケーション
    トランザクションログをディストリビュータに配信し、その内容をサブスクライバに適用することでデータの同期を行います。
    image
    # ディストリビュータはパブリッシャと兼用する場合が多いかもしれないですね。
  • ログ配布
    トランザクションログのバックアップを共有ディレクトリに取得し、配布先で取得されたログバックアップをリストアすることでデータの同期を行います。
    image
  • ミラーリング
    プリンシパル / ミラー間でミラーリング用のエンドポイント (接続点) を介してデータの同期を行います。
    ウイットネスサーバーを用意することで障害発生時にプリンシパルとミラーを切り替えることが可能です。
    image
  • クラスタリング
    共有ディスクにデータベースを配置し、SQL Server のサービスはどちらかのノードで実行する構成になります。
    データベースは共有ディスク一か所なのでデータの同期は行われません。
    image

 

のほかに、HADR (high-availability and disaster recovery) という構成が追加されています。
"HADR" Overview (SQL Server)
SQL Server Code-Named "Denali" CTP1 Release Notes の[3.7 High Availability and Disaster Recovery ("HADR")] にも情報が記載されています。

HADR は共有ディスクを使用しないで SQL Server の高可用性環境を作成できる構成になります。
image

特徴としてはプライマリとセカンダリのサーバーだけで同期をとることができ、サーバー間のデータ同期にはミラーリングと同様にエンドポイントが使用されている点になります。
パッと見はレプリケーションと変わらなそうですが、HADR はデータベース全体を同期の対象とすることが可能です。
# レプリケーションは同期をとるテーブルを選択する必要があったはずです。
レプリケーションは SQL Server Agent は使用してデータの同期が行われますが HADR では SQL Server Agent は不要です。
また、セカンダリデータベースは常に読み取りデータベースとして使用することができるように設定が可能です。

クライアントからの接続はミラーリングと同じような設定ができるようなのですがここはまだ検証ができていません。
"HADR" Overview (SQL Server) に[Client Connections] にこのあたりの記載がされています。
Connecting Clients to a Database Mirroring Session (SQL Server) へのリンクがあるので、ミラーリングと同じように Server / Failover_Partner を使用して自動的なフェールオーバーはできそうなのですが。

CTP1 では

This CTP supports only a single, asynchronous secondary replica.

となっているため、シングルのセカンダリ環境となります。
# GUI 上は複数サーバー設定できそうなのですが、具体的に何サーバー設定できるかが記載されているドキュメントが見つかっていないのですよね…。

HADR はクラスタリングの技術が使用されているため、WSFC が必須となります。
image
HADR で必要となる要件に関してはこちらの技術情報に記載がされています。
"HADR" Prerequisites and Restrictions
前提となるデータベースの設定条件に関してもこちらの技術情報に記載がされています。

ただし、SQL Server のインスタンスに関してはクラスタインスタンスとする必要はなくローカルインスタンス間でデータの同期を行うことが可能です。

この HADR の構築方法をまとめてみたいと思います。

今回の環境は前回の投稿で作成したクラスタ環境に、ローカルの既定のインスタンスを作成した環境で実施しています。
また、SQL Server のサービスアカウントはドメインユーザーを指定しています。

両サーバーでローカルアカウントを使用して、ミラーアカウントを作成、エンドポイントで証明書を使用する等を行えばドメインユーザーでなくてもデータ連携ができるかもしれませんが今回は簡単な構築の検証のためドメインユーザーを使用しています。
# WSFC なのでドメイン参加は必須ですのでドメインユーザーを使用するのはそれほど敷居が高くないと思います。

 

■HADR の有効化

 

最初の作業として HADR を使用するインスタンスで、HADR を有効化する必要があります。
HADR の有効化は [SQL Server Configuration Manager] から行います。

image

 

Configuration Manager で対象のインスタンスの SQL Server サービスのプロパティを開くと、[SQL HADR] というタブが表示されます。
このタブの [Enable SQL HADR service] を有効にすることで、対象のインスタンスで HADR を使用することが可能になります。
image
[Enable SQL HADR service] を両サーバーのインスタンスで有効にして、サービスを再起動します。
image

 

TCP/IP 接続の有効化

Denali CTP1 の初期状態では、[Shared Memory] のみが有効になった状態になっています。
image
HADR では TCP/IP でインスタンス間を接続する必要がありますので、TCP/IP を有効にしておきます。
# データの同期はエンドポイントを介して行われますが HADR 設定時に TCP/IP でインスタンスに接続ができる必要があります。
image
image
設定を有効にするため、SQL Server のサービスを再起動します。

 

■ファイアウォールの設定

 

HADR はインスタンス間の接続と、エンドポイントの接続ができる必要がありますので、必要となるポートを許可するファイアウォールのルールを設定します。

今回は既定のインスタンスを使用していますので、インスタンス間の接続は [TCP 1433] が必要になります。
エンドポイントでは既定ではミラーリングと同じ [TCP 5022] が使用されますので、この 2 種類のポートを許可するルールを作成します。

netsh advfirewall firewall add rule name="HADR" dir=in protocol=TCP localport=1433,5022 action=allow

 

■HADR の設定

HADR の設定は SQL Server Management Studio (SSMS) から実施します。
image

今回は、HADR_TEST というデータベースを使用て HADR を設定してみたいと思います。
# 復旧モデルは [完全] に設定しておく必要があります。
image

最初の作業としては [Availability Group]  を作成します。
HADR はこのグループに属しているデータベースの冗長化を行います。

  1. [Management] から、[Availability Groups] を右クリックして、[New Availability Group] をクリックします。
    image
  2. [Next] をクリックします。
    image
  3. Availability Group の名称を入力して、[Next] をクリックします。
    image
  4. HADR で冗長化を行うデータベースを選択する画面が表示されるのですが、データベースを作成した直後の状態だと以下のように対象のデータベースとして選択することができません。
    image
    [Show user databases not meeting requirements.] を有効にすると理由が表示されます。
    image
    HADR を構成するためには、バックアップを取得しておく必要があります。
    一度もバックアップを取得したことがないデータベースは HADR の対象とすることができません。

    バックアップを取得していると HADR の対象とすることができます。
    対象のデータベースを選択して、[Next] をクリックします。
    image

  5. HADR に含める SQL Server のインスタンスを設定します。
    デフォルトでは、HADR を設定しようとしたインスタンスが Primary に設定されています。
    image
    [Add] をクリックしてインスタンスの追加を行います。
    インスタンスの接続ダイアログが表示されますので HADR に含めるインスタンスに接続を行います。
    image
  6. インスタンスに接続をすると HADR の対象として追加がされます。
    image
    初期の状態では、[Read Mode in Secondary Role] は [Disallow Connections] となっています。
    今回は、Secondary は読み取り専用として使用したいため、[Allow All Connections] に設定を行います。
    image
    この設定ですが以下の技術情報の [Read-only Access Behavior] に記載があります。
    Read-Only Access to Secondary Availability Replicas
    READ_CONNECTIONS_ONLY と ALL_CONNECTIONS の違いはこれから勉強しないといけないなと思っています…。
  7. [Endpoints] に関しては自動で作成がされます。
    [Next] をクリックして次の画面に遷移します。
    image
  8. [Finish] をクリックして、Availability Group を作成します。
    [Script] をクリックすることで、Availability Group の設定を行うためのスクリプトを作成することも可能です。
    image
  9. [Start Data Synchronization] をクリックして Secondaly サーバーとデータの初期同期を行います。
    image
  10. データの初期同期ですが、バックアップ / リストアを使用して行われます。
    image
    バックアップ/リストアは共有ディレクトリ経由で行われますので、共有ディレクトリを作成する必要があります。
    今回は、[Share] という [Everyone:フルコントロール] の共有を作成しています。
    image
    注意点としては、Secondary のサーバーにデータベースが存在しているとバックアップ / リストアが実施できない点になります。
    Secondary 側にデータベースが存在していると以下のようなエラーになります。
    image
    正常に同期が完了すると以下の画面になります。
    image
  11. [Close] をクリックして完了します。
    image

以上で HADR の設定は完了です。
今回は SSMS で GUI を使って実行しましたが、クエリベースで実行する場合は以下の技術情報が参考になります。
Example: Setting Up an Availability Group Using Windows Authentication (Transact-SQL)

[Availability Groups] の下に設定が追加されていることが確認できます。
image
設定ついては [Object Explorer Details] からも確認をすることができます。
image
image

HADR の設定は特に難しい箇所はなく設定が出来ると思います。
現状は非同期の更新となっていますが、技術情報で以下のように記載されているように、かなり短い間隔で同期はされているように思えます。

Asynchronous-commit mode enables the primary replica to run with minimum transaction latency

 

細かな使い方に関しては別の投稿でまとめていきたいと思います。

Written by Masayuki.Ozawa

11月 13th, 2010 at 10:33 pm

Posted in SQL Server

Tagged with ,

Denali で 2 ノードクラスターを構築

leave a comment

Denali で 2 ノードクラスターを構築する手順をまとめてみたいと思います。

WSFC は構築をしてあり、MSDTC のリソースは作成済みです。
image

■1 ノード目のインストール

事前準備は終わっていますのでセットアップを起動してクラスターのインストールを行います。
Denali のクラスターのインストールは一台ずつ実施をします。
まずは最初のノードのインストールから。

  1. セットアップを起動すると .NET Framework 3.5 のインストールを確認されますので、[OK] をクリックしてインストールを行います。
    # .NET Framework 4.0 も合わせてインストールがされるようです。
    image
  2. [Installation] から [New SQL Server failover Cluster installation] をクリックします。
    image
  3. [OK] をクリックします。
    image
  4. [Next] をクリックします。
    CTP1 では、Enterprise Evaluation を使用してクラスターを構築します。
    image
  5. [I accept the license terms.] を有効にして、[Next] をクリックします。
    image
  6. [Install] をクリックします。
    image
  7. セットアップルールの検証が開始されます。問題が無ければ [Next] をクリックします。
    以下の画面では、[Microsoft Cluster Serivce (MSCS) Cluste rverification warnings] が発生しています。
    この警告ですが、WSFC のクラスタの検証レポートで警告が発生していたために発生しています。
    image
    image

    私がインストールする場合、インストール時にログオンしているドメインアカウントには最低限の権限 (Domain Users) しか与えていないので、コンピューターアカウントの作成に関してのチェックで警告となります。
    image
    インストール時にログオンしているユーザーにはコンピューターアカウント作成のための権限は委任していませんが、初期状態の 10 台までの作成で対応ができますので、警告は無視ししています。

    クラスターの検証レポートが以下の状態であれば、SQL Server のインストール検証では警告は発生しません。
    image

    また、SQL Server で使用するディスクに関してもインストーラーを実行するノードに移動をしておきます。
    image
    [使用可能記憶域] に属している状態ではインストールには使えませんので注意が必要です。
    image
    インストーラーを実行しているノードで使用可能な共有ディスクがない場合はエラーになります。
    image
    image

  8. インストールする機能を選択し、[Next] をクリックします。
    今回は、SQL Server のデータベースエンジン関連に必要な最低限の機能をインストールしています。
    image
  9. インスタンスの情報を入力して、[Next] をクリックします。
    今回は名前付きインスタンスを使用しています。
    image
  10. [Next] をクリックします。
    image
  11. SQL Server クラスターのグループ名を設定し、[Next] をクリックします。
    グループ名はコンボボックスになっているのでグループ名を変更することが可能です。
    image
    共有ディスクが [使用可能記憶域] に属している場合は、[Next] をクリックすることができませんので一度ほかのグループに移動をしておく必要があります。
    image
  12. チェックボックスで使用するディスクを選択し、[Next] をクリックします。
    image
  13. ネットワークを設定して [Next] をクリックします。
    今回は、DHCP のままでインストールをしてみたいと思います。
    image
  14. クラスターで使用するセキュリティ設定を選択して、[Next] をクリックします。
    今回は、[User service SIDs] を選択しています。
    image
  15. サービスアカウントと照合順序を設定して、[Next] をクリックします。
    image
    image
  16. セキュリティ設定、データディレクトリ、FILESTREAM の設定をして、[Next] をクリックします。
    image
    image
    image
  17. エラー報告をして [Next] をクリックします。
    image
  18. [Next] をクリックします。
    image
  19. [Install] をクリックしてインストールを開始します。
    image
    image
  20. [Close] をクリックしてインストールを完了します。
    image

これで 1 ノード目のインストールは完了です。

 

■2 ノード目のインストール

 

続いて 2 ノード目のインストールを行います。

  1. 2 ノード目でセットアップを実行します。
  2. [OK] をクリックします。
    image
  3. [Installation] から、[Add node to a SQL Server failover cluster] をクリックします。
    image
  4. [OK] をクリックします。
    image
  5. [Next] をクリックします。
    image
  6. [I accept the license terms.] を有効にして、[Next] をクリックします。
    image
  7. [Install] をクリックします。
    image
  8. [Next] をクリックします。
    image
  9. ノードを追加するインスタンスを選択して、[Next] をクリックします。
    image
  10. [Next] をクリックします。
    image
  11. サービスアカウントのパスワードを入力して、[Next] をクリックします。
    image
  12. [Next] をクリックします。
    image
  13. [Next] をクリックします。
    image
  14. [Install] をクリックして、インストールを開始します。
    image
    image
  15. [Close] をクリックしてインストールを完了します。
    image

以上でクラスターのインストールは完了です。

image

クラスターインスタンスのインストールは今までのバージョンと変わらないですね。

Denali では高可用性構成として [HADR] という構成があります。

この構成に関しては次の投稿でまとめてみたいと思います。

Written by Masayuki.Ozawa

11月 13th, 2010 at 1:39 pm

Posted in SQL Server

Tagged with ,

SQL Live Monitor と PAL Tool を使用したモニタリングとレポーティング

leave a comment

今日は、CodePlex で提供されている [SQL Live Monitor] と [Performance Analysis of Logs (PAL) Tool] を使用した、SQL Server のモニタリングとレポーティングについてまとめてみたいと思います。

■SQL Live Monitor

SQL Live Monitor を使用すると、SQL Server の現状の稼働状況を確認することができます。
image
[SQL Server] の欄に情報を取得する SQL Server 名 (既定のインスタンスの場合はサーバー名、名前付きインスタンスの場合はサーバー名インスタンス名) を入力して、[Start] をクリックすることで情報が取得できます。

パフォーマンスチューニングをするにあたって、いくつかの項目は手動で情報を取得する必要がありますが現状の状態を把握するのにはとても便利なツールだと思います。
データキャッシュ / プロシージャキャッシュのメモリ使用状況は Page Life Expectancy といった定番の情報をリアルタイムに見やすく確認することが可能です。
Cache Hit Ratio 系は SQL Server のサービスが最後に起動してからの情報なのであまり参考にならない可能性がありますが…。
矢印でデータの流れがわかるようになっており、[>->->] であれば、左の項目から右の項目に、[<-<-<-] であれば右の項目から左の項目に対してデータが流れていることになります。

たとえば、[Checkpoints/Sec] ですが、チェックポイントが発生するとダーティーページがデータファイルに対してフラッシュされます。
そのため、[SQL Memory] から [Disk Storage] に対してデータが流れることになります。この矢印の方向を理解しておくと SQL Server のデータの流れが分かるかと思います。

 

情報はパフォーマンスモニタから取得されており、以下のような項目を取得し、画面に表示を行っています。

DiskIdleTime = LogicalDisk% Idle Time
AvgDiskReadSec = LogicalDiskAvg. Disk sec/Read
AvgDiskWriteSec = LogicalDiskAvg. Disk sec/Write
AvgDiskQueueLength = LogicalDiskAvg. Disk Queue Length
DiskReadBytesSec = LogicalDiskDisk Read Bytes/sec
DiskWriteBytesSec = LogicalDiskDisk Write Bytes/sec

TransactionsSec = DatabasesTransactions/sec
LogFlushes = DatabasesLog Flushes/sec
TempDBSize = DatabasesData File(s) Size (KB)tempdb
TempDBLogSize = DatabasesLog File(s) Size (KB)tempdb
TempLogSpaceUsed = DatabasesLog File(s) Used Size (KB)tempdb

CPUPercent = Processor% Processor Time

CompilesSec = SQL StatisticsSQL Compilations/sec
RecompilesSec = SQL StatisticsSQL Re-Compilations/sec
BatchesSec = SQL StatisticsBatch Requests/sec

TargetMemory = Memory ManagerTarget Server Memory (KB)
TotalMemory = Memory ManagerTotal Server Memory (KB)
ConnectionMemory = Memory ManagerConnection Memory (KB)
MemGrantsPending = Memory ManagerMemory Grants Pending

BufferCacheSize = Buffer ManagerDatabase pages
BufferCacheHitRatio = Buffer ManagerBuffer cache hit ratio
UserPageLookups = Buffer ManagerPage lookups/sec
PageLife = Buffer ManagerPage life expectancy
LazyWrites = Buffer ManagerLazy writes/sec
ReadAheads = Buffer ManagerReadahead pages/sec
Checkpoints = Buffer ManagerCheckpoint pages/sec
DiskReads = Buffer ManagerPage reads/sec
DiskWrites = Buffer ManagerPage writes/sec
StolePages = Buffer ManagerStolen pages

LocksPerSecond = LocksLock Requests/sec
LockWaits = LocksLock Waits/sec_Total
AvgLockWaitTime = LocksAverage Wait Time (ms)_Total

UserConnections = General StatisticsUser Connections
LoginsSec = General StatisticsLogins/sec
TempObjectCreate = General StatisticsTemp Tables Creation Rate
TempObjectDestroy = General StatisticsTemp Tables For Destruction
TempActiveTables = General StatisticsActive Temp Tables

ProcedureCacheSize = Plan CacheCache PagesSQL Plans
ProcedureCacheHitRatio = Plan CacheCache Hit RatioSQL Plans

MemPagesSec = MemoryPages/sec
FreePTEs = MemoryFree System Page Table Entries
PagedPool = MemoryPool Paged Bytes
NonPagedPool = MemoryPool Nonpaged Bytes
AvailableSystemRam = MemoryAvailable MBytes

ProcQueueLength = SystemProcessor Queue Length

WorkTables = Access MethodsWorktables Created/sec
WorkFiles = Access MethodsWorkfiles Created/sec
FullScans = Access MethodsFull Scans/sec

msdtc = Exec StatisticsDistributed QueryExecs in progress

手動でパフォーマンス監視をしたいときはこの項目をベースに必要となる項目を追加していくと楽かもしれないですね。

 

Live Monitor でリンクになっている箇所は情報をブレークダウンすることができます。

[User Connections]
image

[Total]
image

[Locks / sec]
image

[Avg Waits]
image

[Latch Stats]
image

[Current Memory]
image

[Plan Cache]
image

[Expensive Queries]
image

[Detailed TempDB Views]
image

 

SQL Live Monitor は現在の使用状況を確認するだけでなく、ログを取得する機能を持っています。
[Option] ボタンを押すことで、ログ取得の設定をすることが可能です。
image

デフォルトではログ取得は有効になっていないのですが、
[Log Data for offline analysis (CSV)]
[Log Blocked Process Details (CSV)]
[Log Data for PAL Analysis]
を有効にすることで、ログを取得することが可能になります。ログですが、SQL Live Monitor を実行したフォルダに取得されます。
# Blocked Process はうまく取得できなかったのですが…。

 

[PAL Analysis] は PAL Tool で解析をするための取得データになり、このデータはパフォーマンスモニタを使用して取得されています。
設定を有効にすると、[mscounters] というユーザー定義のデータコレクタ セットが作成され、このコレクタ セットで PAL Tool で解析するためのパフォーマンス情報が取得されます。
image

この PAL Tool 用のデータですが以下の情報が取得されています。

Network Interface(*)Bytes Total/sec
Network Interface(*)Current Bandwidth
Network Interface(*)Output Queue Length

SystemProcessor Queue Length

Processor(*)% Processor Time
Processor(*)% Privileged Time
Processor(_Total)% Processor Time
Processor(_Total)% Privileged Time
Processor(*)% Interrupt Time

PhysicalDisk(*)% Idle Time
PhysicalDisk(*)Avg. Disk sec/Read
PhysicalDisk(*)Avg. Disk sec/Write

LogicalDisk(*)% Idle Time
LogicalDisk(*)Avg. Disk sec/Read
LogicalDisk(*)Avg. Disk sec/Write
LogicalDisk(C:)Free Megabytes
LogicalDisk(*)Disk Transfers/sec

MemoryFree System Page Table Entries
MemoryPool Nonpaged Bytes
MemoryPool Paged Bytes
MemoryAvailable MBytes
MemoryPages/sec

SystemContext Switches/sec

Process(*)Private Bytes
Process(*)Handle Count
Process(*)Thread Count
Process(*)% Processor Time
Process(*)Virtual Bytes
Process(*)Working Set

MemorySystem Cache Resident Bytes
MemoryPages Input/sec

Paging File(*)% Usage
Paging File(*)% Usage Peak

Process(sqlservr)% Privileged Time
Process(sqlservr)% Processor Time
Process(*)IO Data Operations/sec
Process(*)IO Other Operations/sec

SQL StatisticsBatch Requests/sec

Access MethodsForwarded Records/sec
Access MethodsFreeSpace Scans/sec
Access MethodsFull Scans/sec
Access MethodsIndex Searches/sec
Access MethodsPage Splits/sec
Access MethodsScan Point Revalidations/sec
Access MethodsWorkfiles Created/sec
Access MethodsWorktables Created/sec

Buffer ManagerBuffer cache hit ratio
Buffer ManagerLazy writes/sec
Buffer ManagerCheckpoint pages/sec
Buffer ManagerFree pages
Buffer ManagerPage life expectancy
Buffer ManagerPage lookups/sec
Buffer ManagerPage reads/sec
Buffer ManagerPage writes/sec

General StatisticsLogins/sec
General StatisticsLogouts/sec
General StatisticsUser Connections

LatchesLatch Waits/sec
LatchesTotal Latch Wait Time (ms)

Memory ManagerMemory Grants Pending
Memory ManagerTarget Server Memory (KB)
Memory ManagerTarget Server Memory(KB)
Memory ManagerTotal Server Memory (KB)
Memory ManagerTotal Server Memory(
KB)

SQL StatisticsSQL Compilations/sec
SQL StatisticsSQL Re-Compilations/sec

Locks(_Total)Lock Requests/sec
Locks(_Total)Lock Waits/sec
Locks(_Total)Lock Wait Time (ms)
Locks(_Total)Lock Timeouts (timeout > 0)/sec
Locks(_Total)Number of Deadlocks/sec

このログを使用して PAL Tool でレポートを作成することが可能となります。

 

■Performance Analysis of Logs (PAL) Tool

 

PAL Tool はパフォーマンスモニタで取得した情報を解析しレポートを作成することができるツールになります。
# PowerShell 2.0 と .NET Framework 3.5 の Chart Control が必要になります。
Live Monitor では、PAL Tool の [Microsoft SQL Server 2005/2008] のテンプレートに合わせた情報を取得していますので、取得したデータをすぐに PAL Tool にかけてレポートを作成することが可能です。

こちらが PAL Tool を起動した画面になります。
image

レポートの作り方は簡単で、[Counter Log] から Live Monitor で取得したパフォーマンスモニタのログデータを選択し、
image

[Threshold File] から、[SQL Server 2005/2008] をテンプレートとして設定をし、
image

[Execute] から [Finish] をクリックすることでレポートを作成することが可能です。
image

そうすると裏で PowerShell が実行されレポートが作成されます。
image

PAL Tool の実行が完了するとこのようなレポートが生成されます。
# デフォルトだと PAL Tool を実行したユーザーの [ドキュメントPAL Reports] に出力されます。
image

CPU の使用率の警告やメモリの空きの警告など基本的な情報を出力してくれるほかに SQL Server 固有のレポートが生成されます。
たとえば、Page Life Expectancy は 300 以上を推移しているのが良好な状態というのが定番になっていますが、そのレポートに関しても作成がされています。
# 300 を超えていない場合は赤くなって警告のレポートが作成されます。
image

こちらは CPU の使用率のグラフになるのですが、80%~100% は注意が必要な範囲 (Critical) なので赤くなっているのが確認できます。
以下のグラフでは瞬間的に Clitical の領域に達していることが確認できます。

image

ただし、別のグラフ (Processor の Queue) では Warning / Critical には達していませんので瞬間的な CPU の負荷であって、CPU のスペックの限界までは達していない (処理能力には余裕がある) 状態であると考察することができます。
image

Live Monitor で取得したデータを基に SQL Server の状態と、サーバーの基本的な状態をレポートとして確認をできますので、複数のグラフを見比べサーバーの状態を確認することが可能となります。

パフォーマンス チューニングではベースラインとして現状を確認することが重要になりますので、これらのツールを組み合わせると一からベースライン情報の取得を考えなくてもよいので楽になるかと思います。

グラフをどう読み解いていくかが難しいところではあるのですが、最初の一歩としては Warning / Critical となっている箇所を注視して、他のグラフと重ね合わせていくとよいのかな~と。

Written by Masayuki.Ozawa

11月 12th, 2010 at 12:15 am

Posted in SQL Server

Microsoft SQL Server code-named ‘Denali’ CTP1 の提供開始

leave a comment

本日 [Microsoft SQL Server code-named ‘Denali’ CTP1] の提供が開始されました。

Code Name Denali ですが、次期 SQL Server の CTP 版になります。
# SQL Server 2011 になるのかなと。
image

SSMS が VIsutal Studio 2010 ベース (.NET Framework 4.0 もインストールされます) に変更されています。
image

SSMS が刷新され、レポートが Word 形式でもエクスポートできるようになりました。
image

PDF のレポートに関してもフォントが埋め込まれるようになったみたいですね。
image

Availability Groups という機能が増えているようなのですが、これは WSFC の必要があるようですね。

image

日本語の照合順序に関しては、[Japanese_XJIS_100] が最新のようですね。
image

 

まだ、ヘルプが見れないので新規にどのような機能が入ったのかは調べられていないのですがクラスタに関しては今週中に構築してみたいと思います。

Written by Masayuki.Ozawa

11月 9th, 2010 at 9:55 pm

Posted in SQL Server

Tagged with