sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

19
SQL Serverデータアクセスの基本動作 荒ぶった方法で確認してみよう SQLTO 小澤 真之

Upload: masayuki-ozawa

Post on 06-Jul-2015

450 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

SQL Serverデータアクセスの基本動作荒ぶった方法で確認してみよう

SQLTO 小澤 真之

Page 2: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

自己紹介

2013/07/13NAWA Tech

普段は SQL Server の案件を中心に仕事をしています

企業内に設置するオンプレミス環境の SQL Server を使用した案件に携わる機会が多いです。

本日は 2 セッション担当させていただきますが、SQL Server が本職です

SQL Server のコミュニティ SQLTO と Windows Azure のコミュニティJAZUG に参加させていただいています。

JAZUG 名古屋支部ができました!! 皆様よろしくお願いいたします。

ブログ : SE の雑記 (http://engineermemo.wordpress.com)

Twitter : @Masayuki_Ozawa

Facebook : masayuki.ozawa

2

Page 3: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

昔このような話ありませんでした??

2013/07/13NAWA Tech3

SQL Server の内部はブラックボックスで詳細な内部情報見れないんでしょ??

ブラック縄神君

DBA の縄神君

クマー!!(訳:そんなことはない!!)

Page 4: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

本日のお題

2013/07/13NAWA Tech

SQL Server ってブラックボックス??

そういうことを言うと「縄神様があらぶります」

そんなことはないということを基本動作を例にどこまで見れるかやってみようのコーナーです。

4

Page 5: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

SQL Server の基本操作

2013/07/13NAWA Tech

メモリ

データベース

データファイル(mdf)

ログファイル(ldf)

クライアント

SQL Server

①処理要求

②先行ログ書き込み

③メモリ上のデータ操作

③’メモリとディスク上のデータ操作

④クライアントに結果を返す

5

Page 6: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

先行ログ書き込み (Write Ahead Log:WAL)

2013/07/13NAWA Tech

データの変更が発生した場合、最初の書き込みはデータファイルではなく、ログファイルに対して 先行 して行われる。 先行ログ書き込みにより、変更内容の履歴が最初に担保される

ログレコードには書き込まれているがデータファイルには書き込まれていないという状態が発生する。

SQL Server

データベース

データファイル(mdf)

ログファイル(ldf)

先行ログ書き込み

6

Page 7: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

DEMO

2013/07/13NAWA Tech

ログレコードってどういうもの??

ログレコードを取得する関数で確認

7

Page 8: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

チェックポイント

2013/07/13NAWA Tech

ログレコードに書き込まれたデータの変更は最初はメモリ上のデータに適用される

チェックポイント の発生時にデータファイルに書き込まれる。 チェックポイントの発生タイミングは復旧間隔で調整。デフォルト設定だと大体 60 秒に一度発生

データベース

メモリ

データファイル(mdf)

ログファイル(ldf) チェックポイント発生時に

メモリのデータをデータファイルに書き戻し

8

Page 9: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

DEMO

2013/07/13NAWA Tech

データファイルに書き込まれていないデータ量って確認できる??

動的管理ビューで状態を確認バイナリエディタでデータファイルを開いてみる

ロールフォワードの確認ERRORLOG / データファイルを再確認

9

Page 10: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

メモリ上からデータが退避

2013/07/13NAWA Tech

メモリは有限のリソースであるため、データベースのサイズが大きい場合にはすべてのデータをキャッシュしておくことはできない

メモリが不足した場合は参照頻度の低いデータをキャッシュアウト

データベース メモリ

データファイル(mdf)

ログファイル(ldf)

メモリにないデータはディスクから読み込まれるメモリが枯渇した場合は参照頻度の低いデータがメモリからキャッシュアウトされる

10

Page 11: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

DEMO

2013/07/13NAWA Tech

参照回数って本当に持っているの??

ページの実情報で確認してみる

11

Page 12: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

先行読み取り (Read Ahead)

2013/07/13NAWA Tech

データの取得を行う際には、対象のデータだけでなくデータベースエンジンが、必要となると思われる先のデータについても読み込みを行う。 Enterprise Edition のほうがより多くのページを先行して読み取る

非クラスターインデックスからベーステーブルのプレフェッチの数が多い

Col11 ~ 10

Col111 ~ 20

Col121 ~ 21

ページ

SELECT* FROM NAWAWHERE Col1 BETWEEN 0 AND 10

先行読み取り

12

Page 13: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

先行読み取りを確認

2013/07/13NAWA Tech

先行読み取りって本当に行われているの??

クエリで読み取られるページの状況を確認

13

Page 14: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

インデックスの構造

2013/07/13NAWA Tech

インデックスはツリー構造 (B-tree : Balanced Tree) で管理

インデックスのページはそれぞれが格納するデータ範囲と前後のページ情報でツリー構造を管理している

B-Tree

14

ルートノード

中間ノード

リーフノード

Page 15: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

インデックスの種類

2013/07/13NAWA Tech

クラスター化インデックス テーブルに 1 個のみ設定できるインデックス テーブルにデータを格納する際にどの項目順で格納をするか制御

非クラスター化インデックス テーブルに 999 個 設定できるインデックス インデックスに設定した列だけで SELECT ができる場合はそのインデックスのみで処理がされるが、インデックスに含まれていない列が必要になった場合はクラスター化インデックスからデータを取得する

15

クラスター化インデックス 非クラスター化インデックス

Page 16: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

DEMO

2013/07/13NAWA Tech

インデックスって本当にツリー構造になっているの??

動的管理ビューで見てみる

クラスター化インデックスと

非クラスター化インデックスの違い

16

Page 17: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

ページの断片化

2013/07/13NAWA Tech17

ページに空きがなくなるとデータが追加できなくなる ページの最後に格納するデータであれば新規ページを追加してデータを格納すればよいが、既存ページ内にデータを格納する必要がある場合はページを分割して空きを作る必要がある 50 / 50 分割

102030405060708090100

11

5060708090100

10

203040

11

Page 18: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

DEMO

2013/07/13NAWA Tech18

ページ分割って本当に 50% / 50% に分かれるの??

ページの実情報で確認してみる

Page 19: Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう

まとめ

2013/07/13NAWA Tech19

SQL Server の内部情報はいろいろとみることができます。

今回はデータ構造に関しての内容を主に紹介しましたが他にもメモリの情報や CPU (スケジューラー) の情報を詳細に取得することもできます。

実際の動作を概念として理解していた場合、その実動作を負うことも可能です。

SQL Server の情報は確認できる!!