通过报表数据库提高服务器性能

通过报表数据库提高服务器性能

一、报表数据库的优点


【IT专家网独家稿件】通常情况下,报表数据库必须驻留在一组专用的只读卷上。如上图所示,这些只读卷主要用来承载用户需要查询的数据。而且通过使用商用服务器硬件和商用卷硬件,可以扩展报表数据库,使之可以在多台报表服务器中提供相同的报表数据视图。在一组报表卷上声称报表数据之后,数据库系统便会将卷标记为只读并将其装入多台报表服务器。若用户需要查询数据库,则用户或者应用程序可以连接到任意一个附加有数据库的服务器实例,从而分担服务器的负荷。对于给定的报表数据库版本,不同服务器中的客户端所获取的报表数据视图是相同的,以确保数据的同一。具体的来说,在企业中实现报表数据库具有如下的优点。


一是实现工作负荷的隔离。


多台报表服务器使用各自的内存、CPU和tempdb数据库,从而防止某个不合理的查询占用所有服务器的资源。在现实工作中,经常会遇到这种情况。如某个用户查询产品信息时由于没有加入相关的过滤条件,结果从数据库中查询出几百万条记录,占用了大量的服务器资源,从而影响到其他用户的正常查询。如果采用报表服务器的话,那么这个查询其影响到的只是其中的一台报表服务器,而对于其他服务器不会产生丝毫影响。如可以根据用户的流量将部门进行合理的分组。然后再将部门连接到对应的报表服务器中。此时就不会因为某个部门的数据库查询流量过大,而影响到其它部门的正常应用。可见采用报表服务器,可以实现工作负荷的隔离,从而提高用户的查询效率。


二是为所有的服务器提供相同的报表数据视图。


在使用多台服务器来分散服务器的负荷时,管理员最苦恼都是如何确保各台服务器之间报表数据的同一。如对于相同的查询,不仅查询出来的结果要相同,而且他们的排序也是要一致的。也就是说,只有数据一致、格式一致的报表数据视图,才能够称之为相同的报表数据视图。因为对于报表来说,格式也是非常重要的一个内容。如果采用其他的解决方案,要实现这一点具有相当大的难度。但是如果采用这个报表服务器的话,则实现起来相对的简单。只要给所有的服务器实例都配置相同的方式,如单一的排序规则、相同的页边距配置等等,都可以在不同的应用服务器上获得相同的报表数据视图。


三是可以与其他的商用套件进行友好的集成。


现在市场上独立的报表服务器也有很多,如水晶报表等等。不过在使用这些商用的报表服务器的时候,需要注意这些服务器对于数据库数据可能造成的破坏。不过如果采用这个解决方案的话,则这个困扰就不会存在。因为服务器实例为生成报表而访问数据库时其访问的只是“报表卷”,而并不是真正的数据库。而这个报表卷可以设置为只读,从而从根本上防止一些商用套件对数据库原始数据的破坏。从而既可以实现跟外部套件的友好集成,而且又可以保证数据的安全。


二、报表数据库的使用限制


虽然说报表数据库有一系列的特点,不过可惜的是,其在使用的过程中仍然有不少的限制。这些限制主要体现在如下几个方面。


一是这个解决方案对于操作系统有一定的要求。虽然说大部分情况下操作系统与数据库是各自独立的两个系统。不过SQLServer2008是一个例外。其很多特性都需要依赖于特定的操作系统才能够实现。这个通过可缩放数据库来实现报表服务器的解决方案就是如此。根据笔者的测试,发现这个数据库必须部署在2003SP1版本或者以上版本才可以。否则的话,就无法实现。这一点数据库管理员必须要引以足够的重视。


二是对于报表服务器实例的限制。虽然说对于可缩放共享数据库的数量上没有一个严格的限制。但是从性能上考虑,对此还是有一个要求。一般情况下,最好能够将其服务器实例控制在8个以内。如果超过这个数量的话,则服务器的性能会有明显的下降。可以说,这是一个临界点。当然,如果企业报表查询的数据量特别大,则需要适当的降低这个数量。具体服务器实例的数量设置多少为宜没,主要还是需要根据日常的应用来定。如可以设置不同的数量来设置其对于服务器的影响,从而确定最合理的个数。


三是需要注意一些技术功能上的限制。如对于可缩放的共享数据库,使不支持数据库快照的。再如数据库必须位于只读卷上,等等。虽然这些内容比较细小,但是都是管理员在部署这个方案时必须要注意的内容。否则的话,就可能会遇到一些莫名其妙的问题。


三、使用更新循环来更新数据


在上面的叙述中,笔者多次强调表表数据库是只读的。那么如何保证报表服务器中的数据同数据库服务器中的数据是同步的呢?如果不及时同步的话,则报表服务器中的数据最终会变得非常的陈旧。故必须要有一种机制,可以实现刷新数据库从而使得报表数据保持为最新的状态。这个机制在SQLServer2008种就叫做更新循环。


更新循环从分离阶段开始,在卸除万所有报表服务器中的所有报表卷时结束。通常情况下,更新循环包括三个阶段,分别为分离阶段、刷新阶段与附加阶段。


在分离阶段的时候,数据库引擎会从每台报表服务器的可缩放共享数据库配置中删除陈旧的数据库。在给定的报表服务器中必须完成这个阶段后,才能够使报表数据库的新版本在这个服务器中变为可用。这里需要注意的是,在删除陈旧数据库的时候,数据库工程师必须要停止从每个服务uqi实例进入到这个数据库的查询工作负荷。然后工程师才能够在每台报表服务器中分离数据库。当报表数据库从最后一个服务器实例分离的时候,便可以停止用作可缩放共享数据库。这个阶段的核心人物,就是需要卸除包含陈旧数据库的一组报表卷。


当分离阶段完成后,便进入到了刷新阶段。顾名思义,这个阶段主要是用来更新同一组报表卷上的数据库。刷新数据主要是通过两种方式来实现。一是通过导入当前数据库中的数据来更新;二是通过还原最近生产数据库备份来重新生成数据库。到底采用哪种方式,主要取决于企业的需求以及数据库管理员的爱好。一般来说,没有强制的规定。


最后一个阶段是附加阶段。如果要完成一组报表卷的更新循环,则管理员必须要要扩展已经刷新的数据库。如果有一组报表卷用户可缩法共享数据库的配置,则更新期间的福建过程等同于最初的附加过程。虽然这听起来比较拗口,但是数据库管理员只需要知道这个过程的存在既可。因为这个过程跟上面讲到的其他两个过程不同,不需要管理员进行手工的配置或者干预,系统会自动完成。


总之在采用这个解决方案的时候,笔者认为数据库工程师主要需要了解三个问题。一是在什么情况下需要采用;二是实现这个方案时的一些限制条件,三是这个方案中的关键环节“更新循环”中的配置细节。掌握这三部分关键内容之后,再去实施这个方案应该难度不会很大。


未经允许不得转载:金蝶精斗云 » 通过报表数据库提高服务器性能