熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL Server執行SQL語句時內存占用特點[1]

2013-11-15 14:51:29  來源: SQL Server 

  眾所周知SQL Server執行SQL語句的性能判定標准主要是IO讀取數大小本文在不違反這一原則情況下同時來分析一下部分SQL語句執行時SQL Server內存的變化情況

  首先簡述一下SQL Server內存占用的特點SQL Server所占用的內存除程序(即SQL Server引擎)外主要包括緩存的數據(Buffer)和執行計劃(Cache)SQL Server以KB大小的頁為單位存儲數據這個和SQL Server數據在磁盤上的存儲頁大小相同當SQL Server執行SQL 語句時如果需要的數據已經在其內存中則直接從內存緩沖區讀取並進行必要的運算然後輸出執行結果如果數據還未在內存中則首先將數據從磁盤上讀入內存Buffer中而我們通常評價SQL性能指標中的IO邏輯讀取數對應的正是從內存緩沖區讀取的頁數而IO物理讀取數則對應數據從磁盤讀取的頁數

  注以下的試驗在多人共享的開發測試服務器上也可以進行因為實際上可以分別看到某個表所占用的內存情況但為了方便筆者在做此試驗時在一個單獨的確認沒有其它並發任務的數據庫上進行因此所看到的內存變化正是每一次所執行的SQL語句引起的

  我們首先來看一個簡單的實例創建下表

以下是引用片段
Create Table P_User
  ( UserMobileStatus int NOT NULL
  MobileNo int NOT NULL
  LastOpTime DateTime Not NULL
  )

  然後為該表插入一定的數據

以下是引用片段
Declare @i int
  Set @i=
  WHILE @i<
  BEGIN
  Insert Into P_User
  Select @i % @iGetUTCDate()
  Set @i=@i+
  END

  然後我們在查詢分析器中首先執行:

以下是引用片段
Set Statistics IO ON

  並按下Ctrl+M以顯示實際的執行計劃

  此時可以開始進行我們的試驗了為了准確觀察每一次SQL語句變化情況在執行第一條SQL語句以前我們首先清空SQL Server所占用的數據內存

以下是引用片段
CHECKPOINT
  GO
  DBCC DROPCLEANBUFFERS

  這將清空SQL Server所占用的數據緩沖區(此語句在生產服務器上慎用因為將導致一段時間內後續的SQL語句執行變慢)

  眾所周知SQL Server執行SQL語句的性能判定標准主要是IO讀取數大小本文在不違反這一原則情況下同時來分析一下部分SQL語句執行時SQL Server內存的變化情況

  首先簡述一下SQL Server內存占用的特點SQL Server所占用的內存除程序(即SQL Server引擎)外主要包括緩存的數據(Buffer)和執行計劃(Cache)SQL Server以KB大小的頁為單位存儲數據這個和SQL Server數據在磁盤上的存儲頁大小相同當SQL Server執行SQL 語句時如果需要的數據已經在其內存中則直接從內存緩沖區讀取並進行必要的運算然後輸出執行結果如果數據還未在內存中則首先將數據從磁盤上讀入內存Buffer中而我們通常評價SQL性能指標中的IO邏輯讀取數對應的正是從內存緩沖區讀取的頁數而IO物理讀取數則對應數據從磁盤讀取的頁數

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22447.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.