您现在的位置: 首页  > SQLServer > 性能与优化
通行证登录
 

一台服务器多个数据库之间的资源分配和调控

作者:[51ak ]

通常我们面对会到数据库服务器负载不够,需要做读写分离或是其他高可用负载来分摊负载压力。但有时候(事实上还挺频繁的)我们也需要将几个数据库(可能属于不同的业务)放在一台服务器上。

 

这种合租房的现象,主要是这些业务数据库都很小,访问量也不大,完全没必要独自占用一台服务器。合用服务器时,可能会因为一个库的异常,占用资源影响其他库的使用。当然,因为知道原因,通常这种事情DBA处理起来并不难,一封邮件就清爽了。如何做到更好?如何防患与未然。让各个业务的数据库只占用属于它的那部分资源呢

 

以SQLSERVER为例,解决方法有:

 

1.虚机 这应该是最容易被想起来的方法,可定制内存,CPU。而且高度可定制,一个虚机里的数据库DOWN了甚至把主机DOWN了也不会影响第二个虚机。缺点是IO没法定制,而IO又恰巧是数据库的瓶劲所在。缺点2是每个虚机本身就自带操作系统,非常耗资源。

 

2.多端口/多实例 通过开多个端口或多个实例,然后对每个实例分配指定的资源(CPU,内存)当然IO还是不能指定。也就是还是会有一个实例抢完所有IO的情况发生

 

3.资源调控器  最容易管理的一种方案,在一些DBMS里已经自带资源调控的功能(主要是针对CPU的)这些针对用户级别的CPU控制可以有效控制CPU的抢占,但是对内存和IO的控制力无。而且数据库对象在同一实例里安全性不如上面两个方案,且一个数据库坏了可能会影响整个实例的运行。

 

以上3种方法都没有实现IO的分配,这需要RAID的配合,在做RAID的时候 多做几个RAID组,以达到分配IO的目的,IO被均成几份

 

三种方法中 资源调控器最简单,但功能最弱,只能控制一下CPU;虚机方案内耗严重,成本太大;多实例方案耗资源不多,可定制性也比较高,应为首选方案。配合多RAID组可以相对比较好的控制服务器资源,安全性和实例的独立性体现得也非常好