SQL Server 的記憶體分類

來源:互聯網
上載者:User

標籤:io   使用   資料   sp   c   on   cti   代碼   r   

第一類、

         根據申請方式分:

                             commit 型

                             它是指先reserve申請一大塊,再通過commit提交後得到的空間。這種方式申請到的空間可以啟用 awe !

 

                             stolen型

                             與commit 相對應!它不用reserve只是直接申請。它不能申請 AWE 擴充出的記憶體。

第二類、

         根據申請空間的大小分:

                                      single page allocation(buffer pool)型:

                                      如果要申請的空間大小小於8KB SQL Server會慷慨的分給8KB(一個資料頁)!

                                      

                                      multiple page allocation(MemToLeave)型:

                                      如果申請的頁面記憶體大於8KB 、它申請多 SQL Server 就給它多少!

-----------------------------------------------------------------------------------------------------------------------------------------------

總結:

      1、database cache 由雩都是資料頁、所以它儲存在single page allocation(buffer pool)裡

      2、connection 它儲存在哪這個它自己說了不算,要看network package size 的臉色、

           network package size預設是4KB所以connection 預設儲存在single page allocation(buffer pool)裡,不幸的是

           network package size 的大小是可以通過 sp_configure 調整的。所以connection 也可能儲存在multiple page allocation中

      3、 general (鎖的資料結構、事務上下文、表格索引的中繼資料)它們也是動態,如果它們比較小就儲存在single page allocation中

            如果你把語句寫的比較長它們就儲存在multiple page allocation 中

      4、第三方的代碼、SQL server是不知道它有多長的、所以把它儲存在mulitple page allocation 中。

      5、線程、因為每個線程的資料結構大小最小為512KB、所以把它儲存在mulitple page allocation 中。

 

 

下面說明一下記憶體的去向、

                               (以下以32位系統 4G記憶體為例,256 線程)

                               1、multiple page allocation:

                                   之所以又叫  MemToLeave 是因為SQL  Server 在啟動時把這塊地址預留了一下、預留多少

                                   是這樣算出來的。 256 + threads*0.5MB ; threads 是指最大線程數、可以通過sp_configure查看。

                                   根據上面運算式可以算出 multiple page allocation = 384MB;當sql server的mulitple page allocation

                                   到達384MB時、sql server 也就再也沒有辦法申請這種記憶體了。

                               2、single page allocation :

                                    multiple page allocation 的大小確定後 、single page allocation 的大小也就知道了 

                                    single page allocation = (2G - 384MB) = 1664MB 、也就是 single page allocation 的最大值

                                    SQL server 剛剛啟動時用不了 1664MB、當sql server 使用量達到 1664MB 或 max server memory

                                    參數所指定的值時、sql server就再也不能申請這種記憶體了、single page allocation 的值也就被限制了下來。

                                    然、

                                    如果記憶體大於 4G 也就說使用者太的記憶體也就大於2G、且開啟了 AWE 的話、多餘的記憶體也是可以被使用上的。

                                    前面說了AWE 的記憶體只可以通過  reserve\commit 方式供database cache 使用,別的用不了這塊記憶體,這

                                    樣  singel page allocation 的stolen 最多可以用 1664MB ,database cache 可以用AWE 擴充出來的空間。

                                    然、

                                    如果在64的機器上裝 32位的SQL Server 、因為64位的作業系統不用32位應用程式的地址空間、所以啊SQL 

                                    server 最高可用4G;   所以 single page allocation = (4G-384) = 3664MB;

                                    

 

SQL server 用最近最少使用演算法淘汰記憶體中的頁面。

                                   

              

 

                                      

 

SQL Server 的記憶體分類

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.