合理设置SQL Server 2008服务器安装向导运营维护
在SQLServer2008种,可以在服务器安装向导的服务器配置-排序规则窗口上修改数据库引擎和Analysis Services排序时所采用的排序规则。由于这个排序规则不仅仅跟用户的操作习惯有关,而且还直接影响到数据库服务器系统的性能。为此在选择这个排序规则时,可能数据库管理员需要多花一点心思,在用户需求与服务器性能之间取得一个最佳的平衡点。即能够满足用户的需求,同时又能够在最大程度上提升数据库服务器的性能。
一、SQLServer与Analysis Services排序规则的差异。
通常情况下数据库管理员可以分别为数据库引擎和Analysis Services分别设置排序规则。如在SQLServer2008服务器中,数据库引擎支持两组排序规则,分别为Windows排序规则与SQLServer服务器排序规则。默认情况下,如果在英文环境下部署SQLServre数据库服务器的话,则其采用的是SQLServer排序规则。而如果采用其他版本的数据库系统,如在中文环境下部署中文版本的数据库系统,则这个排序规则就采用的是Windows排序规则,即由数据库服务器操作系统的区域设置来决定具体的排序规则。而对于Analysis Services服务来说,其支持一组排序规则,即Windows排序规则。虽然说,数据库管理员在数据库安装过程中,可以为这两个服务器配置不同的排序规则。如SQLServer采用SQLServer排序规则,而Analysis Services采用Windows排序规则。这在技术上是允许的。但是这会造成一些不利的后果。由于两者的排序规则不同,那么最后显示的结果很有可能因为排序规则的不同,而导致显示内容的不同。为此在规划数据库应用的时候,如果需要同时安装这个两个应用服务,那么笔者的建议是在安装SQLServer数据库时,为这个两个服务设置相同的排序规则。由于Analysis Services只支持Windows排序规则,为此两者都需要同时采用Windows排序规则。以确保数据库引擎与Analysis Services之间显示结果的一致性。(利用配置文件来自动安装SQLServer2008)
需要强调的是,这是一个柔性的规则。即即使同时部署这两个应用服务,而他们采用不同的排序规则,在技术上来说是不会遇到问题的。主要是看用户能否接受两个服务显示结构的不一致。如果可以接受的话,那么就不需要遵守这个规则,可以从性能或者其他方面来综合考虑所采用的排序规则。但是如果不可以接受的话,那么就需要严格遵守这一规则,即为两个服务都配置Windows排序规则。
二、决定排序规则的一些参考。
在符合上面这个基本的原则后,数据库管理员就需要结合用户的需求与数据库性能方面的要求,来综合考虑,最后决定需要采用的排序规则。这具有一定的难度,不过下面的这些规则数据库管理员可以拿来参考。
参考规则一:能用二进制排序规则最好使用二进制排序规则。
二进制排序规则由于其处理简单,为此如果采用二进制排序规则的话,可以在很大程度上提升数据库的性能。特别是如果数据库中本身就是以二进制的形式来存储数据,那么在利用二进制规则来排序的时候,相对来说,要比其他的排序规则速度更加的快。而且其也不怎么会受到语言的影响。所以,在数据库部署中,能够使用二进制排序规则,就尽量使用二进制排序规则。或者说,这是数据库管理员首选的选择。除非这个二进制排序规则与用户的需求相矛盾,或者跟其他需求有难以调和的冲突时,才采用其他的排序规则。特别是对于数据库性能有比较高的要求时,这个二进制是一个首要的选择。(IT专家网独家:合理配置二进制排序规则)
但是并不是说在任何情况下采用二进制都会起到不错的效果。如在数据库中,既有二进制存储的数据,又有其他格式存储的数据。如字符型的数据,在SQLServer数据库中分为nchar(二进制格式的数据)与char(ANSI格式的字符数据)两种。如果采用二进制排序规则,对这两种不同类型的数据采用的是不同的处理规则。为此即使两张表中的记录完全相同,但是其采用的字符格式不同,其最后的结果也有可能会不同。所以在遇到这种情况时,数据库管理员要么想方设法统一字符集,以达到统一排序结果的目的。要么数据库管理员就需要向用户确认,是否允许这个不同排序结果的存在。如果允许的话,那么采用二进制排序规则没有问题。但是如果不允许的话,那么之能够放弃采用二进制排序规则,而需要采用SQLServer等其他的排序规则。
参考规则二:适合采用Windows排序规则的情况。
一般满足以上三个条件的任何一个条件的情况下,适合采用Windows排序规则。
一是文章一开头提到的那个基本原则。即在数据库部署中同时存在Analysis Services与数据库引擎(数据库引擎是必须的,而Analysis Services是可选的),同时又不允许他们排序结果不一致的情况存在。此时最好能够采用Windows排序规则。原因很简单,因为Analysis Services只支持Windows排序规则,为了确保排序结果的一致性,也需要将数据库引擎的排序结果设置为Windows排序规则。
二是在数据库中同时存在nchar/nvarchar(二进制格式的数据)与char/varchar(ANSI格式的数据)的情况下,而且在应用程序中可能需要混合使用他们。在这种情况下最好采用Windwos排序规则,以便在各个数据类型之间进行一致的比较。如果采用二进制排序规则或者SQLServer排序规则,由于他们对这些不同的数据类型比较时会采用不同的机制,为此往往会有不同的排序结果。在遇到这种混合使用的情况,最好采用的是Windows排序规则,以统一最后的排序结果。
三是在应用程序中只使用char/varchar数据类型,并且在应用程序的SQL语句中,很少使用Like操作符号时,可以考虑采用Windows排序规则。此时可以在最大程度上消除排序结果的不同。
在考虑是否需要采用Windows排序规则的时候,只需要对以上的三条规则对号入座即可。如果可以对号入座的,那么就采用这个Windows排序规则。如果不能够对号入座的,那就考虑采用其他的排序规则。
参考规则三:适合采用SQLServer排序规则的情况。
在什么情况下比较适用SQLServer排序规则呢?或许这个问题回答起来,婆说婆有理,公说公有理。很难有一个统一的答案。笔者认为,采用SQLServer排序规则,即有利,也有弊。数据库管理员需要在这个利与弊之间旬的一个均衡点,以平衡各方面的需求。
之所以考虑采用SQLServer排序规则,笔者认为最大的好处就是可以提高LIKE等操作符的执行性能。也就是说,如果在查询语句中使用了Like等类似的关键字,而且同时使用了Order BY排序子句时,如果采用SQLServer排序规则的话,那么性能会比其他排序规则要高。而且满足条件的记录越多,这个排序效果会越好。所以,在数据库设计中需要用到比较多的Like操作符,而且数据库管理员又需要提升数据库性能的时候,那么就需要考虑是否需要采用这个SQLServer排序规则。注意如果在Where语句中使用了这个Like操作符,而且这个操作符所涉及到的字段设置了索引,其查询效果并不会因为有了这个索引而提高多少。也就是说,Like等类似的操作符与索引之间的配合,并不能够起到1+1大于2的效果,有时候甚至会起到反面效果。此时,如果更改这个排序规则,反而可以起到索引不能够起到的效果。
不过采用SQLServer排序规则也有很多的缺陷。最大的缺陷就是数据库的排序规则与操作系统或者其他应用程序的排序结果不一致。如现在数据库中采用的是SQLServer排序规则,对某张表进行了排序。然后将这张表导入导了Excel表格中,并对其按相同的规则进行重新排序。此时两张表记录的显示顺序可能是不同的。这主要要是因为区域设置的不同而造成的。如果采用SQLServer排序规则的话,这种情况无法避免。除非企业中所有的电脑、数据库系统都采用英文环境,并且配置相同的区域设置。为此,只有用户可以允许数据库系统与操作系统或者其他应用程序排序结果的不一致性的情况下,可以使用这个SQLServer排序规则。或者说,数据库管理员不关系Windows排序规则中的语言比较语义的情况下,同时又存在不较多的Like操作符时,可以考虑采用SQLServer排序规则。
在以上的分析中可以看出,在考虑采用什么样的排序规则时,主要考虑的是两个方面的因素,一是排序的结果,二是服务器的性能。也就是说,用户是选择在数据库服务器与其它应用程序之间排序结果的一致性,还是选择提升服务器的性能。数据据管理员确认完这个问题之后,那么就可以做出符合用户需求的判断了。