我一直在监视我们的SQL服务器一段时间,并注意到I / O使用任务pipe理器和Perfmon经常每次点击100%。
当我执行“exec sp_who2”时,我通常能够将此尖峰与SQL Server Management中的SUSPENDED进程关联起来。
RAID控制器由LSI MegaRAID存储pipe理器控制。 我们有以下设置:
服务器是一个超过50GB的RAM的64位机器。 SQL 2005 64位在Windows 2003 64位上运行。 不幸的是,该应用程序运行在jBoss之上,目前它是一个32位版本(但是我们正在推动软件提供商将我们推向64位版本的jBoss)。
这是一个在白天敲打的数据库,但在晚上非常不活跃。 数据库大小目前大约为13GB,每天大约有200个用户使用。
我有几个想法,我正在玩弄:
对于#2,我的问题是这样的:我们真的会通过将数据从RAID 10移动到RAID 1来增加磁盘性能(IO)吗? RAID 10明显比RAID 1具有更好的性能。此外,在写入数据库之前,SQL必须写入事务日志。
但另一方面,我们将减less磁盘的大小以及写入RAID 10的数据量,这就是所有“肉”所在的位置,从而增加了RAID对读取请求的性能。
有什么方法可以找出我们目前的限制因素是什么? (驱动器与RAID控制器)? 如果限制因素是驱动器,那么也许添加额外的RAID 1是有道理的。 但是,如果限制因素是控制器本身,那么我认为我们正在接近这个事情是错误的。
最后,我们是在浪费时间吗? 我们是否应该把重点放在#1(重组表格,尽可能减lessnetworking延迟等等)?
我认为将数据库文件和日志文件分离到单独的RAIDarrays总是有好处的。 数据库文件I / O始终是随机的,而日志文件I / O始终是连续的。 将这些I / Otypes混合在同一个RAIDarrays上总是会导致性能损失(尽pipe如果arrays上的I / O负载非常小,可能并不明显)。 我认为你的观点#2是很好的build议,尽pipe如mrdenny所说,如果你看到磁盘I / O的数据量高达200个用户,那么你可能会遇到数据库问题(索引等)。
我正在运行一个单一的SQL Server(2005 Standard),平均2000个连接到125个数据库,没有性能问题。 我们有一个用于数据库的RAID1arrays和另一个用于日志文件的RAID1arrays。
另外,请不要忽视分区(音量)alignment作为性能问题的可能原因。
另外,看看这些文章:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21949
http://technet.microsoft.com/en-us/library/cc966540.aspx
http://technet.microsoft.com/en-us/library/cc966534.aspx
http://technet.microsoft.com/en-us/library/cc966412.aspx#EEAA
可能性是您需要修复SQL Server的一些索引问题。 具有200个用户的13Gig数据库不应该非常难以推动磁盘,除非用户正在运行一些非常复杂的查询,并且系统没有任何RAM。
我不打扰添加任何硬件(除了也许更多的RAM),这取决于你是否是x32或x64以及你正在使用的SQL和Windows的版本和版本。
对于日志文件,它们应该位于单独的主轴上,这意味着单独的磁盘驱动器,RAIDarrays和卷。 原因是日志写入是连续的,并且应该尽可能快地以大分配单元执行,而不必与其他数据库访问(写入数据库或查询)相抗衡。
您的卷应该是一个64k的分配单元大小,正如joqwerty提到的那样,您很可能也会遭受错位分区的困扰,因为在Windows 2003中,Windows分区默认是未alignment的。在某些情况下,性能影响可能很大为30至40%。 以下文章介绍了如何重新创build正确alignment的分区:
磁盘分区alignmentSQL Server的最佳实践
http://msdn.microsoft.com/en-us/library/dd758814%28v=sql.100%29.aspx
我不确定你的意思是“reindexing”。 如果是重build或重组,这是日常维护计划的一部分。 如果你不知道你的索引是如何分散的,那么在采取任何行动之前你都要收集一些基本的信息。 除非你有经验数据支持,否则我不会太急于创造新的指数。 特别是,经常更新的数据库(OLTP)应尽可能less的索引,因为每个索引都会降低更新性能。 我已经看到,人们通过“地毯式轰炸”索引数据库的方式造成更多的伤害。
最后,您可能需要validation您的RAID控制器是否启用了写入caching。 我见过太多人想念这个。 有时,由于需要更换电池,可能会禁用写入caching,或者因为他们不知道需要电池来启用caching。