Upload
masayuki-ozawa
View
1.116
Download
0
Embed Size (px)
Citation preview
その 裏側 に迫る
小澤 真之 (@Masayuki_Ozawa)
SQL Azure
SQL Database
本日のお題
この制約の中で CPU 数 / データファイル数等の情報を
取得してみようという誰得情報 をお送りしてみたいと思います。
2
使用できる動的管理ビューが限定されている
リモートデスクトップで接続できない
DBCC コマンドは使用できない
今回取得した情報
3
スケジューラー (CPU) 数
ユーザー DB のデータファイルの数
tempdb のデータファイルの数
スケジューラー (CPU) 数
4※ざっくりいうと CPU コア数 = スケジューラー数
スケジューラー数
• SQL Server 2012 だと…
5
サーバーのプロパティ
sys.dm_os_schedulers
スケジューラー数
• SQL Database ではこれらの情報は取得できない…。
6
ということで、全力で負荷をかけて違うことろから情報を持ってきてみました。
使用したツール
Enzo SQL Baseline
7http://enzosqlbaseline.codeplex.com/
特定の SQL を複数スレッドを使用して同時に実行することができるツール
このツールでぶん回します(500スレッドで同時に INSERT)
スケジューラー数の取得方法
• 負荷をかけている最中に [sys.dm_exec_requests] の[scheduler_id] を取得– 接続単位にどのスケジューラーを使用しているか確認できる
8
2011/06 に取得2012/09 に取得
7~8コアぐらいはあるらしい
ついでに NUMA ノード数
9
• 負荷をかけている最中に [sys.dm_exec_connections] の[node_affinity] を取得– 接続単位にどの NUMA ノードに接続がされているかを確認できる
2012/09 に取得
2 NUMA ノード構成らしいおそらく 2 物理 CPU ソケット
2 CPU : 8 コア環境かも
参考)使用したクエリ
-- スケジューラー数SELECT
scheduler_id, COUNT(*) AS RequestCount
FROMsys.dm_exec_requests
GROUP BYscheduler_id
-- NUMA ノード数SELECT
node_affinity, COUNT(*)
FROM sys.dm_exec_connections
GROUP BY node_affinity
10
データファイル数
11
データファイル数
• SQL Server 2012 だと…
12
データベースのプロパティ
sys.database_files
データファイル数
• SQL Database ではこれらの情報は取得できない…。
13
ということで、全力でぶん回して(以下略)
データファイル数の取得方法
• 大量のロックを取得してロックがかかっているページ番号を[sys.dm_tran_locks] から取得してグルーピング– ファイル ID : ページ ID の形式の情報 が取得できる
14
2012/09 に取得2011/06 に取得
データファイルは 10 ファイルで構成されているらしい※ファイル ID 2 はログファイル
参考)使用したクエリSET NOCOUNT ON
CREATE TABLE [dbo].[Table_1](
[Col1] [uniqueidentifier] NOT NULL,
[Col2] [int] NULL,
[Col3] [char](4500) NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
([Col1] ASC)
)
BEGIN TRAN
DECLARE @i int = 0
WHILE (@i < 100000)
BEGIN
INSERT INTO Table_1 VALUES(NEWID(), @i , NEWID())
SET @i += 1
END
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
DELETE FROM Table_1
SELECT DISTINCT CONVERT(int, LEFT(resource_description,PATINDEX('%:%',resource_description) -1))
FROM sys.dm_tran_locks
WHERE resource_type = 'PAGE'
ORDER BY 1
ROLLBACK TRAN
DROP TABLE [dbo].[Table_1]
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
15
tempdb のデータファイル数
16
tepmdb のデータファイル数
• SQL Server 2012 だと…
17
データベースのプロパティ
sys.database_files
tepmdb のデータファイル数
• SQL Database ではこれらの情報は取得できない…。
18
ということで、全力でぶん回して(以下略)
tepmdb のデータファイル数の取得方法
• 一時テーブルに大量にデータを挿入して、ページに対しての I/O 同期待ちを発生させて、裏でその情報を取得– DB ID : ファイル ID : ページ ID の形式の情報 が取得できる
19
2012/09 に取得 2011/06 に取得
データファイルは 10 ファイルで構成されているらしい
※2:1がないので 11 ファイルの可能性も
参考)使用したクエリ-- 負荷用SET NOCOUNT ON
CREATE TABLE [dbo].[#Table_1]( [Col1] [uniqueidentifier] NOT NULL, [Col2] [int] NULL, [Col3] [char](3000) NULL,
CONSTRAINT [PK_#Table_1] PRIMARY KEY CLUSTERED ([Col1] ASC) )
DECLARE @i int = 0 WHILE (@i < 400000) BEGIN
INSERT INTO #Table_1 VALUES(NEWID(), @i , NEWID()) SET @i += 1
END
ALTER INDEX PK_#Table_1 ON #Table_1 REBUILD UPDATE #Table_1 SET Col1 = NEWID()
DELETE FROM #Table_1
DROP TABLE [dbo].[#Table_1]
-- 情報取得用SET NOCOUNT ON CREATE TABLE #tmp(Col1 nvarchar(100), Col2 nvarchar(100))
WHILE (0=0) BEGIN INSERT INTO #tmpSELECT wait_type, wait_resourceFROM sys.dm_exec_requestsWHERE wait_type IS NOT NULL AND wait_resource <>'' END
SELECT DISTINCT LEFT(COl2,PATINDEX('2:%',Col2)+3)FROM #tmpWHERE LEFT(COl2,PATINDEX('2:%',Col2)) = 2 ORDER BY 1
20
まとめ
SQL Database は以下のような構成になっているかも
21
CPU コア数 7 ~ 8
物理ソケット数 2
データファイル数 10
tempdb ファイル数 10
試行錯誤するとこれ以外にもいろいろな情報が取れますのでこんな情報も取れるというものがありましたらぜひ教えてください♪