SlideShare a Scribd company logo
データベースシステム論
2016年度 前期 水曜 1・2時限 情24教室
担当:横山昌平
データベースシステム論 第 回2016 [ 13 ] 1p.
講義計画
• 関係データベースの歴史と基本概念
• SQLの基礎と応用(演習を含めつつ)
• データベースの設計と構成
• SQL問い合わせ処理とそれを支える技術
• 関係データモデル以外のデータベース
データベースシステム論 第 回2016 [ 13 ] 2p.
※現時点での予定です。進捗に応じて変更します。
27Apr.
20Apr.
13Apr.
25May
18May
11May
1June
8June
22June
15June
6July
29July
20July
27July
模
試 13July
質
問
データベースシステム論
第13回 データベースの運用
データベースシステム論 第 回2016 [ 13 ] 3p.
• 論理的に分割できない一連の処理の塊
• 例
• 複数人がプリンタで複数ページの書類を同時印刷
トランザクション
データベースシステム論 第 回2016 [ 13 ] 4p.
p.1 p.2 p.3 p.4 p.5
p.1 p.2 p.3 p.4 p.5
p.1
p.1 p.2
p.2 p.3
p.3
p.4 p.5
p.4 p.5
トランザクション
DBとトランザクション
データベースシステム論 第 回2016 [ 13 ] 5p.
複数人が同時に利用するデータベースは、
それぞれの人の処理が混合してしまうと、
保持するデータの整合性が取れなくなっ
てしまう。つまりDBMSとして「トラン
ザクション」が適正に処理されることを
保障する事は、最も重要な要件である。
ACID特性トランザクション処理に求められる性質
Atomicity 原子性
データベースシステム論 第 回2016 [ 13 ] 6p.
ある一連の処理の実行時に、以下の二つ
の状態のどちらかである事を保障
• 一連の処理が全て処理されている
• 一連の処理が全く処理されていない
処理前 処理中 処理後処理1 処理2
2つのデータ更新処理からなるトランザクションにおいて、
処理2が失敗し、データが「処理中」の状態になってしまっ
たとしても、「処理前」の状態に戻す(ロールバック)。
ワインID 名前 産地ID 価格
1 シャブリ A 2400
7 コンチャ・イ・トロ E 980
価格
1400
-20
Consistency 一貫性
データベースシステム論 第 回2016 [ 13 ] 7p.
データの持つルール(制約等)を満たさな
くする処理が与えられた時に、その処理
を失敗させる(実行しない)事を保障。
タイムセール1000円引き!
あり得ない!
商品値段の価格は負の値にはならない。これはSQLでは
CREATE TABLE文のCHECK句において定義できる。DBMSは
一貫性を保障する為に、下記のような「結果として価格が負
になる」UPDATE文が与えられたとしても処理を失敗させる。
Isolation 独立性
データベースシステム論 第 回2016 [ 13 ] 8p.
トランザクション中の過程が他のトラン
ザクションから隠ぺいされる事を保障。
例えば購入したワインを一件ずつ在庫テーブルから在庫数を
減らすトランザクションを考える。その際、別のユーザのト
ランザクション中の中間状態のデータが、他のトランザク
ションから見えてしまったら問題が生じてしまう。
赤 ロゼ 白
1 1 1
0 1 1
0 0 1
赤1つ
ロゼ1つ 処理後の状態
中間状態
赤とロゼを一本
ずつ買おう~
ロゼと白を一本
ずつ買おう~
Durability 耐久性
データベースシステム論 第 回2016 [ 13 ] 9p.
一旦トランザクションの成功を返したら、
その後システムクラッシュ等のトラブル
が発生したとしても、成功時点の状態が
データベースに反映されている事を保障。
データ データ
トランザクション成功!
障害発生
ACID特性
•Atomicity 原子性
•Consistency 一貫性
•Isolation 独立性
•Durability 耐久性
データベースシステム論 第 回2016 [ 13 ] 10p.
DBMSを使えば、トランザクションの処理にお
いて、これら四つの特性が(一応…)保障される。
「一連の処理」とは
• ロワール(did=c)のワインはもう売るのを辞めよう!
データベースシステム論 第 回2016 [ 13 ] 11p.
wid name did price
1 シャブリ A 2400
2 ジュヴレシャンベルタン A 3000
3 サンテミリオン B 5800
4 オーメドック B 2200
5 サンセール C 2800
6 シャンパン D 4000
7 コンチャ・イ・トロ E 980
did district
A ブルゴーニュ
B ボルドー
C ロワール
D シャンパーニュ
E チリ
wine vineyard
1. wineテーブルからdidがCの行を削除
2. vineyardテーブルからdidがCの行を削除
ト
ラ
ン
ザ
ク
シ
ョ
ン
ACID特性が無いと起こる問題
データベースシステム論 第 回2016 [ 13 ] 12p.
1. wineテーブルからdidがCの行を削除
2. vineyardテーブルからdidがCの行を削除
1. wineテーブルにミュスカデを追加~♪
wid name did price
1 シャブリ A 2400
2 ジュヴレシャンベルタン A 3000
3 サンテミリオン B 5800
4 オーメドック B 2200
5 サンセール C 2800
6 シャンパン D 4000
1000 コンチャ・イ・トロ E 980
1001 ミュスカデ C 2100
did district
A ブルゴーニュ
B ボルドー
C ロワール
D シャンパーニュ
E チリ
wine vineyard
1001 ミュスカデ C 2100
トランザクションを定義
データベースシステム論 第 回2016 [ 13 ] 13p.
1. トランザクションを始めます
4. トランザクションを失敗(アボート)させます
2. wineテーブルからdidがCの行を削除
3. vineyardテーブルからdidがCの行を削除
4. トランザクションを成功(コミット)させます
START TRANSACTION;
トランザクション開始
前の状態に戻す
トランザクションに
よる変更を確定する。
もしくは・・・
ROLLBACK;
COMMIT;
START TRANSACTION
つまり・・・
データベースシステム論 第 回2016 [ 13 ] 14p.
START TRANSACTION;
ROLLBACK;
COMMIT;
処理処理
処理
処理
処理
処理
処理
処理
処理
処理
処理
ACIDが保障される!
試してみよう
• psqlを二つ使おう。
データベースシステム論 第 回2016 [ 13 ] 15p.
A
B
ROLLBACKの動作
• トランザクションの開始
• wineテーブル全行削除
• 確認(コミット前)
• トランザクションをアボート
• 確認(コミット後)
データベースシステム論 第 回2016 [ 13 ] 16p.
START TRANSACTION;
DELETE FROM wine;
SELECT * FROM wine;
ROLLBACK;
SELECT * FROM wine;
A
A
A
A
A
ROLLBACKの動作 - 結果
データベースシステム論 第 回2016 [ 13 ] 17p.
dbsys=# START TRANSACTION;;
START TRANSACTION
dbsys=# DELETE FROM wine;
DELETE 8
dbsys=# SELECT * FROM wine;
wid | name | did | price
-----+------+-----+-------
(0 行)
dbsys=# ROLLBACK;
ROLLBACK
dbsys=# SELECT * FROM wine;
wid | name | did | price
------+------------------------+-----+-------
1 | シャブリ | A | 2400
2 | ジュヴレシャンベルタン | A | 3000
3 | サンテミリオン | B | 5800
4 | オーメドック | B | 2200
5 | サンセール | C | 2800
6 | シャンパン | D | 4000
7 | コンチャ・イ・トロ | E | 980
(7 行)
COMMITの動作
• トランザクションの開始
• wineテーブル一行追加
• 確認①
• トランザクションをコミット
• 確認②
データベースシステム論 第 回2016 [ 13 ] 18p.
START TRANSACTION;
INSERT INTO wine VALUES(8,’ミュスカデ’,’C’,2100);
SELECT * FROM wine;
COMMIT;
SELECT * FROM wine;
A
A
A
A
A
SELECT * FROM wine; B
SELECT * FROM wine; B
COMMITの動作 - 結果
• コミット前
データベースシステム論 第 回2016 [ 13 ] 19p.
dbsys=# START TRANSACTION;
START TRANSACTION
dbsys=# INSERT INTO wine VALUES(1001,'ミュスカデ','C',2100);
INSERT 0 1
dbsys=# SELECT * FROM wine;
wid | name | did | price
------+------------------------+-----+-------
1 | シャブリ | A | 2400
2 | ジュヴレシャンベルタン | A | 3000
3 | サンテミリオン | B | 5800
4 | オーメドック | B | 2200
5 | サンセール | C | 2800
6 | シャンパン | D | 4000
7 | コンチャ・イ・トロ | E | 980
8 | ミュスカデ | C | 2100
(8 行)
dbsys=# commit;
COMMIT
dbsys=# select * from wine;
wid | name | did | price
------+------------------------+-----+-------
1 | シャブリ | A | 2400
2 | ジュヴレシャンベルタン | A | 3000
3 | サンテミリオン | B | 5800
4 | オーメドック | B | 2200
5 | サンセール | C | 2800
6 | シャンパン | D | 4000
7 | コンチャ・イ・トロ | E | 980
(7 行)
A
B
ACID - 独立性:トランザクションAのコミット前の変更はBから見えない
COMMITの動作 - 結果
• コミット後
データベースシステム論 第 回2016 [ 13 ] 20p.
dbsys=# START TRANSACTION;
START TRANSACTION
dbsys=# INSERT INTO wine VALUES(1001,'ミュスカデ','C',2100);
INSERT 0 1
dbsys=# SELECT * FROM wine;
wid | name | did | price
------+------------------------+-----+-------
1 | シャブリ | A | 2400
2 | ジュヴレシャンベルタン | A | 3000
3 | サンテミリオン | B | 5800
4 | オーメドック | B | 2200
5 | サンセール | C | 2800
6 | シャンパン | D | 4000
7 | コンチャ・イ・トロ | E | 980
8 | ミュスカデ | C | 2100
(8 行)
dbsys=# commit;
COMMIT
dbsys=# select * from wine;
wid | name | did | price
------+------------------------+-----+-------
1 | シャブリ | A | 2400
2 | ジュヴレシャンベルタン | A | 3000
3 | サンテミリオン | B | 5800
4 | オーメドック | B | 2200
5 | サンセール | C | 2800
6 | シャンパン | D | 4000
7 | コンチャ・イ・トロ | E | 980
8 | ミュスカデ | C | 2100
(8 行)
A
B
ACID - 独立性: Aがコミットした瞬間、Aによるデータの変更がBからも見える
状態とその遷移
• トランザクションの状態を一般化して考える
データベースシステム論 第 回2016 [ 13 ] 21p.
active
partially
committed
failed
committed
terminated
start transaction
read/write
rollback
commit
rollback
SQLとトランザクション
• トランザクションの開始
• トランザクションのコミット
• トランザクションのアボート
データベースシステム論 第 回2016 [ 13 ] 22p.
START TRANSACTION mode [,mode];
COMMIT [WORK | TRANSACTION];
ROLLBACK [WORK | TRANSACTION];
※スライドはPostgreSQLでの例、標準SQLは教科書参照
トランザクションの種類
• 自動コミット(Autocommit)モード
• 明示的な(Explicit)モード
• 暗黙の(Implicit)モード
データベースシステム論 第 回2016 [ 13 ] 23p.
※教科書の記述が不明瞭ですがSTART TRANSACTION 文のmodeではありません
各SQL文が実行されるたびに、トランザクションがコ
ミットされる。(PostgreSQLのデフォルト動作)
START TRANSACTION文でトランザクションを開始し、
COMMIT/ROLLBACKで終了させる。
最初のSQL文の発行でトランザクションを自動で開始
し、COMMIT/ROLLBACKで終了させる。(標準SQL仕様)
トランザクション処理とは
否
データベースシステム論 第 回2016 [ 13 ] 24p.
単にある人のコマンド群が実行さ
れている間、別の人のコマンドの
処理をブロックしているだけ?
同時にできる処理は同時に走らせ
ないと、とてもじゃないが無駄な
待ち時間が大量に発生して、シス
テムのスループットが上がらない。
同時実行制御 (Concurrency Control)
• 前提:一人ずつ利用すれば問題は起きない
• この時代、そんな悠長な事は言っていられない!
• トランザクション
• 複数を同時に実行しても破綻しない仕組み・概念
• 同時実行の利点
• CPUとI/Oは並列に実行できるのでディスクならび
にCPUが暇な(idle)時間の量を減らせる。
• 短いトランザクションと長いトランザクションをイ
ンターリーブ(interleave、交互に差し挟む)して実行
すると,通常は短いトランザクションのほうが早く
終わり,長いトランザクションの後回しになること
は少ない.
データベースシステム論 第 回2016 [ 13 ] 25p.
同時実行による異常パターン①
• Dirty Read (Write-Read conflict)
データベースシステム論 第 回2016 [ 13 ] 26p.
T1 T2
read(x);
x = x – d;
write(x);
read(x);
y=x;
write(y);
abort;
ここでのxはT1によって更新
済みだが、後でT1はアボート
している事に注目!
同時実行による異常パターン②
• Unrepeatable Read (Read-Write conflict)
データベースシステム論 第 回2016 [ 13 ] 27p.
T1 T2
read(x);
read(x);
x=x + d;
write(x);
read(x);
同じトランザクション内で
同じxを呼び出しているにも
関わらず得られる値が異なる。
同時実行による異常パターン③
• Lost Update (Write-Write conflict)
データベースシステム論 第 回2016 [ 13 ] 28p.
T1 T2
read(x);
read(x);
x=x + d;
write(x);
x = x – d;
write(x); T2の方で行われた更新が、T1の
更新によってロストしてしまう。
同時実行による異常パターン④
• Phantom Read
データベースシステム論 第 回2016 [ 13 ] 29p.
T1 T2
read(X);
delete(X[n]);
read(X);
T2により集合Xの要素nが消去され
た、それによりT1の最初のreadで
現れた要素nが二番目のreadでは
現れないという現象が起こる
用語
• スケジュール
• 直列スケジュール
• 直列可能
• 競合直列可能スケジュール
データベースシステム論 第 回2016 [ 13 ] 30p.
複数のトランザクション(T1,T2,…,Tn)に含まれる操作の列
並列実行した場合と直列に実行した場合で結果が等しい場合、そ
の操作は直列可能であるという。
トランザクションを並列実行した場合に直列スケジュールと等価
の結果を得られるスケジュール
トランザクションを1つずつ逐次的に処理するスケジュール
同時実行の利点
[前提]
• もし、全く関係の無いリソースへのアクセスな
らば、処理は(何も考えず)同時に実行する事で、
CPUを効果的に酷使する事ができる。
データベースシステム論 第 回2016 [ 13 ] 31p.
T1 T2
read(x);
処理X
write(x);
read(y);
処理Y
write(y);
T1 T2
read(x);
処理X read(y);
write(x) 処理Y
write(y)
先行グラフ(直列可能性グラフ)
データベースシステム論 第 回2016 [ 13 ] 32p.
T1 T2
read(x);
write(x);
read(x);
write(x);
T1 T2
read(x);
read(x);
write(x)
write(x)
ルール:トランザクションTiに対してノードを割り当てる。Tiがx
をwriteした後にTjがxをwriteもしくはreadしたか、Tiがxをreadし
た後にTjがxをwriteしたら、TiからTjにエッジを作る。
T1 T2
T1 T2
閉
路
閉路がなければ競合直列可能
競合直列可能にスケジュール
• 並列性を保ちつつ、右のようなスケジュールを
避け、左のようなスケジュールを得るには?
データベースシステム論 第 回2016 [ 13 ] 33p.
T1 T2
read(x);
write(x);
read(x);
write(x);
T1 T2
read(x);
read(x);
write(x)
write(x)
ロック
ロックとは
• リソースに鍵をかけ、他のトランザクションか
らアクセスを許さない事
• 共有ロック (Shared LockまたはRead Lock)
• 専有ロック (Exclusive LockまたはWrite Lock)
データベースシステム論 第 回2016 [ 13 ] 34p.
他のトランザクションから同じリソースを共有ロックする事は
できるが、専有ロックはできない状態のロック。データの読み込
みの際にリソースをロックする場合に利用する。
他のトランザクションから同じリソースを共有ロック・専有ロッ
クいずれもできない状態のロック。データを書き込む際にリソー
スをロックする場合に利用する。
※他のトランザクションはリソースがアンロックされるまで、処理を待つ必要がある。
DBにおけるロックのレベル
• データベース
• データベース全体に対して1つのトランザクションのみ
が処理を許される状態。
• システムのバージョンアップ等に利用
• テーブルスペース
• 複数のテーブルをロック
• テーブル
• 1つのテーブル全体をロック
• ブロック、ページ、エクステント
• 物理的な領域に対するロック
• 行
• 特定の行のみのロック
• 検索し、外部プログラムで値を変更し、更新する場合等
データベースシステム論 第 回2016 [ 13 ] 35p.
ロックを使うにあたって
• 使用上の注意
• 実際にはもう少しロックの種類があります(p.127)
• また、DBMSによっても異なります。
• 例:PostgreSQL
• http://www.postgresql.jp/document/9.3/html/explicit-
locking.html
• さらに明示的なロックの構文はDBMS毎に異なって
いるので注意が必要です。
• 例えばテーブル単位のロックを提供するLock Table
文は標準SQLでは定義されていません。
データベースシステム論 第 回2016 [ 13 ] 36p.
テーブルのロック
データベースシステム論 第 回2016 [ 13 ] 37p.
LOCK TABLE テーブル名
IN lockmode MODE;
求するロック
モード
現在のロックモード
ACCESS
SHARE
ROW SHARE
ROW
EXCLUSIVE
SHARE
UPDATE
EXCLUSIVE
SHARE
SHARE ROW
EXCLUSIVE
EXCLUSIVE
ACCESS
EXCLUSIVE
ACCESS
SHARE
X
ROW SHARE X X
ROW
EXCLUSIVE
X X X X
SHARE
UPDATE
EXCLUSIVE
X X X X X
SHARE X X X X X
SHARE ROW
EXCLUSIVE
X X X X X X
EXCLUSIVE X X X X X X X
ACCESS
EXCLUSIVE
X X X X X X X X
テーブルのロック - SQL
• ワインテーブルをロックし確認
• 結果からロックが機能している事を確認せよ
• トランザクション終了と共にロックは解除
• 解除された事を確認せよ(どうやって?)
データベースシステム論 第 回2016 [ 13 ] 38p.
START TRANSACTION;
LOCK wine IN ACCESS EXCLUSIVE MODE;
SELECT * FROM wine;
SELECT * FROM wine;
A
B
A
COMMIT; もしくは ROLLBACK;
A
行のロック
• UPDATE
• 専有ロック
• ここで得られた行に対して後でUPDATEする場合
• SHARE
• 共有ロック
データベースシステム論 第 回2016 [ 13 ] 39p.
SELECT *
FROM テーブル名 ・・・
FOR [UPDATE,SHARE];
行のロック- SQL
• ワインテーブルのある行をロックし確認
• wid=1の行のみがロックされている事を確認
• 次にその行の価格を更新する
• トランザクション終了と共にロックは解除
• BのブロックされたSELECT文の出力はprice=100000?
データベースシステム論 第 回2016 [ 13 ] 40p.
START TRANSACTION;
SELECT * FROM wine WHERE wid = 1 FOR UPDATE;
START TRANSACTION;
SELECT * FROM wine WHERE wid = 2 FOR UPDATE;
SELECT * FROM wine WHERE wid = 1 FOR UPDATE; B
A
UPDATE wine SET price = 100000 WHERE wid = 1;
COMMIT;A
デッドロック
• ロックにつきものの忌まわしい問題
• 例
データベースシステム論 第 回2016 [ 13 ] 41p.
二つのリソースに対してロックをかける二つのトランザクション
が、互いにアンロックを待って先に進めなくなる状態。
※二つ以上でも可
T1 T2
lock(x);
lock(y);
lock(y);
lock(x);
T2がyのロックを解除するのを待つ
T1がyのロックを解除するのを待つ
一生ストップ!
デッドロック- SQL
• wineとvineyardを使ってデッドロックを起こす
データベースシステム論 第 回2016 [ 13 ] 42p.
START TRANSACTION;
LOCK wine IN ACCESS EXCLUSIVE MODE;
START TRANSACTION;
LOCK vineyard IN ACCESS EXCLUSIVE MODE;
A
B
A
LOCK vineyard IN ACCESS EXCLUSIVE MODE;
LOCK wine IN ACCESS EXCLUSIVE MODE;
B
どうなった?
デッドロック- 結果
データベースシステム論 第 回2016 [ 13 ] 43p.
dbsys=# START TRANSACTION;
START TRANSACTION
dbsys=# LOCK wine IN ACCESS EXCLUSIVE MODE;
LOCK TABLE
dbsys=# LOCK vineyard IN ACCESS EXCLUSIVE MODE;
ERROR: デッドロックを検出しました
DETAIL: プロセス 9284 は AccessExclusiveLock を データベース16393のリレーション
24616 で待機していましたが、プロセス 5712 でブロックされました
プロセス 5712 は AccessExclusiveLock を データベース16393のリレーション24621 で
待機していましたが、プロセス 9284 でブロックされました
HINT: クエリーの詳細はサーバログを参照してください
作為的にデッドロックを起こすと、すぐに
PostgreSQLがそのデッドロックを検知してエ
ラーを返すとともに、ロックを解除してくれた。
デッドロックの検出
• wait-forグラフ(待ちグラフ)
• ノード:各トランザクション
• エッジ:ロック解除を待つ方向
• 閉路=デッドロックの発生→どちらかをアボート
データベースシステム論 第 回2016 [ 13 ] 44p.
T1 T2
lock(x);
lock(y);
lock(y);
lock(x);
T1 T2
閉
路
y
x
x
トランザクションの隔離レベル
• SERIALIZABLE
• REPEATEABLE READ
• READ COMMITTED ※PostgreSQLのデフォルト
• READ UNCOMMITTED
データベースシステム論 第 回2016 [ 13 ] 45p.
※順番がだいぶ前後しますがこちらがSTART TRANSACTION 文のmodeです。
個別のリソースを明示的にロックするのではなく、トランザク
ションの利用形態を開始時に示しDBMSがロックの制御をする。
トランザクションを最大限隔離し直列可能性を保証する。このトランザク
ションがread/writeしたデータはコミットされるまで、他のトランザクション
によって変更できない。
SERIALIZABLEに比べて、INSERされた値は他のトランザクションから見える。
Phantom Readが発生しうる。
さらにUPDATEされた値は他のトランザクションから見える。Phantom Read
とUnrepeatable Readが発生しうる。
Read onlyなトランザクション隔離レベル。Phantom ReadとUnrepeatable
Readに加えてDirty Readも発生しうる。
隔離レベル vs 異常と性能
Dirty Read Unrepeatable
Read
Phantom
Read
Read Uncommitted ○ ○ ○
Read Committed × ○ ○
Reputable Read × × ○
Selealizable × × ×
データベースシステム論 第 回2016 [ 13 ] 46p.
パフォーマンス 安全性
次回予告
第14回 総復習!
データベースシステム論 第 回2016 [ 13 ] 47p.
第14回 総復習!
• 予習
• 対応箇所:教科書全部
• 関連個所:PostgreSQL 9.3.1文書 全部
• 最終回(第15回)
• ロックの続きとRDB以外のデータベース
• この回の話は期末試験範囲外とします
データベースシステム論 第 回2016 [ 13 ] 48p.
期末テスト対策

More Related Content

What's hot

トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
 
ノベルゲーム動的演出の考え方
ノベルゲーム動的演出の考え方ノベルゲーム動的演出の考え方
ノベルゲーム動的演出の考え方
tuna cook
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
Ryosuke Yamazaki
 
命名規則のススメ
命名規則のススメ命名規則のススメ
命名規則のススメ
natrium11321
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御
Takashi Hoshino
 
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
Yuya Rin
 
衝突判定
衝突判定衝突判定
衝突判定
Moto Yan
 
ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)
ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)
ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)
Wataru NOGUCHI
 
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
Akihiro Kuwano
 
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
Recruit Technologies
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
 
Prometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start PrometeusPrometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start Prometeus
Takeo Noda
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
Yohei Azekatsu
 
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Yahoo!デベロッパーネットワーク
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
tak9029
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 
グロースハック なぜ我々は無意味な施策を打ってしまうのか
グロースハック なぜ我々は無意味な施策を打ってしまうのかグロースハック なぜ我々は無意味な施策を打ってしまうのか
グロースハック なぜ我々は無意味な施策を打ってしまうのか
Yahoo!デベロッパーネットワーク
 

What's hot (20)

トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
 
ノベルゲーム動的演出の考え方
ノベルゲーム動的演出の考え方ノベルゲーム動的演出の考え方
ノベルゲーム動的演出の考え方
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 
命名規則のススメ
命名規則のススメ命名規則のススメ
命名規則のススメ
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御
 
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
 
衝突判定
衝突判定衝突判定
衝突判定
 
ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)
ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)
ネットワークシミュレータで手軽にネットワークのお勉強(GNS3編)
 
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
 
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
Prometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start PrometeusPrometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start Prometeus
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
 
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
グロースハック なぜ我々は無意味な施策を打ってしまうのか
グロースハック なぜ我々は無意味な施策を打ってしまうのかグロースハック なぜ我々は無意味な施策を打ってしまうのか
グロースハック なぜ我々は無意味な施策を打ってしまうのか
 

Viewers also liked

データベースシステム論15 - 関係データモデル以外のデータベース
データベースシステム論15 - 関係データモデル以外のデータベースデータベースシステム論15 - 関係データモデル以外のデータベース
データベースシステム論15 - 関係データモデル以外のデータベース
Shohei Yokoyama
 
Cent7@zabbix2.4を試す
Cent7@zabbix2.4を試すCent7@zabbix2.4を試す
Cent7@zabbix2.4を試す
masayoshi shiraishi
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
Tetsuya Mase
 
Wikipedia解析
Wikipedia解析Wikipedia解析
Wikipedia解析ghazel7
 
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
Terui Masashi
 
XMLデータベースについて
XMLデータベースについてXMLデータベースについて
XMLデータベースについてKoji Kawaguchi
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
Yuuki Namikawa
 
Riak: 本物の高可用性を実現する仕組みとは?
Riak: 本物の高可用性を実現する仕組みとは?Riak: 本物の高可用性を実現する仕組みとは?
Riak: 本物の高可用性を実現する仕組みとは?
Takahiko Sato
 
CAPとBASE、ACIDの呪縛
CAPとBASE、ACIDの呪縛CAPとBASE、ACIDの呪縛
CAPとBASE、ACIDの呪縛
Kazuki Aranami
 
VMware的インフラ仮想化の世界
VMware的インフラ仮想化の世界VMware的インフラ仮想化の世界
VMware的インフラ仮想化の世界
Takahiro HAGIWARA
 
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
Yukihiko SAWANOBORI
 
[D35] インメモリーデータベース徹底比較 by Komori
[D35] インメモリーデータベース徹底比較 by Komori[D35] インメモリーデータベース徹底比較 by Komori
[D35] インメモリーデータベース徹底比較 by KomoriInsight Technology, Inc.
 
Japan Developer Summit (jp) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (jp) - Cloud Foundry, the Open Platform As A ServiceJapan Developer Summit (jp) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (jp) - Cloud Foundry, the Open Platform As A Service
Patrick Chanezon
 
ngGoBuilder and collaborative development between San Francisco and Tokyo
ngGoBuilder and collaborative development between San Francisco and TokyongGoBuilder and collaborative development between San Francisco and Tokyo
ngGoBuilder and collaborative development between San Francisco and Tokyo
notolab
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
Yuuki Namikawa
 
CAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentCAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentYohei Yamamoto
 
ハードウェア勉強会[Shibuya Hw]
ハードウェア勉強会[Shibuya Hw]ハードウェア勉強会[Shibuya Hw]
ハードウェア勉強会[Shibuya Hw]
Akihiro Kuwano
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
Akihiro Kuwano
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)Akihiro Kuwano
 
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
Insight Technology, Inc.
 

Viewers also liked (20)

データベースシステム論15 - 関係データモデル以外のデータベース
データベースシステム論15 - 関係データモデル以外のデータベースデータベースシステム論15 - 関係データモデル以外のデータベース
データベースシステム論15 - 関係データモデル以外のデータベース
 
Cent7@zabbix2.4を試す
Cent7@zabbix2.4を試すCent7@zabbix2.4を試す
Cent7@zabbix2.4を試す
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
Wikipedia解析
Wikipedia解析Wikipedia解析
Wikipedia解析
 
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
 
XMLデータベースについて
XMLデータベースについてXMLデータベースについて
XMLデータベースについて
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
 
Riak: 本物の高可用性を実現する仕組みとは?
Riak: 本物の高可用性を実現する仕組みとは?Riak: 本物の高可用性を実現する仕組みとは?
Riak: 本物の高可用性を実現する仕組みとは?
 
CAPとBASE、ACIDの呪縛
CAPとBASE、ACIDの呪縛CAPとBASE、ACIDの呪縛
CAPとBASE、ACIDの呪縛
 
VMware的インフラ仮想化の世界
VMware的インフラ仮想化の世界VMware的インフラ仮想化の世界
VMware的インフラ仮想化の世界
 
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
 
[D35] インメモリーデータベース徹底比較 by Komori
[D35] インメモリーデータベース徹底比較 by Komori[D35] インメモリーデータベース徹底比較 by Komori
[D35] インメモリーデータベース徹底比較 by Komori
 
Japan Developer Summit (jp) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (jp) - Cloud Foundry, the Open Platform As A ServiceJapan Developer Summit (jp) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (jp) - Cloud Foundry, the Open Platform As A Service
 
ngGoBuilder and collaborative development between San Francisco and Tokyo
ngGoBuilder and collaborative development between San Francisco and TokyongGoBuilder and collaborative development between San Francisco and Tokyo
ngGoBuilder and collaborative development between San Francisco and Tokyo
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
 
CAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentCAPとBASEとEventually Consistent
CAPとBASEとEventually Consistent
 
ハードウェア勉強会[Shibuya Hw]
ハードウェア勉強会[Shibuya Hw]ハードウェア勉強会[Shibuya Hw]
ハードウェア勉強会[Shibuya Hw]
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
 
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
 

Similar to データベースシステム論13 - データベースの運用

データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
Shohei Yokoyama
 
データベースシステム論07 - SQL基礎演習2 データの問い合わせ
データベースシステム論07 - SQL基礎演習2 データの問い合わせデータベースシステム論07 - SQL基礎演習2 データの問い合わせ
データベースシステム論07 - SQL基礎演習2 データの問い合わせ
Shohei Yokoyama
 
データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化
Shohei Yokoyama
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
yoyamasaki
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
データベースシステム論08 - SQL応用演習 結合演算とその他
データベースシステム論08 - SQL応用演習 結合演算とその他データベースシステム論08 - SQL応用演習 結合演算とその他
データベースシステム論08 - SQL応用演習 結合演算とその他
Shohei Yokoyama
 
SAP Applicationのソース・エンドポイントとしての利用
SAP Applicationのソース・エンドポイントとしての利用SAP Applicationのソース・エンドポイントとしての利用
SAP Applicationのソース・エンドポイントとしての利用
QlikPresalesJapan
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Masayuki Ozawa
 
AWS Black Belt Online Seminar Amazon Redshift
AWS Black Belt Online Seminar Amazon RedshiftAWS Black Belt Online Seminar Amazon Redshift
AWS Black Belt Online Seminar Amazon Redshift
Amazon Web Services Japan
 
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #520160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5
Koichiro Sasaki
 
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
yoyamasaki
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付きInsight Technology, Inc.
 
081108huge_data.ppt
081108huge_data.ppt081108huge_data.ppt
081108huge_data.pptNaoya Ito
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table についてHaruka Ozaki
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
@ otsuka752
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方
Fujishiro Takuya
 
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
Serverworks Co.,Ltd.
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 
オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜
オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜
オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜
griddb
 
はじめてのAmazon Redshift
はじめてのAmazon RedshiftはじめてのAmazon Redshift
はじめてのAmazon Redshift
Jun Okubo
 

Similar to データベースシステム論13 - データベースの運用 (20)

データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
データベースシステム論09 - SQL応用演習2 ビューとトリガ、アクセス権
 
データベースシステム論07 - SQL基礎演習2 データの問い合わせ
データベースシステム論07 - SQL基礎演習2 データの問い合わせデータベースシステム論07 - SQL基礎演習2 データの問い合わせ
データベースシステム論07 - SQL基礎演習2 データの問い合わせ
 
データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
データベースシステム論08 - SQL応用演習 結合演算とその他
データベースシステム論08 - SQL応用演習 結合演算とその他データベースシステム論08 - SQL応用演習 結合演算とその他
データベースシステム論08 - SQL応用演習 結合演算とその他
 
SAP Applicationのソース・エンドポイントとしての利用
SAP Applicationのソース・エンドポイントとしての利用SAP Applicationのソース・エンドポイントとしての利用
SAP Applicationのソース・エンドポイントとしての利用
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
AWS Black Belt Online Seminar Amazon Redshift
AWS Black Belt Online Seminar Amazon RedshiftAWS Black Belt Online Seminar Amazon Redshift
AWS Black Belt Online Seminar Amazon Redshift
 
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #520160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5
 
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
081108huge_data.ppt
081108huge_data.ppt081108huge_data.ppt
081108huge_data.ppt
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方
 
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
MTDDC Meetup HOKKAIDO 2013 (サーバーワークス発表資料)
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜
オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜
オープンソースのIoT向けスケールアウト型データベース GridDB 〜性能ベンチマーク結果とOSSを利用したビッグデータ分析環境〜
 
はじめてのAmazon Redshift
はじめてのAmazon RedshiftはじめてのAmazon Redshift
はじめてのAmazon Redshift
 

More from Shohei Yokoyama

データベースシステム論14 - 総復習!
データベースシステム論14 - 総復習!データベースシステム論14 - 総復習!
データベースシステム論14 - 総復習!
Shohei Yokoyama
 
データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成
Shohei Yokoyama
 
データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計
Shohei Yokoyama
 
データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作
Shohei Yokoyama
 
データベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストールデータベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストール
Shohei Yokoyama
 
データベースシステム論04 - 関係代数(後半)
データベースシステム論04 - 関係代数(後半)データベースシステム論04 - 関係代数(後半)
データベースシステム論04 - 関係代数(後半)
Shohei Yokoyama
 
データベースシステム論03 - 関係データモデルと関係代数(前半)
データベースシステム論03 - 関係データモデルと関係代数(前半)データベースシステム論03 - 関係データモデルと関係代数(前半)
データベースシステム論03 - 関係データモデルと関係代数(前半)
Shohei Yokoyama
 
データベースシステム論02 - データベースの歴史と今
データベースシステム論02 - データベースの歴史と今データベースシステム論02 - データベースの歴史と今
データベースシステム論02 - データベースの歴史と今
Shohei Yokoyama
 
データベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンスデータベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンス
Shohei Yokoyama
 
静大情報学部オープンキャンパス ミニ講義CS系
静大情報学部オープンキャンパス ミニ講義CS系静大情報学部オープンキャンパス ミニ講義CS系
静大情報学部オープンキャンパス ミニ講義CS系
Shohei Yokoyama
 

More from Shohei Yokoyama (10)

データベースシステム論14 - 総復習!
データベースシステム論14 - 総復習!データベースシステム論14 - 総復習!
データベースシステム論14 - 総復習!
 
データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成
 
データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計
 
データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作
 
データベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストールデータベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストール
 
データベースシステム論04 - 関係代数(後半)
データベースシステム論04 - 関係代数(後半)データベースシステム論04 - 関係代数(後半)
データベースシステム論04 - 関係代数(後半)
 
データベースシステム論03 - 関係データモデルと関係代数(前半)
データベースシステム論03 - 関係データモデルと関係代数(前半)データベースシステム論03 - 関係データモデルと関係代数(前半)
データベースシステム論03 - 関係データモデルと関係代数(前半)
 
データベースシステム論02 - データベースの歴史と今
データベースシステム論02 - データベースの歴史と今データベースシステム論02 - データベースの歴史と今
データベースシステム論02 - データベースの歴史と今
 
データベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンスデータベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンス
 
静大情報学部オープンキャンパス ミニ講義CS系
静大情報学部オープンキャンパス ミニ講義CS系静大情報学部オープンキャンパス ミニ講義CS系
静大情報学部オープンキャンパス ミニ講義CS系
 

データベースシステム論13 - データベースの運用

  • 1. データベースシステム論 2016年度 前期 水曜 1・2時限 情24教室 担当:横山昌平 データベースシステム論 第 回2016 [ 13 ] 1p.
  • 2. 講義計画 • 関係データベースの歴史と基本概念 • SQLの基礎と応用(演習を含めつつ) • データベースの設計と構成 • SQL問い合わせ処理とそれを支える技術 • 関係データモデル以外のデータベース データベースシステム論 第 回2016 [ 13 ] 2p. ※現時点での予定です。進捗に応じて変更します。 27Apr. 20Apr. 13Apr. 25May 18May 11May 1June 8June 22June 15June 6July 29July 20July 27July 模 試 13July 質 問
  • 4. • 論理的に分割できない一連の処理の塊 • 例 • 複数人がプリンタで複数ページの書類を同時印刷 トランザクション データベースシステム論 第 回2016 [ 13 ] 4p. p.1 p.2 p.3 p.4 p.5 p.1 p.2 p.3 p.4 p.5 p.1 p.1 p.2 p.2 p.3 p.3 p.4 p.5 p.4 p.5 トランザクション
  • 5. DBとトランザクション データベースシステム論 第 回2016 [ 13 ] 5p. 複数人が同時に利用するデータベースは、 それぞれの人の処理が混合してしまうと、 保持するデータの整合性が取れなくなっ てしまう。つまりDBMSとして「トラン ザクション」が適正に処理されることを 保障する事は、最も重要な要件である。 ACID特性トランザクション処理に求められる性質
  • 6. Atomicity 原子性 データベースシステム論 第 回2016 [ 13 ] 6p. ある一連の処理の実行時に、以下の二つ の状態のどちらかである事を保障 • 一連の処理が全て処理されている • 一連の処理が全く処理されていない 処理前 処理中 処理後処理1 処理2 2つのデータ更新処理からなるトランザクションにおいて、 処理2が失敗し、データが「処理中」の状態になってしまっ たとしても、「処理前」の状態に戻す(ロールバック)。
  • 7. ワインID 名前 産地ID 価格 1 シャブリ A 2400 7 コンチャ・イ・トロ E 980 価格 1400 -20 Consistency 一貫性 データベースシステム論 第 回2016 [ 13 ] 7p. データの持つルール(制約等)を満たさな くする処理が与えられた時に、その処理 を失敗させる(実行しない)事を保障。 タイムセール1000円引き! あり得ない! 商品値段の価格は負の値にはならない。これはSQLでは CREATE TABLE文のCHECK句において定義できる。DBMSは 一貫性を保障する為に、下記のような「結果として価格が負 になる」UPDATE文が与えられたとしても処理を失敗させる。
  • 8. Isolation 独立性 データベースシステム論 第 回2016 [ 13 ] 8p. トランザクション中の過程が他のトラン ザクションから隠ぺいされる事を保障。 例えば購入したワインを一件ずつ在庫テーブルから在庫数を 減らすトランザクションを考える。その際、別のユーザのト ランザクション中の中間状態のデータが、他のトランザク ションから見えてしまったら問題が生じてしまう。 赤 ロゼ 白 1 1 1 0 1 1 0 0 1 赤1つ ロゼ1つ 処理後の状態 中間状態 赤とロゼを一本 ずつ買おう~ ロゼと白を一本 ずつ買おう~
  • 9. Durability 耐久性 データベースシステム論 第 回2016 [ 13 ] 9p. 一旦トランザクションの成功を返したら、 その後システムクラッシュ等のトラブル が発生したとしても、成功時点の状態が データベースに反映されている事を保障。 データ データ トランザクション成功! 障害発生
  • 10. ACID特性 •Atomicity 原子性 •Consistency 一貫性 •Isolation 独立性 •Durability 耐久性 データベースシステム論 第 回2016 [ 13 ] 10p. DBMSを使えば、トランザクションの処理にお いて、これら四つの特性が(一応…)保障される。
  • 11. 「一連の処理」とは • ロワール(did=c)のワインはもう売るのを辞めよう! データベースシステム論 第 回2016 [ 13 ] 11p. wid name did price 1 シャブリ A 2400 2 ジュヴレシャンベルタン A 3000 3 サンテミリオン B 5800 4 オーメドック B 2200 5 サンセール C 2800 6 シャンパン D 4000 7 コンチャ・イ・トロ E 980 did district A ブルゴーニュ B ボルドー C ロワール D シャンパーニュ E チリ wine vineyard 1. wineテーブルからdidがCの行を削除 2. vineyardテーブルからdidがCの行を削除 ト ラ ン ザ ク シ ョ ン
  • 12. ACID特性が無いと起こる問題 データベースシステム論 第 回2016 [ 13 ] 12p. 1. wineテーブルからdidがCの行を削除 2. vineyardテーブルからdidがCの行を削除 1. wineテーブルにミュスカデを追加~♪ wid name did price 1 シャブリ A 2400 2 ジュヴレシャンベルタン A 3000 3 サンテミリオン B 5800 4 オーメドック B 2200 5 サンセール C 2800 6 シャンパン D 4000 1000 コンチャ・イ・トロ E 980 1001 ミュスカデ C 2100 did district A ブルゴーニュ B ボルドー C ロワール D シャンパーニュ E チリ wine vineyard 1001 ミュスカデ C 2100
  • 13. トランザクションを定義 データベースシステム論 第 回2016 [ 13 ] 13p. 1. トランザクションを始めます 4. トランザクションを失敗(アボート)させます 2. wineテーブルからdidがCの行を削除 3. vineyardテーブルからdidがCの行を削除 4. トランザクションを成功(コミット)させます START TRANSACTION; トランザクション開始 前の状態に戻す トランザクションに よる変更を確定する。 もしくは・・・ ROLLBACK; COMMIT; START TRANSACTION
  • 14. つまり・・・ データベースシステム論 第 回2016 [ 13 ] 14p. START TRANSACTION; ROLLBACK; COMMIT; 処理処理 処理 処理 処理 処理 処理 処理 処理 処理 処理 ACIDが保障される!
  • 16. ROLLBACKの動作 • トランザクションの開始 • wineテーブル全行削除 • 確認(コミット前) • トランザクションをアボート • 確認(コミット後) データベースシステム論 第 回2016 [ 13 ] 16p. START TRANSACTION; DELETE FROM wine; SELECT * FROM wine; ROLLBACK; SELECT * FROM wine; A A A A A
  • 17. ROLLBACKの動作 - 結果 データベースシステム論 第 回2016 [ 13 ] 17p. dbsys=# START TRANSACTION;; START TRANSACTION dbsys=# DELETE FROM wine; DELETE 8 dbsys=# SELECT * FROM wine; wid | name | did | price -----+------+-----+------- (0 行) dbsys=# ROLLBACK; ROLLBACK dbsys=# SELECT * FROM wine; wid | name | did | price ------+------------------------+-----+------- 1 | シャブリ | A | 2400 2 | ジュヴレシャンベルタン | A | 3000 3 | サンテミリオン | B | 5800 4 | オーメドック | B | 2200 5 | サンセール | C | 2800 6 | シャンパン | D | 4000 7 | コンチャ・イ・トロ | E | 980 (7 行)
  • 18. COMMITの動作 • トランザクションの開始 • wineテーブル一行追加 • 確認① • トランザクションをコミット • 確認② データベースシステム論 第 回2016 [ 13 ] 18p. START TRANSACTION; INSERT INTO wine VALUES(8,’ミュスカデ’,’C’,2100); SELECT * FROM wine; COMMIT; SELECT * FROM wine; A A A A A SELECT * FROM wine; B SELECT * FROM wine; B
  • 19. COMMITの動作 - 結果 • コミット前 データベースシステム論 第 回2016 [ 13 ] 19p. dbsys=# START TRANSACTION; START TRANSACTION dbsys=# INSERT INTO wine VALUES(1001,'ミュスカデ','C',2100); INSERT 0 1 dbsys=# SELECT * FROM wine; wid | name | did | price ------+------------------------+-----+------- 1 | シャブリ | A | 2400 2 | ジュヴレシャンベルタン | A | 3000 3 | サンテミリオン | B | 5800 4 | オーメドック | B | 2200 5 | サンセール | C | 2800 6 | シャンパン | D | 4000 7 | コンチャ・イ・トロ | E | 980 8 | ミュスカデ | C | 2100 (8 行) dbsys=# commit; COMMIT dbsys=# select * from wine; wid | name | did | price ------+------------------------+-----+------- 1 | シャブリ | A | 2400 2 | ジュヴレシャンベルタン | A | 3000 3 | サンテミリオン | B | 5800 4 | オーメドック | B | 2200 5 | サンセール | C | 2800 6 | シャンパン | D | 4000 7 | コンチャ・イ・トロ | E | 980 (7 行) A B ACID - 独立性:トランザクションAのコミット前の変更はBから見えない
  • 20. COMMITの動作 - 結果 • コミット後 データベースシステム論 第 回2016 [ 13 ] 20p. dbsys=# START TRANSACTION; START TRANSACTION dbsys=# INSERT INTO wine VALUES(1001,'ミュスカデ','C',2100); INSERT 0 1 dbsys=# SELECT * FROM wine; wid | name | did | price ------+------------------------+-----+------- 1 | シャブリ | A | 2400 2 | ジュヴレシャンベルタン | A | 3000 3 | サンテミリオン | B | 5800 4 | オーメドック | B | 2200 5 | サンセール | C | 2800 6 | シャンパン | D | 4000 7 | コンチャ・イ・トロ | E | 980 8 | ミュスカデ | C | 2100 (8 行) dbsys=# commit; COMMIT dbsys=# select * from wine; wid | name | did | price ------+------------------------+-----+------- 1 | シャブリ | A | 2400 2 | ジュヴレシャンベルタン | A | 3000 3 | サンテミリオン | B | 5800 4 | オーメドック | B | 2200 5 | サンセール | C | 2800 6 | シャンパン | D | 4000 7 | コンチャ・イ・トロ | E | 980 8 | ミュスカデ | C | 2100 (8 行) A B ACID - 独立性: Aがコミットした瞬間、Aによるデータの変更がBからも見える
  • 21. 状態とその遷移 • トランザクションの状態を一般化して考える データベースシステム論 第 回2016 [ 13 ] 21p. active partially committed failed committed terminated start transaction read/write rollback commit rollback
  • 22. SQLとトランザクション • トランザクションの開始 • トランザクションのコミット • トランザクションのアボート データベースシステム論 第 回2016 [ 13 ] 22p. START TRANSACTION mode [,mode]; COMMIT [WORK | TRANSACTION]; ROLLBACK [WORK | TRANSACTION]; ※スライドはPostgreSQLでの例、標準SQLは教科書参照
  • 23. トランザクションの種類 • 自動コミット(Autocommit)モード • 明示的な(Explicit)モード • 暗黙の(Implicit)モード データベースシステム論 第 回2016 [ 13 ] 23p. ※教科書の記述が不明瞭ですがSTART TRANSACTION 文のmodeではありません 各SQL文が実行されるたびに、トランザクションがコ ミットされる。(PostgreSQLのデフォルト動作) START TRANSACTION文でトランザクションを開始し、 COMMIT/ROLLBACKで終了させる。 最初のSQL文の発行でトランザクションを自動で開始 し、COMMIT/ROLLBACKで終了させる。(標準SQL仕様)
  • 24. トランザクション処理とは 否 データベースシステム論 第 回2016 [ 13 ] 24p. 単にある人のコマンド群が実行さ れている間、別の人のコマンドの 処理をブロックしているだけ? 同時にできる処理は同時に走らせ ないと、とてもじゃないが無駄な 待ち時間が大量に発生して、シス テムのスループットが上がらない。
  • 25. 同時実行制御 (Concurrency Control) • 前提:一人ずつ利用すれば問題は起きない • この時代、そんな悠長な事は言っていられない! • トランザクション • 複数を同時に実行しても破綻しない仕組み・概念 • 同時実行の利点 • CPUとI/Oは並列に実行できるのでディスクならび にCPUが暇な(idle)時間の量を減らせる。 • 短いトランザクションと長いトランザクションをイ ンターリーブ(interleave、交互に差し挟む)して実行 すると,通常は短いトランザクションのほうが早く 終わり,長いトランザクションの後回しになること は少ない. データベースシステム論 第 回2016 [ 13 ] 25p.
  • 26. 同時実行による異常パターン① • Dirty Read (Write-Read conflict) データベースシステム論 第 回2016 [ 13 ] 26p. T1 T2 read(x); x = x – d; write(x); read(x); y=x; write(y); abort; ここでのxはT1によって更新 済みだが、後でT1はアボート している事に注目!
  • 27. 同時実行による異常パターン② • Unrepeatable Read (Read-Write conflict) データベースシステム論 第 回2016 [ 13 ] 27p. T1 T2 read(x); read(x); x=x + d; write(x); read(x); 同じトランザクション内で 同じxを呼び出しているにも 関わらず得られる値が異なる。
  • 28. 同時実行による異常パターン③ • Lost Update (Write-Write conflict) データベースシステム論 第 回2016 [ 13 ] 28p. T1 T2 read(x); read(x); x=x + d; write(x); x = x – d; write(x); T2の方で行われた更新が、T1の 更新によってロストしてしまう。
  • 29. 同時実行による異常パターン④ • Phantom Read データベースシステム論 第 回2016 [ 13 ] 29p. T1 T2 read(X); delete(X[n]); read(X); T2により集合Xの要素nが消去され た、それによりT1の最初のreadで 現れた要素nが二番目のreadでは 現れないという現象が起こる
  • 30. 用語 • スケジュール • 直列スケジュール • 直列可能 • 競合直列可能スケジュール データベースシステム論 第 回2016 [ 13 ] 30p. 複数のトランザクション(T1,T2,…,Tn)に含まれる操作の列 並列実行した場合と直列に実行した場合で結果が等しい場合、そ の操作は直列可能であるという。 トランザクションを並列実行した場合に直列スケジュールと等価 の結果を得られるスケジュール トランザクションを1つずつ逐次的に処理するスケジュール
  • 32. 先行グラフ(直列可能性グラフ) データベースシステム論 第 回2016 [ 13 ] 32p. T1 T2 read(x); write(x); read(x); write(x); T1 T2 read(x); read(x); write(x) write(x) ルール:トランザクションTiに対してノードを割り当てる。Tiがx をwriteした後にTjがxをwriteもしくはreadしたか、Tiがxをreadし た後にTjがxをwriteしたら、TiからTjにエッジを作る。 T1 T2 T1 T2 閉 路 閉路がなければ競合直列可能
  • 34. ロックとは • リソースに鍵をかけ、他のトランザクションか らアクセスを許さない事 • 共有ロック (Shared LockまたはRead Lock) • 専有ロック (Exclusive LockまたはWrite Lock) データベースシステム論 第 回2016 [ 13 ] 34p. 他のトランザクションから同じリソースを共有ロックする事は できるが、専有ロックはできない状態のロック。データの読み込 みの際にリソースをロックする場合に利用する。 他のトランザクションから同じリソースを共有ロック・専有ロッ クいずれもできない状態のロック。データを書き込む際にリソー スをロックする場合に利用する。 ※他のトランザクションはリソースがアンロックされるまで、処理を待つ必要がある。
  • 35. DBにおけるロックのレベル • データベース • データベース全体に対して1つのトランザクションのみ が処理を許される状態。 • システムのバージョンアップ等に利用 • テーブルスペース • 複数のテーブルをロック • テーブル • 1つのテーブル全体をロック • ブロック、ページ、エクステント • 物理的な領域に対するロック • 行 • 特定の行のみのロック • 検索し、外部プログラムで値を変更し、更新する場合等 データベースシステム論 第 回2016 [ 13 ] 35p.
  • 36. ロックを使うにあたって • 使用上の注意 • 実際にはもう少しロックの種類があります(p.127) • また、DBMSによっても異なります。 • 例:PostgreSQL • http://www.postgresql.jp/document/9.3/html/explicit- locking.html • さらに明示的なロックの構文はDBMS毎に異なって いるので注意が必要です。 • 例えばテーブル単位のロックを提供するLock Table 文は標準SQLでは定義されていません。 データベースシステム論 第 回2016 [ 13 ] 36p.
  • 37. テーブルのロック データベースシステム論 第 回2016 [ 13 ] 37p. LOCK TABLE テーブル名 IN lockmode MODE; 求するロック モード 現在のロックモード ACCESS SHARE ROW SHARE ROW EXCLUSIVE SHARE UPDATE EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE ACCESS EXCLUSIVE ACCESS SHARE X ROW SHARE X X ROW EXCLUSIVE X X X X SHARE UPDATE EXCLUSIVE X X X X X SHARE X X X X X SHARE ROW EXCLUSIVE X X X X X X EXCLUSIVE X X X X X X X ACCESS EXCLUSIVE X X X X X X X X
  • 38. テーブルのロック - SQL • ワインテーブルをロックし確認 • 結果からロックが機能している事を確認せよ • トランザクション終了と共にロックは解除 • 解除された事を確認せよ(どうやって?) データベースシステム論 第 回2016 [ 13 ] 38p. START TRANSACTION; LOCK wine IN ACCESS EXCLUSIVE MODE; SELECT * FROM wine; SELECT * FROM wine; A B A COMMIT; もしくは ROLLBACK; A
  • 39. 行のロック • UPDATE • 専有ロック • ここで得られた行に対して後でUPDATEする場合 • SHARE • 共有ロック データベースシステム論 第 回2016 [ 13 ] 39p. SELECT * FROM テーブル名 ・・・ FOR [UPDATE,SHARE];
  • 40. 行のロック- SQL • ワインテーブルのある行をロックし確認 • wid=1の行のみがロックされている事を確認 • 次にその行の価格を更新する • トランザクション終了と共にロックは解除 • BのブロックされたSELECT文の出力はprice=100000? データベースシステム論 第 回2016 [ 13 ] 40p. START TRANSACTION; SELECT * FROM wine WHERE wid = 1 FOR UPDATE; START TRANSACTION; SELECT * FROM wine WHERE wid = 2 FOR UPDATE; SELECT * FROM wine WHERE wid = 1 FOR UPDATE; B A UPDATE wine SET price = 100000 WHERE wid = 1; COMMIT;A
  • 41. デッドロック • ロックにつきものの忌まわしい問題 • 例 データベースシステム論 第 回2016 [ 13 ] 41p. 二つのリソースに対してロックをかける二つのトランザクション が、互いにアンロックを待って先に進めなくなる状態。 ※二つ以上でも可 T1 T2 lock(x); lock(y); lock(y); lock(x); T2がyのロックを解除するのを待つ T1がyのロックを解除するのを待つ 一生ストップ!
  • 42. デッドロック- SQL • wineとvineyardを使ってデッドロックを起こす データベースシステム論 第 回2016 [ 13 ] 42p. START TRANSACTION; LOCK wine IN ACCESS EXCLUSIVE MODE; START TRANSACTION; LOCK vineyard IN ACCESS EXCLUSIVE MODE; A B A LOCK vineyard IN ACCESS EXCLUSIVE MODE; LOCK wine IN ACCESS EXCLUSIVE MODE; B どうなった?
  • 43. デッドロック- 結果 データベースシステム論 第 回2016 [ 13 ] 43p. dbsys=# START TRANSACTION; START TRANSACTION dbsys=# LOCK wine IN ACCESS EXCLUSIVE MODE; LOCK TABLE dbsys=# LOCK vineyard IN ACCESS EXCLUSIVE MODE; ERROR: デッドロックを検出しました DETAIL: プロセス 9284 は AccessExclusiveLock を データベース16393のリレーション 24616 で待機していましたが、プロセス 5712 でブロックされました プロセス 5712 は AccessExclusiveLock を データベース16393のリレーション24621 で 待機していましたが、プロセス 9284 でブロックされました HINT: クエリーの詳細はサーバログを参照してください 作為的にデッドロックを起こすと、すぐに PostgreSQLがそのデッドロックを検知してエ ラーを返すとともに、ロックを解除してくれた。
  • 44. デッドロックの検出 • wait-forグラフ(待ちグラフ) • ノード:各トランザクション • エッジ:ロック解除を待つ方向 • 閉路=デッドロックの発生→どちらかをアボート データベースシステム論 第 回2016 [ 13 ] 44p. T1 T2 lock(x); lock(y); lock(y); lock(x); T1 T2 閉 路 y x x
  • 45. トランザクションの隔離レベル • SERIALIZABLE • REPEATEABLE READ • READ COMMITTED ※PostgreSQLのデフォルト • READ UNCOMMITTED データベースシステム論 第 回2016 [ 13 ] 45p. ※順番がだいぶ前後しますがこちらがSTART TRANSACTION 文のmodeです。 個別のリソースを明示的にロックするのではなく、トランザク ションの利用形態を開始時に示しDBMSがロックの制御をする。 トランザクションを最大限隔離し直列可能性を保証する。このトランザク ションがread/writeしたデータはコミットされるまで、他のトランザクション によって変更できない。 SERIALIZABLEに比べて、INSERされた値は他のトランザクションから見える。 Phantom Readが発生しうる。 さらにUPDATEされた値は他のトランザクションから見える。Phantom Read とUnrepeatable Readが発生しうる。 Read onlyなトランザクション隔離レベル。Phantom ReadとUnrepeatable Readに加えてDirty Readも発生しうる。
  • 46. 隔離レベル vs 異常と性能 Dirty Read Unrepeatable Read Phantom Read Read Uncommitted ○ ○ ○ Read Committed × ○ ○ Reputable Read × × ○ Selealizable × × × データベースシステム論 第 回2016 [ 13 ] 46p. パフォーマンス 安全性
  • 48. 第14回 総復習! • 予習 • 対応箇所:教科書全部 • 関連個所:PostgreSQL 9.3.1文書 全部 • 最終回(第15回) • ロックの続きとRDB以外のデータベース • この回の話は期末試験範囲外とします データベースシステム論 第 回2016 [ 13 ] 48p. 期末テスト対策