想像してみると書いていますように、取得できた情報から 「こういう感じかな~」 と思ったことを書いています。
あらかじめご了承ください。
SQL Server のデータベースの基本構成は以下のようになります。
# パーティショニングテーブルは除く
データベースは
- データ
- ログ
で構成され、データは
- 一つのファイルグループに属し
- ファイルグループは一つ以上のデータファイルで構成
で構成されます。
ファイルグループは複数のデータファイルで構成することもできますので、
ということも可能になります。
本日は SQL Azure ではこの構成がどのようになっているかを想像してみたいと思います。
SQL Azure はこの手のファイル構成を意識しないでよい (任意の構成に変更できない) のですが、気になったので調べてみました。
■SQL Server 2008 R2 で確認してみる
オンプレミスの SQL Server でデータベースのファイル構成を確認する場合は、SSMS でデータベースのプロパティを開くか、
以下のクエリで確認することができます。
select * from sys.database_files |
これらの方法を SQL Azure で試してみます。
SQL Azure のデータベースを右クリックしてもプロパティは表示されません。
[sys.database_files] も使用できないのでエラーとなってしまいます。
■SQL Azure でどう調べるか
さて、SQL Azure でどうやって調べようかと考えたところ、ロックで調べられないかな~とふと思いました。
# ラッチ wait で見るという方法もありますが。
ということで以下のようなクエリを実行してみました。
SET NOCOUNT ON CREATE TABLE [dbo].[Table_1]( BEGIN TRAN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRAN SELECT DISTINCT LEFT(resource_description,PATINDEX(‘%:%’,resource_description) -1) ROLLBACK TRAN DROP TABLE [dbo].[Table_1] |
ページのロックについては、[ファイル ID : ページ番号] の形式で resource_description が設定されます。
そのため、[:] の前までを取得するとそのデータベースのファイル構成が取得できることになります。
今回も Web Edition の 1GB のデータベースを使用しているのですが、この環境では [1, 3~11] までの全 10 ファイルで構成がされているようですね。
2 が飛んでいますが通常、ファイル ID 2 はトランザクションログのファイルなので、この辺の構成は SQL Azure でも同じようです。
SQL Server 2008 R2 でデータファイルを 10 ファイルで構成したデータベースに対して同じようなクエリを実行した時の結果がこちらになります。
# レスポンスが出なかったので件数は少なくしています。
結果としては同じものが取得できていますね。
SQL Azure の INSERT は単純に 1 ファイルで構成した SQL Server と比較して、早い気がしているのですが、データファイルは最適化されているのかもしれないですね。
[…] SQL Azure のデータベースのファイル構成を想像してみる の派生で、今回はユーザーデータベースではなく tempdb について想像してみたいと思います。 前回に引き続き今回も想像です。 […]
SQL Azure のデータベースのファイル構成を想像してみる -tempdb 編- « SE の雑記
9 6月 11 at 22:49
[…] 以前投稿した、SQL Azure のデータベースのファイル構成を想像してみる と合わせてみると SQL Azure のデータベースのデータファイルは […]
SQL Azure のデータベースのファイルグループについて調べてみる « SE の雑記
20 6月 11 at 20:50