sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
TRANSCRIPT
SQL Serverデータアクセスの基本動作荒ぶった方法で確認してみよう
SQLTO 小澤 真之
自己紹介
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
昔このような話ありませんでした??
2013/07/13NAWA Tech3
SQL Server の内部はブラックボックスで詳細な内部情報見れないんでしょ??
¥
ブラック縄神君
¥
DBA の縄神君
クマー!!(訳:そんなことはない!!)
本日のお題
2013/07/13NAWA Tech
SQL Server ってブラックボックス??
そういうことを言うと「縄神様があらぶります」
そんなことはないということを基本動作を例にどこまで見れるかやってみようのコーナーです。
4
¥
SQL Server の基本操作
2013/07/13NAWA Tech
メモリ
データベース
データファイル(mdf)
ログファイル(ldf)
クライアント
SQL Server
①処理要求
②先行ログ書き込み
③メモリ上のデータ操作
③’メモリとディスク上のデータ操作
④クライアントに結果を返す
5
先行ログ書き込み (Write Ahead Log:WAL)
2013/07/13NAWA Tech
データの変更が発生した場合、最初の書き込みはデータファイルではなく、ログファイルに対して 先行 して行われる。 先行ログ書き込みにより、変更内容の履歴が最初に担保される
ログレコードには書き込まれているがデータファイルには書き込まれていないという状態が発生する。
SQL Server
データベース
データファイル(mdf)
ログファイル(ldf)
先行ログ書き込み
6
DEMO
2013/07/13NAWA Tech
ログレコードってどういうもの??
ログレコードを取得する関数で確認
7
チェックポイント
2013/07/13NAWA Tech
ログレコードに書き込まれたデータの変更は最初はメモリ上のデータに適用される
チェックポイント の発生時にデータファイルに書き込まれる。 チェックポイントの発生タイミングは復旧間隔で調整。デフォルト設定だと大体 60 秒に一度発生
データベース
メモリ
データファイル(mdf)
ログファイル(ldf) チェックポイント発生時に
メモリのデータをデータファイルに書き戻し
8
DEMO
2013/07/13NAWA Tech
データファイルに書き込まれていないデータ量って確認できる??
動的管理ビューで状態を確認バイナリエディタでデータファイルを開いてみる
ロールフォワードの確認ERRORLOG / データファイルを再確認
9
メモリ上からデータが退避
2013/07/13NAWA Tech
メモリは有限のリソースであるため、データベースのサイズが大きい場合にはすべてのデータをキャッシュしておくことはできない
メモリが不足した場合は参照頻度の低いデータをキャッシュアウト
データベース メモリ
データファイル(mdf)
ログファイル(ldf)
メモリにないデータはディスクから読み込まれるメモリが枯渇した場合は参照頻度の低いデータがメモリからキャッシュアウトされる
10
DEMO
2013/07/13NAWA Tech
参照回数って本当に持っているの??
ページの実情報で確認してみる
11
先行読み取り (Read Ahead)
2013/07/13NAWA Tech
データの取得を行う際には、対象のデータだけでなくデータベースエンジンが、必要となると思われる先のデータについても読み込みを行う。 Enterprise Edition のほうがより多くのページを先行して読み取る
非クラスターインデックスからベーステーブルのプレフェッチの数が多い
Col11 ~ 10
Col111 ~ 20
Col121 ~ 21
ページ
SELECT* FROM NAWAWHERE Col1 BETWEEN 0 AND 10
先行読み取り
12
先行読み取りを確認
2013/07/13NAWA Tech
先行読み取りって本当に行われているの??
クエリで読み取られるページの状況を確認
13
インデックスの構造
2013/07/13NAWA Tech
インデックスはツリー構造 (B-tree : Balanced Tree) で管理
インデックスのページはそれぞれが格納するデータ範囲と前後のページ情報でツリー構造を管理している
B-Tree
14
ルートノード
中間ノード
リーフノード
インデックスの種類
2013/07/13NAWA Tech
クラスター化インデックス テーブルに 1 個のみ設定できるインデックス テーブルにデータを格納する際にどの項目順で格納をするか制御
非クラスター化インデックス テーブルに 999 個 設定できるインデックス インデックスに設定した列だけで SELECT ができる場合はそのインデックスのみで処理がされるが、インデックスに含まれていない列が必要になった場合はクラスター化インデックスからデータを取得する
15
クラスター化インデックス 非クラスター化インデックス
DEMO
2013/07/13NAWA Tech
インデックスって本当にツリー構造になっているの??
動的管理ビューで見てみる
クラスター化インデックスと
非クラスター化インデックスの違い
16
ページの断片化
2013/07/13NAWA Tech17
ページに空きがなくなるとデータが追加できなくなる ページの最後に格納するデータであれば新規ページを追加してデータを格納すればよいが、既存ページ内にデータを格納する必要がある場合はページを分割して空きを作る必要がある 50 / 50 分割
102030405060708090100
11
5060708090100
10
203040
11
DEMO
2013/07/13NAWA Tech18
ページ分割って本当に 50% / 50% に分かれるの??
ページの実情報で確認してみる
まとめ
2013/07/13NAWA Tech19
SQL Server の内部情報はいろいろとみることができます。
今回はデータ構造に関しての内容を主に紹介しましたが他にもメモリの情報や CPU (スケジューラー) の情報を詳細に取得することもできます。
実際の動作を概念として理解していた場合、その実動作を負うことも可能です。
SQL Server の情報は確認できる!!