データベース技術 13(database 13)
TRANSCRIPT
トランザクションの性質•ACID属性(ACID properties)
-矛盾を防ぐためにトランザクションに要求される性質
性質 内容 意味
A(Atomicity) 原子性トランザクションは、コミットかロールバックのいずれかで終了しなければならない
C(Consistency) 一貫性トランザクションを実行した時、データベースの一貫性は損なわれない
I(Isolation) 独立性トランザクションを並列的に処理した場合であっても、逐次処理した場合と同一にならなければならない
D(Durability) 耐久性完了したトランザクションの内容は、障害によって損なわれない
315年12月22日火曜日
同時実行制御•データベースへのロック(lock)を使った制御
-共有ロック(shared lock):データの読み出し時-排他ロック(exclusive lock):データの書き込み時
• 共有ロックがかかっているとき、他のトランザクションは共有ロックを かけられるが、排他ロックはかけられない
• 排他ロックがかかっているとき、共有ロックも排他ロックもかけられない
共有ロック 排他ロック
共有ロック
排他ロック
○ ×× ×
ロックの両立関係
415年12月22日火曜日
共有ロックと排他ロック
データベース
データベース
A
B
共有ロック
読み出し 共有ロック
読み出し
書き込みC
排他ロック××
A
排他ロック
書き込み
B
共有ロック
読み出し
書き込みC
排他ロック×××
×
共有ロック 排他ロック
共有ロック
排他ロック○ ×× ×
ロックの両立関係
515年12月22日火曜日
2相ロックで直列可能を保証•2相ロック(two-phase locking)
-ロックの設定と解除に関する一定の規約のひとつ-トランザクションをロックをかけていく相と、 ロックを解除していく相から構成する
LOCK ALOCK BREAD AREAD BWRITE AWRITE BUNLOCK AUNLOCK B
2相ロックに従う場合LOCK A READ AWRITE AUNLOCK ALOCK BREAD BWRITE BUNLOCK B
2相ロックに従わない場合
ロックをかける相
ロックを解除する相
ロックを全部かけ終わる前にロックを解除している
615年12月22日火曜日
その他の同時実行制御•時刻印制御(timestamp control)
-アクセスするデータにタイムスタンプを与える-より新しいタイムスタンプを持つトランザクションがデータを更新していた場合は、データの読み書きを許可しない
•楽観的制御(optimistic control)-とりあえず各トランザクションの読み書きを許可-書き込む時に初めて、他トランザクションによる更新がなされていないかを確認する
-他トランザクションが更新していたらロールバック715年12月22日火曜日
データベースのセキュリティ•データベースや表にアクセスできる権限の設定
-セキュリティの確保
-ユーザの勝手な更新による矛盾を防ぐ
•ユーザの操作権限を管理するSQL文- GRANT文
- REVOKE文
※GRANT文、REVOKE文はSQLiteでは未実装です
915年12月22日火曜日
GRANT文(1)•表の操作権限を他のユーザに与える•例:GRANT SELECT, UPDATE ON 商品 TO 外国部;-外国部に「商品」表の検索と更新の権限を与えている
•権限の例SELECT 表中の行を検索する権限INSERT 表中の行を挿入する権限UPDATE 表中の行を更新する権限DELETE 表中の行を削除する権限ALL すべての権限
1015年12月22日火曜日
GRANT文(2)•WITH GRANT OPTION
-権限を与えられたユーザが、さらに別のユーザに権限を与えることができるようになる
-例:GRANT SELECT, UPDATE ON 商品 TO 外国部 WITH GRANT OPTION;• 外国部は他のユーザに検索と更新の権限を与えることができる
1115年12月22日火曜日
REVOKE文•GRANT文で与えた権限を取り上げる
•例:REVOKE SELECT, UPDATE ON 商品 FROM 外国部;
-外国部から「商品」表の検索、更新の権限を取り上げている
1215年12月22日火曜日
ビュー表を使ったセキュリティ•表の一部のデータに対してのみ権限を設定可能
-実表の一部を抽出したビュー表を作成する-このビューに対する権限を設定する
実表ビュー表
操作できないようにする操作できるようにする1315年12月22日火曜日
索引を使った高速検索•インデックス(索引: Index)
-データの格納位置に高速にアクセスする手段商品コード 商品名 単価 地方
101 メロン 800 南部102 いちご 150 中部103 りんご 120 北部104 レモン 200 南部201 くり 100 北部202 かき 160 中部
全件検索すると、時間がかかる
索引
索引を使って格納場所に高速ア
クセス
1415年12月22日火曜日
インデックスの方法•B木(B Tree)
-格納場所に関する情報を木構造で管理する方式-節点(node)が多数の子データを持つ
•ハッシュ(Hash)-データのキー値に対してハッシュ関数を適用し、格納位置を求める方法
-ハッシュは完全一致検索に威力を発揮する-比較条件による検索やあいまい検索には対応できない
1515年12月22日火曜日
ハッシュ(Hash)(1)•データのキー値に対してハッシュ関数を適用し、データの格納位置を求める方法
•ハッシュ関数-同じ入力値からは必ず同じ値が得られる-少しでも異なる入力値からはまったく違う値が得られる-不可逆な一方向関数であるため、ハッシュ値から入力値を割り出すことはできない。
1715年12月22日火曜日
ハッシュ(Hash)(2)•ハッシュによるインデックスの特徴
-ハッシュは完全一致検索に威力を発揮する• 例:「商品コードが101の場合」
-比較条件による検索やあいまい検索には対応できない• 例:「商品コードが101以上の場合」、「最後にンが付く商品名」
101
101ハッシュ関数
1815年12月22日火曜日
高速化されない場合もある•インデックスを使用しても、処理が高速化されない場合もある
•すべてのデータを抽出する場合-インデックスを介するため、処理が遅くなる
•データの更新を行う際-インデックスを作成し直すことがあるため、更新速度が遅くなることがある
1915年12月22日火曜日
問い合わせの最適化(1)•データベースへの問い合わせ
- SQLの内容を解析し、インデックスなどを考慮し高速化•例
-「単価が200以上の商品の売上日付、品名を抽出する」(1)商品表と売上表を結合する
(2)単価が200以上の商品を選択する(3)日付・品名の列を抽出する
select 日付, 商品from 商品, 売上where 単価>=200,and 商品.商品コード=売上.商品コード;
2015年12月22日火曜日
•例-「単価が200以上の商品の売上日付、品名を抽出する」
(1)商品表と売上表を結合する(2)単価が200以上の商品を選択する(3)日付・品名の列を抽出する
問い合わせの最適化(2)
select 日付, 商品from 商品, 売上where 単価>=200,and 商品.商品コード=売上.商品コード;
商品 売上
結合
選択
射影 結合
商品
売上
射影
射影
選択
図:問い合わせの最適化
(1)→(2)→(3)の順で問い合わせ
(3)→(2)→(1)の順で問い合わせ
※射影:列を抽出※選択:行を抽出
2115年12月22日火曜日
•選択・射影などの実行順により処理時間が異なる問い合わせの最適化(3)
商品 売上
結合
選択
射影 結合
商品
売上
射影
射影
選択
図:問い合わせの最適化
(1)→(2)→(3)の順で問い合わせ
(3)→(2)→(1)の順で問い合わせ
処理時間が長くなる最初の結合で行数の多い中間的な表が作成されるため
処理時間が短くなる最初に選択・射影を実行され、行と列が絞り込まれるため
2215年12月22日火曜日
問い合わせの最適化(4)•一般的な問い合わせ順序の決定基準
-選択を先に実行して行数を減らす-射影を先に実行して結果に関係ない列を減らす-結合を後で実行する
•射影・選択・結合にも異なる手法が存在する-選択
• 全検索、インデックスによる検索
-結合• ネステッド・ループ、ソート・マージ
2315年12月22日火曜日
ネステッド・ループ•一方の表の1行について、もう一方の表の行を比較する方法
101102103104
101101102102
T1 T2各行について全行を比較する同じである場合に、結合した行を結果として作成する
2415年12月22日火曜日
ネステッド・ループの例ID 従業員名 部署ID1 従業員1 32 従業員2 43 従業員3 14 従業員4 25 従業員5 3
従業員表部署ID index
1 ABC2 DEF3 HIJ4 KLM5 NOP
index 部署ID 部署名ABC 1 部門1DEF 2 部門2HIJ 3 部門3
KLM 4 部門4NOP 5 部門5
索引 部署表
ID 従業員名 部署ID 部署名1 従業員1 3 部門32 従業員2 4 部門43 従業員3 1 部門14 従業員4 2 部門25 従業員5 3 部門3
結合結果外部表(駆動表) 内部表
2515年12月22日火曜日
ソート・マージ•各表の行を並べ替えた後、結合する方法
-ソートされているため、1方向処理で足りることになり、処理時間が短縮される
-最初のソートにかかるコストに注意する必要がある
101102103104
101101102102
T1 T2並べ替えてから突き合わせる値が同じ場合に結合した行を結果として作成する
2615年12月22日火曜日
オプティマイザ(optimizer)•データベース中で問い合わせの最適化を行う機能•最適化の基準
-ルールベース:あらかじめ決められた複数のルールの優先順位に従って手段を選択する方式• データベースの状態に即した検索が行われない場合もある
• 例:全検索であっても、索引検索の優先順位が高い場合は索引検索が行われる
-コストベース:データベース内部の統計情報に従い、手段を選択する方式• ルールベースよりも柔軟な最適化が可能• 定期的に統計情報の更新が必要、統計情報の管理・分析に手間がかかる
2715年12月22日火曜日
データベースの障害•トランザクション障害
-トランザクションの不備により、トランザクションが完了できないこと
-ロールバックで回復•システム障害
-停電などによるシステムダウン-再起動時に障害回復処理を行う
•媒体障害-ハードディスクの損傷-バックアップファイルを元に復旧
2915年12月22日火曜日
チェックポイントと復旧•バッファ
-データベースへの書き込みの効率化のため、一時的にデータを書き出しておく領域
•チェックポイント(checkpoint)-バッファに書き出された内容がデータベースの内容と一致させられる地点
-チェックポイント時にコミット済みのトランザクションについては、障害回復の必要がない
3015年12月22日火曜日
チェックポイントと復旧:図チェックポイント 障害発生
開始
開始
開始
トランザクション1
トランザクション2
トランザクション3コミット
コミットロールバック
ロールフォーワード
3115年12月22日火曜日