疑問解決(MS-SQL Server)

2013/4/5

MS-SQL Serverを触ってみよう

・概要

 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検索で  
Google
・ TOPへ戻る

メールはこちらに