・概要
|
MS-SQL Serverは、マイクロソフトが発売しているデータベースです。
エディションも様々あり、フリーのExpress版も有ります。
また、モバイル版のSQLサーバ Compactも有ります。
有名なDBなので詳細は、別サイトにお任せします。 |
・ライセンス
|
SQL Serverのライセンスは下記の通りです。(2005の場合)
|
形
態 |
概
要 |
サーバライセンス
+CAL |
サーバ1台に対して1ライセンス購入
※インスタンス数は関係ありません。
1端末または1ユーザ毎にCALを購入
※ネットワーク上の全サーバにアクセス可能 |
サーバライセンス
+WorkgroupCAL
|
サーバに関しては上記と同様
端末からはWorkgroup Editionにのみアクセス可能
|
プロセッサライセンス |
サーバ1台につき、OSが使用するCPU数分ライセンスを購入
CALは不要
|
|
注意点
1.DBサーバ以外(WEBサーバ等)を経由してDBサーバにアクセスする場合もCALは必要
2.コア数は関係なし、あくまでCPU数
3.冗長構成(クラスタリング、ミラーリング、ログ配布)において、待機系サーバはライセンス不要
4.仮想化環境においては、各仮想OSで使用している仮想CPUの数 |
・エディション
|
SQL Serverのメインエディションは下記の通りです。(2005の場合)
|
形
態 |
CPU |
メ
モリ |
主
機能 |
Workgroup |
2CPU |
3GB |
データベース機能
ログ配布 |
Standard |
4CPU |
OSサポート容量 |
データベース機能
ログ配布
2ノードフェールオーバクラスタ
データベースミラーリング(高可用モード)
BI機能 |
Enterprise |
OSサポート数 |
OSサポート容量 |
データベース機能
ログ配布
8ノードフェールオーバクラスタ
データベースミラーリング
高度なBI機能
パーティショニング
データベーススナップショット |
|
|
・Expressエディション
|
上記エディションの他にフリーのExpressエディションが存在し、商用利用も可能です。
ただし、当然のことながら色々な機能の制限がかかっています。
|
バー
ジョン
|
CPU |
メ
モリ |
ディ
スク容量
|
そ
の他
|
2005
|
1CPU |
1GB |
4GB |
|
2008 |
1CPU |
1GB |
4GB
|
|
2008R2 |
1CPU |
1GB
|
10GB
|
|
|
|
・冗長構成
|
SQL Serverが備えている冗長構成は下記の通りです。
|
粒
度 |
特
徴 |
長
所 |
短
所 |
データベースミラーリング |
・3台構成 |
・障害時自動フェールオーバ
・共有ディスク不要
・ハードウェア構成に依存しない
・ノード間の距離制約無し |
・インスタンス単位のフェールオーバ不可
・システムデータベース(master等)の
ミラーリングは不可
|
クラスタリング
|
・サーバ間でディスク共有
・サービス用と同期用
2つのネットワークが必要
|
・障害時自動フェールオーバ
|
|
スナップショット
レプリケーション |
・一定間隔で全データをコピー
|
|
|
トランザクション
レプリケーション |
・差分データのみコピー
|
|
|
マージ
レプリケーション |
・トランザクションレプリケーションに
サブスクライバ側の更新も可能 |
・パッシブ側の台数を複数持てる |
|
|
|
・ロック
|
ロックする対象部分の粒度は下記の通りです。
下に行くほど粒度が荒くなり、同時実効性は低下します。
|
粒
度 |
概
要 |
行 |
1行単位に行います |
4KBのデータページ
またはインデックスページ
|
|
テーブルスキーマ |
|
テーブル |
|
データベース |
|
|
ロックの種類もDBによって様々です。
|
ロッ
ク種類 |
概
要 |
共有ロック |
SELECT発行時に発生するロックです。 |
更新ロック
|
更新ロックが切れるまで、他のトランザクションは完了を待ちます。
後で更新するためのロックです。
|
排他ロック |
INSERT,UPDATE,DELETEの時に発生するロックです。
ロック中は、他のトランザクションは参照/更新できません。
|
|
|
・ログ
|
オラクルのアーカイブログにあたるログは、
SQLServerではトランザクションログといいます。
これが曲者です。
SQLServerはオラクルに比べてデータベースの構築が比較的簡単です。
しかしそのため、”とりあえず”で運用しだすと後々問題が噴出します。
まず一番よくひかかるのが、トランザクションログがHDD容量を食いつぶす問題です。
標準設定ではトランザクションログは無制限に増大して行きます。
これを食い止めるには下記3案です。
|
対
策 案 |
概
要 |
トランザクションログを定期的にバックアップする |
BACKUP LOG <データベース名> TO DISK
= '<ファイル名>'
※実際に保存しない場合は、ファイル名を nul とする。
上記コマンドを行うことにより
使用済み領域は削除され空き領域になります。
ただし注意が必要なのは、
空き領域を作ったとしても実際のファイルサイズは小さくなりません。
ファイルサイズを小さくする場合は下記コマンドも併用します。
DBCC SHRINKFILE(<ログ論理名>, <ファイルサイズ[MB]>)
※ログ論理名は下記SQLで取得します。
USE <データベース名>
SELECT * FROM sys.database_files
|
復旧モデルを”単純”にする
|
トランザクションログをとりません。
そのため障害が起こった場合、復旧は困難です。
|
トランザクションログを削除する |
BACKUP LOG <データベース名> WITH
TRUNCATE_ONLY
※Ver2008以降は利用できません。 |
|
トランザクションログの設定はデータベースプロパティの復旧モデルで設定します。
設定値は下記3種類です。
|
設
定値 |
概
要 |
完全
(FULL)
|
名前の通り全て取ります。
時刻を指定した復旧が可能。
|
一括
(BULK_LOGGED)
|
一括操作を行った際、完全のように全てのレコード操作を記憶するわけではなく、
一括操作を行ったと言う記録だけを残します。
時刻を指定した復旧はできません。
|
単純
|
ログを取りません。
具体的にはトランザクション中はログがありますが、
チェックポイントが完了するごとに消されます。
当然動作は軽くなりますしデータ容量も少なくてすみます。
障害時はバックアップをリストアするしかありません。
|
|
|
・チューニング |
クエリー実行時データを検索する際インデックスを利用したりしますが、
どの様に検索するかは下記3通りあります。
|
名
称 |
解
説 |
Index Seek
|
最も効率がよいやり方です。
インデックスを利用してBtree検索を行います。
|
Index Scan
|
インデックスを利用していますが、
順番に全てのインデックスを検索していきます。
|
Table Scan
|
最も効率が悪いです。
インデックスが利用されていません。
|
|
結合アルゴリズムは下記があります。
|
名
称 |
解
説 |
ネストループ結合
|
単純に2重ループを回します。
そのためコストは二つのテーブルのレコード数の積に比例します。
|
マージ結合
|
結合するフィールドをソートしておきレコードの上からしたへと
順に操作させながらフィールドの値が一致するものを探します。
レコードの操作が1回ですみます。
|
ハッシュ結合
|
|
|
また、インデックスを明示的に指定したい場合は、
with(index(インデックス名)) とします。 |
・Transact-SQL(T-SQL) |
マイクロソフトとSybaseが拡張した独自SQL言語です。
局部変数は@でグローバル変数は@@で始まることが多い。
またT-SQLの関数には下記があります。
|
関数 |
解
説 |
CONVERT(data_type[(length)],expression[,style]) |
expression:
任意の有効な式
data_type:
対象データ型
length:
対照データ型の長さ
style:
スタイルを数値で指定
※詳細はMSDN等見てください。
|
Declare 変数 型
|
変数を宣言します。
|
|
|
|
|
・照合順序 |
SQLServerで文字列検索を行った際、文字列の区別をするかどうかを決定します。
|
コ
マンド |
解
説 |
Select SERVERPROPERTY('collation') |
サーバの照合順序確認
|
Select DATABASEPROPERTYEX('テーブル名', 'collation') |
テーブルの照合順序確認
|
CREATE TABLE テーブル名 (列名 列属性 COLLATE 照合順序文字列)
|
照合順序を指定してテーブルを作成
|
ALTER TABLE テーブル名 ALTER COLUMN カラム名列属性
COLLATE 照合順序文字列 |
指定列の照合順序を変更 |
|
※インデックスの再構築が必要です。
照合順序文字列は下記の通りです。
|
コ
マンド |
解
説 |
CI
(Case Insensitive) |
大文字小文字を区別しません。
|
CS
(Case Sensitive) |
大文字小文字を区別します。
|
AI
(Accent Insensitive)
|
アクセント、濁音、破裂音を区別しません。
|
AS
(Accent Sensitive)
|
アクセント、濁音、破裂音を区別します。
|
KS
(Kana Sensitive)
|
ひらがなとカタカナを区別します。
|
WS
(Width Sensitive)
|
半角、全角を区別します。
|
BIN
(BINary) |
全て区別します。 |
|
表記例は下記となります。
|
Japanese_BIN
|
Japanese_(CI | CS)_(AI | AS) [ (_KS | _WS |
_KS_WS) ]
|
|
|
・コマンド集 |
SQLのコマンドです
|
コ
マンド |
解
説 |
SET SHOWPLAN_ALL ON [ON | OFF] |
プランのグリッド表示/非表示を切り替えます。 |
SET STATISTICS IO [ON | OFF] |
統計情報の表示/非表示を切り替えます。
スキャン回数:シーク/スキャン数
論理読み取り数:データキャッシュから読み取られたページ数
物理読み取り数:ディスクから読み出されたページ数
先行読み取り数:クエリ用のキャッシュに読み取られたページ数
|
CHECKPOINT
|
手動チェックポイントを作成します。
|
DBCC DROPCLEANBUFFERS [ WITH NO_INFOMSGS ] |
バッファプールからクリーンバッファを削除します。
WITH NO_INFOMSGS:情報メッセージを表示しない |
DBCC FREEPROCCACHE WITH NO_INFOMSGS |
プランキャッシュを削除します。 |
sp_configure option_name [, option_value] |
グローバル設定構成を表示または変更します。
option_name:オプション名
option_value:設定値
変更後reconfigureを行うと反映されます。 |
|
sp_configureで設定できるオプションは下記の通りです。
また、拡張オプションは'show advanced options'をセットしてから変更する必要があります。
|
コ
マンド |
標準/拡張 |
解
説 |
show advanced options |
標準 |
拡張オプションの設定可否 |
max degree of parallelism |
拡張 |
並列処理数
0はMAX値になります。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
コマンドプロンプトでのコマンドです。
|
コ
マンド
|
解
説 |
bcp
|
SQLサーバインスタンスとファイル間でデータをやり取りするコマンドで
す。
※OSの管理者権限が必要です。
|
|
|
|
|
|
|
・単語集 |
|
名
称 |
解
説 |
masterデータベース |
システム情報を持っているデータベース |
カバリングインデックス |
クエリが必要とする情報を全て含んでいるインデックス |
カーディナリティ |
値の種類とレコード種類の比
性別や血液型等とりうる値が少ない場合は、
カーディナリティが低いといいます。 |
ページ |
読書きの単位です。 |
エクステント |
利用可能領域がなくなるとエクステント単位で領域を確保します。 |
レコードチェーン |
1レコードが複数ページにまたがること。 |
ハッシュインデックス |
Bツリーインデックスは、ルートノードのみがキャッシュされていますので、
ブランチノードを経由する度にディスクにアクセスします。
それを避けるためにハッシュを使ってインデックスとして機能させます。
ただし順番のアクセスは不得手のためシーケンシャル読み込みは向いていません。 |
ビットマップインデックス |
カーディナリティが低いときに有効なインデックスです。 |
Allocation Order Scan |
|
IAM
(Index Allocation Map) |
|
|
|
さらに情報が欲しい方は、Google検索で
|
・ TOPへ戻る |