SE の雑記

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

Archive for the ‘SQL Server’ Category

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

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

Resource データベースについて

leave a comment

先日、
@IT などを運営されている
アイティメディア株式会社様

の会議スペースをお借りして開催された、SQL Server の勉強会に参加をしてきました。

その勉強会の中で SQL Server の [Resource] データベースについて質問を受けたので、このデータベースについて少し書いてみたいと思います。

Resource データベースに関しては、Books Online で以下のように記載されています。

Resource データベースは、読み取り専用のデータベースで、SQL Server に含まれるすべてのシステム オブジェクトがこれに格納されます。
SQL Server システム オブジェクト (sys.objects など) は、物理的には Resource データベースに保存されていますが、論理的にはすべてのデータベースの sys スキーマ内にあるように扱われます。
Resource データベースには、ユーザーのデータやユーザーのメタデータは保持されません。

各データベースのシステムビューやシステムストアドプロシージャーなどで使用されている、[sys.xxxx] 関連の情報は [Resource] データベースの内容を透過的に参照している形になります。
# Resource データベースは SSMS (SQL Server Management Studio) には表示されません。
imageimage

普段何気なく使用している、[sys.master_files] のようなシステムビューですが、これは [ビュー] と名前がついている用に実体ではなく、実表を参照しているものになります。

ではこの実体はどこに格納されているかというと実体は [master] データベースに保存されています。
試しに [sys.master_files] のビュー定義を確認してみたいと思います。
確認するためには、[SELECT OBJECT_DEFINITION(OBJECT_ID(‘sys.master_files’))] というように OBJECT_DEFINITION を使います。

CREATE VIEW sys.master_files AS  
SELECT
    database_id  = f.dbid,
    file_id   = f.fileid,
    file_guid   = f.fileguid,
    type   = f.filetype,
    type_desc  = ft.name,
    data_space_id  = f.grpid,
    name    = f.lname,
    physical_name  = f.pname,
    state   =
        convert(tinyint,
            case f.filestate  — Map enum EMDFileState to AvailablityStates         
                when 0 then 0 when 10 then 0 — ONLINE       
                when 4 then 7 — DEFUNCT       
                when 5 then 3
                when 9 then 3 — RECOVERY_PENDING       
                when 7 then 1
                when 8 then 1
                when 11 then 1 — RESTORING       
                when 12 then 4 — SUSPECT       
            else 6 end), — OFFLINE   
    state_desc  = st.name,
    f.size,
    max_size    = f.maxsize,
    f.growth,
    is_media_read_only  = sysconv(bit, f.status & 8),  — FIL_READONLY_MEDIA
    is_read_only    = sysconv(bit, f.status & 16), — FIL_READONLY
    is_sparse    = sysconv(bit, f.status & 256), — FIL_SPARSE_FILE
    is_percent_growth  = sysconv(bit, f.status & 32), — FIL_PERCENT_GROWTH
    is_name_reserved  = sysconv(bit, case f.filestate when 3 then 1 else 0 end), — x_efs_DroppedReusePending
    create_lsn   = GetNumericLsn(f.createlsn),
    drop_lsn    = GetNumericLsn(f.droplsn),
    read_only_lsn   = GetNumericLsn(f.readonlylsn),
    read_write_lsn  = GetNumericLsn(f.readwritelsn),
    differential_base_lsn = GetNumericLsn(f.diffbaselsn),
    differential_base_guid = f.diffbaseguid,
    differential_base_time = nullif(f.diffbasetime, 0),
    redo_start_lsn   = GetNumericLsn(f.redostartlsn),
    redo_start_fork_guid = f.redostartforkguid,
    redo_target_lsn  = GetNumericLsn(f.redotargetlsn),
    redo_target_fork_guid = f.forkguid,
    backup_lsn   = GetNumericLsn(f.backuplsn)
FROM
    master.sys.sysbrickfiles f
    LEFT JOIN
        sys.syspalvalues st
        ON
        st.class = ‘DBFS’
        AND
        st.value = f.filestate
    LEFT JOIN
        sys.syspalvalues ft
        ON         ft.class = ‘DBFT’
        AND ft.value = f.filetype
WHERE
    f.dbid < 0x7fff — consistent with sys.databases
    AND
    f.pruid = 0
    AND
    f.filestate NOT IN (1, 2) — x_efs_Dummy, x_efs_Dropped
    AND
    has_access(‘MF’, 1) = 1 

ビューの元になるデータは [master.sys.sysbrickfiles] というテーブルになっています。
Resource データベースはこのようなシステムビューやシステムストアドプロシージャを格納し、master 上に格納されている情報を透過的に見せるために使用されています。
# 今回のベース表になっている、[master.sys.sysbrickfiles] は直接参照できないので。

この Resource データベースですが、以下の 2 つのファイルから構成されています。

  • mssqlsystemresource.mdf
  • mssqlsystemresource.ldf

通常、システムデータベースは
[C:Program FilesMicrosoft SQL ServerMSSQL10_50.<インスタンス ID>MSSQLDATA]
というディレクトリに格納されるのですが、リソースデータベースのファイルは、
[C:Program FilesMicrosoft SQL ServerMSSQL10_50.<インスタンス ID>MSSQLBinn]
に格納がされます。
インスタンスのプログラム扱いでファイルが格納されていますね。

この Resource データベースですが、バージョンがあり [SELECT SERVERPROPERTY(‘ResourceVersion’)] というクエリを実行することでバージョンを確認することができます。

このバージョンですが、SQL Server のバージョンと一致するようで、

  • SQL Server 2008 R2 RTM : [10.50.1600]
  • SQL Server 2008 R2 CU4 : [10.50.1746]

となります。

修正プログラムをインストールすると、Resource データベースのバージョンも更新されます。

Resouce データベースには実データではなく実データを見せるための定義が格納されているので、Books Online で

SQL Server では、Resource データベースをバックアップできません。
ファイル ベースまたはディスク ベースのバックアップは、mssqlsystemresource.mdf ファイルをデータベース ファイルではなくバイナリ (.EXE) ファイルのように実行できますが、SQL Server を使用してバックアップを復元することはできません。
mssqlsystemresource.mdf のバックアップ コピーの復元は手動でのみ実行できます。
また、現在の Resource データベースを古いバージョンや安全でない可能性のあるバージョンで上書きしないように注意する必要があります。

と書かれているのは、実データは含まれず定義のみが格納されており適切なバージョンの SQL Server をインストールすれば最適な状態になるからだと思います。

 

Resource データベースは SSMS に表示がされないので通常はどのような情報が格納されているのか見ることはできないのですが、実はデータベースのファイルをコピーしてアタッチすることで内容を確認することができます。
# mssqlsystemresource.mdf / ldf は読み取り専用で SQL Server 上で認識されているのでオンラインでもコピー可能です。

通常のアタッチでは、以下のようなエラーになります。
image
image

このエラーですが、[mssqlsystemresource] というデータベース名でアタッチをしようとしたために発生しています。
# Resource データベースですが内部的には、[mssqlsystemresource] で認識されているためだと思います。

[次の名前でアタッチ] のデータベースの名前を変更することで Resource データベースをアタッチすることが可能です。
今回は、Resource というデータベース名でアタッチしています。
image

アタッチをすることで Resource データベースの内容を直接確認することが可能になります。
image

通常、[sys.xxxxx] はシステム ビューやシステム ストアド プロシージャーとして認識されているのですが、アタッチした Resource データベースではユーザービュー / ユーザー ストアド プロシージャーとして認識がされます。
# システムビューやシステム ストアド プロシージャーとしても認識はされるのですが。

imageimage

システム ビュー / システム ストアド プロシージャーの状態では、スクリプト化ができないため [OBJECT_DEFINITION] を介して定義を確認していました。
image

ユーザーオブジェクトになっていればスクリプト化が可能なため、[sys.xxxx] といったものも簡単に内容を確認できます。
imageimage

 

Resource データベースは SQL Server 2005 になってから搭載されたものなのですが、通常使用している中ではあまり意識はしないので、どんなデータが入っているのかイメージがしにくいのですよね…。
# 私は、sys. 系の定義が入っているだけだと考えているのですが。

Written by Masayuki.Ozawa

11月 7th, 2010 at 10:54 pm

Posted in SQL Server

SQL Server 2008 SP1 CU8 スリップストリーム インストール時の注意点

leave a comment

SQL Server 2008 はスリップストリームインストールで Service Pack と Cumulative Update を同時にインストールすることが可能です。

ただし、SP1 最新のSQL Server 2008 SP1 CU8 をスリップストリームインストールしようとすると以下のエラーが発生します。
image

この情報については、以下の技術情報に記載されています。
SQL Server 2008 のインストールを更新またはスリップストリームする方法

この技術情報の中に、[必要な属性 ‘Path’ が見つかりません。] のエラーが表示された場合の対処方法が記載されています。
# このエラーの発生は、[累積的な更新プログラム パッケージ 8 以降] となっていますが、これは SP1 RU8 以降が対象となります。

回避方法としては以下の方法が記載されています。

方法 1
累積的な更新プログラム パッケージを抽出した場所

CU8<CPU>setupsqlsupport.msi

から、特定のアーキテクチャに対する SQL サポート .msi ファイルを手動でインストールします。
方法 2
ローカル フォルダーからセットアップを開始する前に、オプション 2 の手順 4. で示されているファイルに加えて、次の手順で示されているファイルをコピーする必要があります。ファイルをコピーするには、以下の手順を実行します。

  1. Microsoft.SQL.Chainer.Package.dll ファイルを、RTM フォルダーから、<メディア><アーキテクチャ フォルダー> フォルダーのローカル コピーにコピーします。
  2. Sqlsupport.msi ファイルをコピーします。次の最初の場所から、2 番目の場所のローカル コピーに、ファイルをコピーします。

    C:<kb_number_of_hotfix package><アーキテクチャ>setupSqlsupport.msi

    <メディア><アーキテクチャ フォルダー>setup

簡単に書いてしまうと CU8 のインストーラーに同梱されているサポートツールをインストールしてから、スリップストリームインストールを実行するということが書かれています。

サポートツールは [Setup] ディレクトリ内に各言語別に用意されているのですが、CU8 のインストーラーには 1041 (日本語) のセットアップツールが含まれていません…。
# 1031 は英語用のディレクトリになります。
image

英語用のディレクトリ内にある、[sqlsupport.msi] をインストールすれば、SP1 CU8 をスリップストリームインストールできるようになるのですが、セットアップが英語になってしまいます…。
image

英語のサポートツールをインストールしても、インストールされる SQL Server の LCID は [1041] で、[SqlCharSetName] は [cp932] となっているのですが。

 

日本語のセットアップツールを使ってスリップストリームインストールしたい場合は、現状は SP2 のサポートツールをインストールしてからスリップストリームインストールすることでエラーが発生しなくなります。

まずは、SP2 のインストールモジュールを展開します。
展開に使用するコマンドは以下のような形式になります。

c:tempSP2SQLServer2008SP2-KB2285068-x64-JPN.exe /extract:c:SP2

展開が終わったら、 [x64setup1041sqlsupport.msi] を実行して SP2 のサポートツールをインストールします。
image

 

サポートツールのインストールが終了したら通常のスリップストリームインストールの方法と同じ形式でコマンドを実行してインストールを行います。

setup.exe /PCUSource="C:SP1" /CUSource="C:SP1CU8"

SP2 のサポートツールであれば、SP1 CU8 をスリップストリームインストールすることが可能です。
image

SP2 は最近リリースされたものなので、この方法も最近になって使えるようになったものですが…。
SP2 がリリースされている状態で SP1 CU8 を新規にインストールする機会は少ないかもしれませんがメモとして。

2010/10/3 追記

CU には以前から英語のセットアップサポートツールしか含まれていないですね。
全言語用のサポートツール入れていたらかなりのサイズになってしまうので、現在のモジュール構成は納得。

Written by Masayuki.Ozawa

10月 3rd, 2010 at 8:13 pm

Posted in SQL Server

Tagged with

SQL Server 2008 R2 のデータベースエンジンをコマンドでインストール

leave a comment

ちょっと検証で、SQL Server 2008 R2 の環境を作ったり壊したりしていました。

GUI からセットアップするのもちょっと面倒なので、コマンドでインストールするためのコマンドラインを。

 

■SQL Server 2008 R2 をコマンドでインストール

SQL Server 2008 R2 をコマンドでインストールするためにはコマンドプロンプトから [Setup.exe] を実行します。
インストールのオプションに関しては、[Setup.exe /?] か Books Online で [コマンド プロンプトから SQL Server 2008 R2 をインストールする方法] を検索すると調べることが可能です。

コマンドプロンプトからのインストールはシステム データベースの再構築でも使うのですが、普段はそれほど実行する機会はないですよね…。

以下のコマンドで、SQL Server のデータベースエンジン部をインストールすることが可能です。
# WordPress だと改行が微妙なので、オプション単位で改行していますが一行で。

setup.exe 
/QS
/IACCEPTSQLSERVERLICENSETERMS
/INSTANCENAME=SQL2008R2
/ACTION=INSTALL
/FEATURES=SQL
/SQLSVCACCOUNT="SYSTEM"
/SQLSYSADMINACCOUNTS="Administrators"
/AGTSVCACCOUNT="SYSTEM"
/SQLCOLLATION="Japanese_XJIS_100_CI_AS"
/SQLUSERDBDIR="F:Data"
/SQLUSERDBLOGDIR="G:Log"
/SQLTEMPDBDIR="E:Data"
/SQLTEMPDBLOGDIR="E:Log"
/AGTSVCSTARTUPTYPE="Automatic"

 

SQL Server のインストールは構成ファイルでも実行することができるので、以下のような構成ファイルからも実行できます。

[SQLSERVER2008]
IACCEPTSQLSERVERLICENSETERMS=TRUE
INSTANCENAME=SQL2008R2
ACTION=INSTALL
FEATURES=SQL
SQLSVCACCOUNT="SYSTEM"
SQLSYSADMINACCOUNTS="Administrators"
AGTSVCACCOUNT="SYSTEM"
SQLCOLLATION="Japanese_XJIS_100_CI_AS"
SQLUSERDBDIR="F:Data"
SQLUSERDBLOGDIR="G:Log"
SQLTEMPDBDIR="E:Data"
SQLTEMPDBLOGDIR="E:Log"
AGTSVCSTARTUPTYPE="Automatic"

 

この構成ファイルを使うようにセットアップを実行すると、インストールを自動化することができます。
構成ファイルを使う場合、セットアップは以下の形式で実行します。

setup.exe /QS /ConfigurationFile="H:InstallConfigConfig.ini"

 

構成ファイルに関しては GUI のインストールでも使用できます。
セットアップの [詳細設定][構成ファイルに基づくインストール] をクリックして構成ファイルを選択することで使用可能です。
image

image

ただし、GUI から構成ファイルを使用したセットアップでは自動化されません。
構成ファイルに設定した内容がデフォルトで選択された状態になってインストールをすることができます。
image

検証で環境を作り直したりする場合は、コマンドで実行するのが楽でよいですね。

Written by Masayuki.Ozawa

10月 2nd, 2010 at 7:30 pm

Posted in SQL Server

Tagged with

SQL Azure のインデックス関連で使用できる T-SQL について

leave a comment

先日は統計情報関連で使用できる T-SQL について投稿したので、今回はインデックス関連について。

今回も以下の技術情報を元にしています。
Transact-SQL Reference (SQL Azure Database)

■システムストアドプロシージャ

sp_helpindex テーブルまたはビューのインデックスに関する情報をレポートします。

?

■システムビュー

sys.index_columns sys.indexes インデックスまたは順序付けられていないテーブル (ヒープ) の一部である列ごとに 1 つの行を含みます。
sys.indexes テーブル、ビュー、テーブル値関数など、テーブル オブジェクトのインデックスまたはヒープごとに 1 行のデータを格納します。

?

■T-SQL ステートメント

※ SQL Azure では、オンプレミスの SQL Server と構文 (使用できるオプション) が異なります。

ALTER INDEX インデックスの無効化、再構築、再構成によって、またはインデックスに関するオプションの設定によって、既存のテーブルやビュー インデックス (リレーショナルまたは XML) を変更します。
CREATE INDEX 指定のテーブルまたは指定のテーブルのビューに、リレーショナル インデックスを作成します。
CREATE SPATIAL INDEX 指定したテーブルと列に空間インデックスを作成します。
DROP INDEX DROP INDEX ステートメントを使用すると、現在の SQL Server データベースからインデックスを削除できます。

?

ざっと技術情報を見たところではこの辺がインデックス関連で使用できる T-SQL になるようですね。

[T-SQL ステートメント] に関しては、SQL Azure ではオンプレミスの SQL Server とは使えるオプションが異なっています。

いくつか見落としがあるかもしれませんが、インデックスに特化したものはそれほど数はないみたいですね。

Written by Masayuki.Ozawa

8月 23rd, 2010 at 12:50 pm

Posted in SQL Server

Spotlight on SQL Server で SQL Azure に接続

one comment

今日は外出時の移動の際に [Windows Azure実践クラウド・プログラミングfor C#/Visual Basic/PHP] を読んでいました。
書籍の中に、[アプリケーションの監視 / ロギング – 診断モニタ ?] という章があり、その中にパフォーマンスモニタについての
記載があります。
移動中にこの章を読んでいました。

最近、SQL Azure を少しずつ触っているのですが、SQL Azure のパフォーマンス情報はどのように取得すればよいのだろうと
ふと思いました。

そういえば Spotlight on SQL Server は SQL Azure にも対応していたな~と思いさっそく試してみました。

?

■Spotlight on SQL Server の入手

Spotlight on SQL Server の提供元である Quest 社のホームページから 30 日のトライアル版を入手することが可能です。
SpotlightR on SQL Server Enterprise

?

■Spotlight on SQL Server のインストール

Spotlight on SQL Server ですが、実行する端末または他の端末に情報収集用のデータベースを作成する必要があります。
# 昔のバージョンだと、空のデータベースがあれば良かったはずなのですが、現在の Spotlight on SQL Server は診断サーバー用の
機能をインストールして情報収集用のデータベースを作成する必要があるようです。

今回は Spotlight on SQL Server をインストールする端末として、

  • Windows 7 x86 Enterprise Edition
  • SQL Server 2008 R2 Developer Edition

がインストールされている環境を用意しました。

SQL Server 2008 R2 Developer Edition ではデフォルトで [TCP/IP] が無効になっているので、TCP/IP での接続を許可するよう
SQL Server 構成マネージャーで設定をしておきます。

image

それでは、Spotlight on SQL Server のインストールを開始します。

  1. Spotlight on SQL Server のインストーラーを実行します。
    image
  2. [Typical] を選択します。
    ?image
  3. [Install Spotlight Client] と [Install Diagnostic Server] を選択 (デフォルト) して、[Next] をクリックします。
    image
  4. [I accept the license agreement] を選択して、[Next] をクリックします。
    image
  5. [Install Diagnostic Server on this computer] を選択 (デフォルト) して、[Next] をクリックします。
    image
  6. 診断サーバーのサービスアカウントを指定し、[Next] をクリックします。
    今回は [Use the local System account] を選択して、ローカルシステムアカウントでサービスを起動します。
    image
  7. 管理者とユーザーアカウントについては、デフォルトの状態にして、[Next] をクリックします。
    デフォルトだと両設定にインストーラーの起動アカウントが設定されるようです。
    image
  8. [Create] をクリックします。
    image
  9. [Create] をクリックします。
    image
  10. [OK] をクリックします。
    image
  11. 今回はローカルインスタンス上に過去データ用のデータベースを作成していますので [Instance] に [localhost] を設定して、
    [Next] をクリックします。
    image
  12. [Next] をクリックします。
    image
  13. [Start] をクリックして、インストールを開始します。
    image
    image?
  14. [Finish] をクリックしてインストールを完了します。
    image

以上でインストールは完了です。

?

続いて本番、SQL Azure に接続をしたいと思います。

SQL Azure には、[SQLAzure] というデータベースを作成してあります。
image
Spotlight on SQL Server から接続ができるように SQL Azure のファイアウォールも設定済みです。
image

?

■Spotlight on SQL Server で SQL Azure に接続

それでは、Spotlight on SQL Server を使用して SQL Azure に接続をしてみたいと思います。

  1. Spotlight on SQL Server を起動します。
    image
  2. [SQL Azure] を選択して、右クリック → [Connection manager] をクリックします。
    image
  3. [Add new connection] をダブルクリックします。
    image
  4. 準備した SQL Azure への接続情報を入力して、[OK] をクリックします。
    # ユーザー名は [@サーバー名] で修飾せず、ユーザー名だけ入力すれば問題ありません。
    image
  5. コネクション設定が作成されますので作成された設定をダブルクリックします。
    image

以上で、SQL Azure への接続は終了です。
SQL Azure に接続をすると以下のような情報を取得することが可能です。
image

こちらが、SQL Server 2008 R2 の情報を取得した画面になります。
image

Spotlight on SQL Server で取得できる情報ですが、オンプレミスの SQL Server と比較するとかなり少ない情報になっているようですね。

どのような情報が実際に取得できるかは別の機会にまとめてみたいと思います。

Written by Masayuki.Ozawa

8月 22nd, 2010 at 10:22 pm

Posted in SQL Server

SQL Azure の統計情報関連で使用できる T-SQL について

one comment

Tech・Ed で Azure コミュニティの話もあるので最近は SQL Azure の勉強などをちょくちょくしています。

今日は SQL Azure の統計情報関連で使用できる T-SQL について調べてみました。
以下の技術情報を元にしています。
Transact-SQL Reference (SQL Azure Database)

?

■システム関数

STATS_DATE テーブルまたはインデックス付きビューの統計の最終更新日を返します。

?

■システムストアドプロシージャ

sp_autostats インデックス、統計オブジェクト、テーブル、またはインデックス付きビューの自動統計更新オプション (AUTO_UPDATE_STATISTICS) を表示または変更します。
sp_createstats CREATE STATISTICS ステートメントを呼び出して、統計オブジェクトの最初の列になっていない列の統計を 1 列ずつ作成します。
sp_helpstats 指定したテーブルの列およびインデックスに関する統計を返します
sp_statistics 指定したテーブルまたはインデックス付きビュー上にあるすべてのインデックスおよび統計の一覧を返します。
sp_updatestats 現在のデータベース内にあるすべてのユーザー定義テーブルと内部テーブルに対して UPDATE STATISTICS を実行します。

?

■システムビュー

sys.stats U、V、または TF 型の表形式オブジェクトの統計ごとに 1 行のデータを保持します。
sys.stats_columns sys.stats 統計の一部である列ごとに 1 行のデータを保持します。

?

■T-SQL ステートメント

CREATE STATISTICS テーブルまたはインデックス付きビューの 1 つまたは複数の列で、クエリの最適化に関する統計 (フィルター選択された統計情報を含む) を作成します。
DBCC SHOW_STATISTICS テーブルまたはインデックス付きビューについての、現在のクエリの最適化に関する統計を表示します。
DROP STATISTICS 現在のデータベースの指定されたテーブル内で、複数のコレクションの統計を削除します。

?

■データベースプロパティ (DATABASEPROPERTYEX)

IsAutoCreateStatistics 初期値:1 (TRUE) クエリのパフォーマンスを向上させるために、クエリ オプティマイザーが必要に応じて 1 列ずつの統計を作成します。
IsAutoUpdateStatistics 初期値:1 (TRUE) クエリで使用される既存の統計が古くなっている可能性がある場合、クエリ オプティマイザーによって更新されます。

?

統計情報関連としてはこれらを利用することが可能となっているようです。

STATS_DATE 関数が使えるので、統計情報が更新されたタイミングがわかるかな~と思ったのですが、SQL Azure では、NULL に
なってしまって更新日がうまく取得できませんでした…。
統計情報の自動更新はデフォルトで有効になっているのですが、データのサイズによっては実データとの乖離が発生する可能性が
ありますので、統計情報がいつ更新されたかが取得できるとデータベース管理者としてはうれしいのですけども。

SQL Azure も SQL Server 2008 R2 とベースは同じですので、最適なクエリの実行プランを選択するためには
統計情報は重要になってくると思いますので必要に応じた定期的な統計情報のメンテナンスは実施する必要があります。

SQL Azure には SQL Server Agent サービスがないので、SQL Azure 以外の機能で定期的にメンテナンスする必要がありますが。
# 開発をやらないのでこの辺のスキルが薄い…。

こういう情報調べるのって楽しいです♪

Written by Masayuki.Ozawa

8月 21st, 2010 at 2:09 pm

Posted in SQL Server

SQL Azure で使用可能な動的管理ビュー

leave a comment

今日は通勤中に SQL Azure の自習書を読んでいました。

SQL Azure 入門

読んでいて SQL Azure で動的管理ビュー (DMV) はどの程度使用できるんだろうというのが気になりました。
自習書の中に System Views (SQL Azure Database) へのリンクがあり、この技術情報が使用可能な
DMV についての情報となるようですね。

この技術情報の中に [Dynamic Management Views] というセクションがあり DMV について記載されています。

SQL Server 2008 R2 の SSMS で SQL Azure に接続して、システムビューから利用可能な DMV を確認してみました。
# 技術情報の英語を読むのを逃げました…。

DMV 名 説明 (BOL から抜粋)
sys.dm_database_copies (*) BOL には記載なし (SQL Azure 特有の DMV)
sys.dm_db_partition_stats 現在のデータベースのパーティションごとに、ページ数と行数の情報を返します。
sys.dm_exec_connections このインスタンスの SQL Server との間に確立された接続に関する情報と各接続の詳細を返します。
sys.dm_exec_query_stats キャッシュされたクエリ プランの集計パフォーマンス統計を返します
sys.dm_exec_requests SQL Server 内で実行中の各要求に関する情報を返します。
sys.dm_exec_sessions SQL Server での認証済みセッションごとに 1 行を返します。
sys.dm_tran_active_transactions SQL Server のインスタンスのトランザクションに関する情報を返します。
sys.dm_tran_database_transactions データベース レベルのトランザクションに関する情報を返します。
sys.dm_tran_locks 現在アクティブなロック マネージャのリソースに関する情報を返します。
sys.dm_tran_session_transactions 関連付けられたトランザクションとセッションの相関関係情報を返します。

(*) master データベースにのみ存在している DMV

この中で、[sys.dm_database_copies] に関しては SQL Azure 特有の DMV になるようですね。
SQL Server 2008 R2 のBooks Online (BOL) にはこの DMV についての記載はありませんでした。

自習書にも書かれていたのですが、現在インデックスの断片化を見ることができる DMV は現在、提供されていないのですね。
インデックスの断片化や欠落したインデックス (missing index) は SQL Azure でも見れると便利そうなのですがこの辺は今後に期待でしょうか。

SQL Azure を運用する際に、データベースエンジニアとしてどのようにして DB のヘルスチェックをするかは見れる情報が
限定されているので悩ましいですね。

Written by Masayuki.Ozawa

8月 16th, 2010 at 2:47 pm

Posted in SQL Server

SQL Server 2008 R2 と SQL Azure のサーバー / データベースプロパティの比較

leave a comment

最近、SQL Server に触ることもなかったので久しぶりに勉強を。

SQL Server 2008 R2 と SQL Azure のサーバープロパティ / データベースプロパティはどのくらい違うのかが
気になったので調べてみました。

■サーバープロパティの比較

まずはサーバープロパティの比較から。

使用した SQL は以下になります。
SQL Server 2008 R2 / SQL Azure 共に同じ SQL で実行可能です。

SELECT
SERVERPROPERTY(‘BuildClrVersion’) AS BuildClrVersion,
SERVERPROPERTY(‘Collation’) AS Collation,
SERVERPROPERTY(‘CollationID’) AS CollationID,
SERVERPROPERTY(‘ComparisonStyle’) AS ComparisonStyle,
SERVERPROPERTY(‘ComputerNamePhysicalNetBIOS’) AS ComputerNamePhysicalNetBIOS,
SERVERPROPERTY(‘Edition’) AS Edition,
SERVERPROPERTY(‘EditionID’) AS EditionID,
SERVERPROPERTY(‘EngineEdition’) AS EngineEdition,
SERVERPROPERTY(‘InstanceName’) AS InstanceName,
SERVERPROPERTY(‘IsClustered’) AS IsClustered,
SERVERPROPERTY(‘IsFullTextInstalled’) AS IsFullTextInstalled,
SERVERPROPERTY(‘IsIntegratedSecurityOnly’) AS IsIntegratedSecurityOnly,
SERVERPROPERTY(‘IsSingleUser’) AS IsSingleUser,
SERVERPROPERTY(‘LCID’) AS LCID,
SERVERPROPERTY(‘LicenseType’) AS LicenseType,
SERVERPROPERTY(‘MachineName’) AS MachineName,
SERVERPROPERTY(‘NumLicenses’) AS NumLicenses,
SERVERPROPERTY(‘ProcessID’) AS ProcessID,
SERVERPROPERTY(‘ProductVersion’) AS ProductVersion,
SERVERPROPERTY(‘ProductLevel’) AS ProductLevel,
SERVERPROPERTY(‘ResourceLastUpdateDateTime’) AS ResourceLastUpdateDateTime,
SERVERPROPERTY(‘ResourceVersion’) AS ResourceVersion,
SERVERPROPERTY(‘ServerName’) AS ServerName,
SERVERPROPERTY(‘SqlCharSet’) AS SqlCharSet,
SERVERPROPERTY(‘SqlCharSetName’) AS SqlCharSetName,
SERVERPROPERTY(‘SqlSortOrder’) AS SqlSortOrder,
SERVERPROPERTY(‘SqlSortOrderName’) AS SqlSortOrderName,
SERVERPROPERTY(‘FilestreamShareName’) AS FilestreamShareName,
SERVERPROPERTY(‘FilestreamConfiguredLevel’) AS FilestreamConfiguredLevel,
SERVERPROPERTY(‘FilestreamEffectiveLevel’) AS FilestreamEffectiveLevel

?

実行結果がこちら。

? SQL Server 2008 R2 SQL Azure
BuildClrVersion v2.0.50727 NULL
Collation <インストール時の照合順序> SQL_Latin1_General_CP1_CI_AS
CollationID 315464 872468488
ComparisonStyle 196609 196609
ComputerNamePhysicalNetBIOS <サーバー名> NULL
Edition <エディション名> SQL Azure
EditionID -2117995310 1674378470
EngineEdition 3 5
InstanceName <インスタンス名> NULL
IsClustered 0 NULL
IsFullTextInstalled 1 0
IsIntegratedSecurityOnly 0 0
IsSingleUser 0 0
LCID 1041 1033
LicenseType DISABLED DISABLED
MachineName <サーバー名> NULL
NumLicenses NULL NULL
ProcessID 1488 NULL
ProductVersion 10.50.1600.1 10.25.9386.0
ProductLevel RTM RTM
ResourceLastUpdateDateTime 2010-04-02 17:38:24.957 2010-06-16 17:08:33.043
ResourceVersion 10.50.1600 10.25.9346
ServerName <サーバー名><インスタンス名> <サーバー名>
SqlCharSet 109 1
SqlCharSetName cp932 iso_1
SqlSortOrder 0 52
SqlSortOrderName bin_ascii_8 nocase_iso
FilestreamShareName <共有名> NULL
FilestreamConfiguredLevel 0 0
FilestreamEffectiveLevel 0 0

2008 R2 の環境は日本語なのですが、キャラセット系はやはり異なりますね。
SQL Azure ではフルテキスト検索がインストールされていないんですね。

■データベースプロパティの比較

続いては、master データベースのプロパティを比較してみました。
# ユーザーデータベースも比較したのですが同じだったのでこちらを。

使用した SQL はこちらになります。

SELECT
DATABASEPROPERTYEX (N’master’,’Collation’) AS Collation,
DATABASEPROPERTYEX (N’master’,’ComparisonStyle’) AS ComparisonStyle,
DATABASEPROPERTYEX (N’master’,’IsAnsiNullDefault’) AS IsAnsiNullDefault,
DATABASEPROPERTYEX (N’master’,’IsAnsiNullsEnabled’) AS IsAnsiNullsEnabled,
DATABASEPROPERTYEX (N’master’,’IsAnsiPaddingEnabled’) AS IsAnsiPaddingEnabled,
DATABASEPROPERTYEX (N’master’,’IsAnsiWarningsEnabled’) AS IsAnsiWarningsEnabled,
DATABASEPROPERTYEX (N’master’,’IsArithmeticAbortEnabled’) AS IsArithmeticAbortEnabled,
DATABASEPROPERTYEX (N’master’,’IsAutoClose’) AS IsAutoClose,
DATABASEPROPERTYEX (N’master’,’IsAutoCreateStatistics’) AS IsAutoCreateStatistics,
DATABASEPROPERTYEX (N’master’,’IsAutoShrink’) AS IsAutoShrink,
DATABASEPROPERTYEX (N’master’,’IsAutoUpdateStatistics’) AS IsAutoUpdateStatistics,
DATABASEPROPERTYEX (N’master’,’IsCloseCursorsOnCommitEnabled’) AS IsCloseCursorsOnCommitEnabled,
DATABASEPROPERTYEX (N’master’,’IsFulltextEnabled’) AS IsFulltextEnabled,
DATABASEPROPERTYEX (N’master’,’IsInStandBy’) AS IsInStandBy,
DATABASEPROPERTYEX (N’master’,’IsLocalCursorsDefault’) AS IsLocalCursorsDefault,
DATABASEPROPERTYEX (N’master’,’IsMergePublished’) AS IsMergePublished,
DATABASEPROPERTYEX (N’master’,’IsNullConcat’) AS IsNullConcat,
DATABASEPROPERTYEX (N’master’,’IsNumericRoundAbortEnabled’) AS IsNumericRoundAbortEnabled,
DATABASEPROPERTYEX (N’master’,’IsParameterizationForced’) AS IsParameterizationForced,
DATABASEPROPERTYEX (N’master’,’IsQuotedIdentifiersEnabled’) AS IsQuotedIdentifiersEnabled,
DATABASEPROPERTYEX (N’master’,’IsPublished’) AS IsPublished,
DATABASEPROPERTYEX (N’master’,’IsRecursiveTriggersEnabled’) AS IsRecursiveTriggersEnabled,
DATABASEPROPERTYEX (N’master’,’IsSubscribed’) AS IsSubscribed,
DATABASEPROPERTYEX (N’master’,’IsSyncWithBackup’) AS IsSyncWithBackup,DATABASEPROPERTYEX (N’master’,’IsTornPageDetectionEnabled’) AS IsTornPageDetectionEnabled,
DATABASEPROPERTYEX (N’master’,’LCID’) AS LCID,
DATABASEPROPERTYEX (N’master’,’Recovery’) AS Recovery,
DATABASEPROPERTYEX (N’master’,’SQLSortOrder’) AS SQLSortOrder,
DATABASEPROPERTYEX (N’master’,’Status’) AS Status,
DATABASEPROPERTYEX (N’master’,’Updateability’) AS Updateability,
DATABASEPROPERTYEX (N’master’,’UserAccess’) AS UserAccess,
DATABASEPROPERTYEX (N’master’,’Version’) AS Version

?

注意点としては、SQL Azure ではフルテキスト検索が使えませんので、SQL Azure で実行する場合は、
[DATABASEPROPERTYEX (N’master’,’IsFulltextEnabled’) AS IsFulltextEnabled,] の行はコメント化する必要があります。

? SQL Server 2008 R2 SQL Azure
Collation <サーバーレベルの照合順序> SQL_Latin1_General_CP1_CI_AS
ComparisonStyle 196609 196609
IsAnsiNullDefault 0 0
IsAnsiNullsEnabled 0 0
IsAnsiPaddingEnabled 0 0
IsAnsiWarningsEnabled 0 0
IsArithmeticAbortEnabled 0 0
IsAutoClose 0 0
IsAutoCreateStatistics 1 1
IsAutoShrink 0 0
IsAutoUpdateStatistics 1 1
IsCloseCursorsOnCommitEnabled 0 0
IsFulltextEnabled 0 <設定なし>
IsInStandBy 0 0
IsLocalCursorsDefault 0 0
IsMergePublished 0 0
IsNullConcat 0 0
IsNumericRoundAbortEnabled 0 0
IsParameterizationForced 0 0
IsQuotedIdentifiersEnabled 0 0
IsPublished 0 0
IsRecursiveTriggersEnabled 0 0
IsSubscribed 0 0
IsSyncWithBackup 0 0
IsTornPageDetectionEnabled 0 0
LCID 1041 1033
Recovery SIMPLE FULL
SQLSortOrder 0 52
Status ONLINE ONLINE
Updateability READ_WRITE READ_WRITE
UserAccess MULTI_USER MULTI_USER
Version 661 1105

面白いな~と思ったのは、SQL Azure で作成されるデータベースは復旧モデルが [フル] になっていることろですね。
オンプレミスの SQL Server では、[master] データベースの復旧モデルは [シンプル] なのですが、SQL Azure では
[master] データベースも含めて [フル] となっているようです。

SQL Azure はまだあまり触れていないので、これから頑張って勉強していきたいと思います。

Written by Masayuki.Ozawa

8月 16th, 2010 at 12:24 pm

Posted in SQL Server