我们有一个使用VMware vSphere 5.0 U1的虚拟化环境,它承载了我们的Microsoft SQL Server,性能非常差。 主机服务器是带有Xeon X5450的HP DL360 G5,而磁盘空间来自HP P4300 G2上使用SAS2和Iscsi的SAN。
服务器本身有3个核心,分别是3.00ghz,12gb内存和1gbps nic,运行Server 2008 R2 Enterprise和SQL Server 2008 R2。
有三个数据库,一个是用于Microsoft Dynamics CRM的180GB,一个是50GB用作数据仓库,另一个是由Document Logistics(文档pipe理系统)使用的500MB,
还有一个分析服务多维数据集和报告服务运行在同一台服务器上。
networking和CPU使用率都很低,除非在CPU有时达到100%时SSIS软件包更新数据仓库。
内存总是超时,系统报告过多的分页。
如果只是抛出更多的内存来解决这个问题将会有所帮助 – 如果是的话,我应该使用多less – 或者更多是因为被虚拟化,并且使用专用本地磁盘的单独服务器将是最好的select。
更新—数据库被设置为有限的内存和总的限制保持12GB总共所有文件都在一个磁盘上,另一个自动增长的操作系统/程序设置为1MB,不受限制索引留给主机程序的默认值,但似乎确定服务器一般是慢,假设由于内存没有mantlence计划设置日志都是100mb除了一个CRM是900mb
当你说内存已经超出了,你认为SQL会默认做这个(几乎)? 您是否尝试过限制SQL可以使用的内存量?

你的磁盘布局如何设置? 不同的磁盘temp / log / data / backup? 你可以运行这个脚本来找出:
DECLARE @database_id int DECLARE @database_name sysname DECLARE @sql_string nvarchar(2000) DECLARE @file_size TABLE ( [database_name] [sysname] NULL, [groupid] [smallint] NULL, [groupname] sysname NULL, [fileid] [smallint] NULL, [file_size] [decimal](12, 2) NULL, [space_used] [decimal](12, 2) NULL, [free_space] [decimal](12, 2) NULL, [name] [sysname] NOT NULL, [filename] [nvarchar](260) NOT NULL ) SELECT TOP 1 @database_id = database_id ,@database_name = name FROM sys.databases WHERE database_id > 0 ORDER BY database_id WHILE @database_name IS NOT NULL BEGIN SET @sql_string = 'USE ' + QUOTENAME(@database_name) + CHAR(10) SET @sql_string = @sql_string + 'SELECT DB_NAME() ,sysfilegroups.groupid ,sysfilegroups.groupname ,fileid ,convert(decimal(12,2),round(sysfiles.size/128.000,2)) as file_size ,convert(decimal(12,2),round(fileproperty(sysfiles.name,''SpaceUsed'')/128.000,2)) as space_used ,convert(decimal(12,2),round((sysfiles.size-fileproperty(sysfiles.name,''SpaceUsed''))/128.000,2)) as free_space ,sysfiles.name ,sysfiles.filename FROM sys.sysfiles LEFT OUTER JOIN sys.sysfilegroups ON sysfiles.groupid = sysfilegroups.groupid' INSERT INTO @file_size EXEC sp_executesql @sql_string --Grab next database SET @database_name = NULL SELECT TOP 1 @database_id = database_id ,@database_name = name FROM sys.databases WHERE database_id > @database_id ORDER BY database_id END --File Sizes SELECT database_name, groupid, ISNULL(groupname,'TLOG') groupname, fileid, name, file_size, space_used, free_space, filename FROM @file_size --File Group Sizes SELECT database_name, groupid, ISNULL(groupname,'TLOG') groupname, SUM(file_size) as file_size, SUM(space_used) as space_used, SUM(free_space) as free_space FROM @file_size GROUP BY database_name, groupid, groupname
我同意第一个答案,但一般来说,对于超过100 GB的Microsoft CRM数据库,我build议在SQL Server上拥有比12 GB更多的RAM,并且希望看到至less32 GB的RAM这个大小的Microsoft CRM数据库。 要更具体地找出导致SQL Server性能问题的原因,您需要确定导致服务器负载最大的查询。 这些并不总是单一的查询,但有时候是一组参数化的查询,可能会执行数千次,这是造成性能下降的原因。 您可以使用SQL Server Perf Stats收集脚本来确定这些脚本,以在大约5分钟的时间内收集高峰加载时间的数据, http: //sqlnexus.codeplex.com/wikipage?title=Sql2005PerfStatsScript&referringTitle=Home(仅使用StartSQLDiagTrace20082。 cmd而不是详细的跟踪集合)。 您可以使用http://sqlnexus.codeplex.com/上提供的SQLNexus工具来帮助分析数据和查看报告,这些报告可以帮助显示哪些查询或多个查询对服务器造成的负载最大,通过Total Duration,Total Reads,总CPU或总写入。 我通常通过Total Reads或Total Duration关注顶级查询,并获得通过SQL Server数据库调优顾问运行的查询示例,以查找是否存在可用于提高性能的缺less索引或统计信息。
如果您将最大并行度设置为1,则使用具有3个内核的SQL Server,如果使用Microsoft Dynamics CRM数据库,它也将获得更好的性能。请参阅下面的那些命令来设置它。
sp_configure'显示高级选项',1重新configuration; GO sp_configure'max degree of parallelism',1用Override重新configuration; GO sp_configure'显示高级选项',0重新configuration; 走