zoukankan      html  css  js  c++  java
  • SQL Server 的内存分类

    第一类、

             根据申请方式分:

                                 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 的内存只可以通过  reservecommit 方式供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 用最近最少使用算法淘汰内存中的页面。

                                       

                  

                                          

  • 相关阅读:
    Oracle,第六周
    JAVA创建对象的几种方式
    深拷贝和浅拷贝
    Facade
    Adapter
    低谷过去了
    Oracle,第五周
    Command
    Singleton
    mybatis自动生成mapping和实体
  • 原文地址:https://www.cnblogs.com/JiangLe/p/4008361.html
Copyright © 2011-2022 走看看