数据库性能之整合多个实例到一个SQL服务器

日期: 2010-08-08 作者:Denny Cherry翻译:吴琳静 来源:TechTarget中国

整合多个SQL Server数据库到一个实例上,并把这个实例放入一个SQL Server上,这样可以让数据库更好的工作,但是这就要求加强对SQL Server的控制,每个数据库可以获得多少资源。如果你想更好地管理资源,可以考虑把一个或者多个数据的实例整合为多个SQL Server数据库实例。这样就能更好地控制用于缓冲区高速缓存和过程高速缓存的内存量。你可以分配指定的CPU内核处理任意一个数据实例,并控制那些数据库可以获得CPU资源。

  把数据库放入多个实例也有不利的一面,在同一台服务器上运行多个SQL Server实例还需要占用额外的内存和CPU。这需要少量的CPU和大约250MB的RAM,……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

整合多个SQL Server数据库到一个实例上,并把这个实例放入一个SQL Server上,这样可以让数据库更好的工作,但是这就要求加强对SQL Server的控制,每个数据库可以获得多少资源。如果你想更好地管理资源,可以考虑把一个或者多个数据的实例整合为多个SQL Server数据库实例。这样就能更好地控制用于缓冲区高速缓存和过程高速缓存的内存量。你可以分配指定的CPU内核处理任意一个数据实例,并控制那些数据库可以获得CPU资源。

  把数据库放入多个实例也有不利的一面,在同一台服务器上运行多个SQL Server实例还需要占用额外的内存和CPU。这需要少量的CPU和大约250MB的RAM,或许每个实例都需要占用这么多内存。

  过程高速缓存:看这两个相同的SQL Server,如下图

  这次可以确定的是,在整合了数据库的SQL2服务器上,为了不增加这些数据库每秒钟SQL编译的次数,至少要保证有1.4GB的过程高速缓存。

  为了满足这个要求,就需要在SQL Server上再安装一个数据库实例,然后正确的配置各个实例可占用的内存量。只有这样SQL Server才能为SQL2数据库实例的过程高速缓存分配足够的内存。

  增加了数据库实例后,需要服务器至少能分配2.9GB的内存,用于SQL2为即将运行的数据库实例分配内存,并删除服务器上当前实例占用的内存。

  CPU 负载:如图所示的SQL服务器,SQL2的CPU负载不是很高,由此可以推断通常不需要把所有的CPU内核都分配给某个实例。对比看图2.2所示的SQL服务器的CPU负载情况,说明把SQL Server上的实例互相孤立是大有益处的。

  在下图中,现有的SQL服务器的CPU负载变得相当的高。这就需要将这些数据库实例转移到有更多的CPU处理能力的SQL Server上,因为新的SQL Server CPU运算速度会更快而且数目更多。这些数据库程序都是相当重要的,你肯定不希望任何一个程序拖慢其他的程序,因此每个数据库就需要比平常更多的CPU处理能力。

  这种情况下,你应该用处理器关系设置sp_configure系统使其通过存储过程来配置每个实例,这样每个实例都能访问SQL Server上的4个内核。因为CPU 核心更快了,和以前相比就有更多的处理SQL Server访问的能力。即使一个数据库的CPU达到了100%,对其他的实例的影响也是微乎其微的,因为该实例不占用其他的CPU内核。

  缓冲区高速缓存:通常SQLServer能够自动判断哪些数据应该保留在缓冲区高速缓存,哪些数据应该被删除。如果你需要终止这个自动功能,除非把这个数据库移出,否则是没有办法实现的。数据库管理员可以通过设定内存的最大值和最小值来影响SQL Server缓冲区高速缓存的大小,同样的也可以通过这种方法影响实例的过程高速缓存的内存量。

  通常你不会尝试修改SQL Server的自动分配内存功能,除非有一些特殊的业务需求。如果有的数据被使用到了,但其它数据没有被使用到,SQL Server是会自动删除缓冲区高速缓存中近期未被使用的数据,腾出空间用于存放那些最近将被使用的数据。

  但并不是所有的数据库程序都是一样的。你的业务需求可能声明,程序第一次启动的时候,半秒或者几秒钟之内是不能从磁盘上加载数据到内存的。你也可能需要数据一直在内存中,服务器上的其它数据库程序没有机会尝试或者把这个数据从缓冲区高速缓存删除。

  在这种情况下可以尝试让多个独立的SQL Server在同一台服务器上。如果你需要完全隔离,不互相干扰的实例,那不宜采用单实例。可能你需要看看独立运行的SQL服务器。

相关推荐