SQL Azureその 裏側 に迫る小澤 真之 (@Masayuki_Ozawa)
本日のお題     リモートデスクトップで接続できない   使用できる動的管理ビューが限定されている       DBCC コマンドは使用できない   この制約の中で CPU 数 / データファイル数等の情報を取得してみようという 誰得情報 を...
今回取得した情報   スケジューラー (CPU) 数 ユーザー DB のデータファイルの数  tempdb のデータファイルの数                      3
スケジューラー (CPU) 数※ざっくりいうと CPU コア数 = スケジューラー数   4
スケジューラー数• SQL Server 2012 だと…                        sys.dm_os_schedulers    サーバーのプロパティ                                   ...
スケジューラー数• SQL Database ではこれらの情報は取得できない…。   ということで、全力で負荷をかけて 違うことろから情報を持ってきてみました。                                   6
使用したツールEnzo SQL Baseline                                  特定の SQL を複数スレッドを                                  使用して同時に実行することが...
スケジューラー数の取得方法• 負荷をかけている最中に [sys.dm_exec_requests] の  [scheduler_id] を取得 – 接続単位にどのスケジューラーを使用しているか確認できる      2012/09 に取得    ...
ついでに NUMA ノード数• 負荷をかけている最中に [sys.dm_exec_connections] の  [node_affinity] を取得  – 接続単位にどの NUMA ノードに接続がされているかを確認できる          ...
参考)使用したクエリ-- スケジューラー数SELECT       scheduler_id,       COUNT(*) AS RequestCountFROM       sys.dm_exec_requestsGROUP BY     ...
データファイル数           11
データファイル数• SQL Server 2012 だと…                        sys.database_files    データベースのプロパティ                                   ...
データファイル数• SQL Database ではこれらの情報は取得できない…。     ということで、全力でぶん回して           (以下略)                                   13
データファイル数の取得方法• 大量のロックを取得してロックがかかっているページ番号を  [sys.dm_tran_locks] から取得してグルーピング – ファイル ID : ページ ID の形式の情報          が取得できる    ...
参考)使用したクエリSET NOCOUNT ONCREATE TABLE [dbo].[Table_1](   [Col1] [uniqueidentifier] NOT NULL,   [Col2] [int] NULL,   [Col3] ...
tempdb のデータファイル数                   16
tepmdb のデータファイル数• SQL Server 2012 だと…                        sys.database_files    データベースのプロパティ                           ...
tepmdb のデータファイル数• SQL Database ではこれらの情報は取得できない…。     ということで、全力でぶん回して           (以下略)                                   18
tepmdb のデータファイル数の取得方法• 一時テーブルに大量にデータを挿入して、ページに対しての I/O 同期待  ちを発生させて、裏でその情報を取得 – DB ID : ファイル ID : ページ ID の形式の情報      が取得でき...
参考)使用したクエリ-- 負荷用SET NOCOUNT ONCREATE TABLE [dbo].[#Table_1](   [Col1] [uniqueidentifier] NOT NULL,   [Col2] [int] NULL,   ...
まとめSQL Database は以下のような構成になっているかも      CPU コア数        7~8      物理ソケット数        2      データファイル数       10      tempdb ファイル数  ...
Upcoming SlideShare
Loading in …5
×

Sql database その裏側に迫る

1,684 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,684
On SlideShare
0
From Embeds
0
Number of Embeds
70
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Sql database その裏側に迫る

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

×