我将大型网站和数据库从旧服务器(Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz四核/ SAS磁盘)迁移到了更好的新服务器(Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16核处理器/ SSD磁盘)。
我分离了旧服务器上的数据库文件,将它们复制并附加到新服务器上。一切进展顺利。
之后,我将兼容性级别更改为110,更新了统计信息,并重建了索引。
令我感到非常失望的是,我注意到,在新的SQL 2012服务器上,大多数SQL查询的速度要比旧的SQL 2008服务器慢得多(慢2-3-4倍)。
例如,在具有约70万条记录的表上,在旧服务器上,对索引的查询花费了约100毫秒。在新服务器上,相同的查询大约需要350毫秒。
所有查询都一样。
我会在这里有所帮助。让我知道要检查/验证的内容。因为我很难相信,在具有更新的SQL Server的更好的服务器上,性能会更差。
更多细节:
内存设置为最大。
我有此表和索引:
CREATE TABLE [dbo].[Answer_Details_23](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[SurveyID] [int] NOT NULL,
[CustomerID] [int] NOT NULL default 0,
[SummaryID] [int] NOT NULL,
[QuestionID] [int] NOT NULL,
[RowID] [int] NOT NULL default 0,
[OptionID] [int] NOT NULL default 0,
[EnteredText] [ntext] NULL,
CONSTRAINT [Answer_Details_23_PK] PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IDX_Answer_Details_23_SummaryID_QuestionID] ON [dbo].[Answer_Details_23]
(
[SummaryID] ASC,
[QuestionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
我执行了以下查询:
set statistics time on;
select summaryid, count(summaryid) from Answer_Details_23 group by summaryid order by count(summaryid) desc;
set statistics time off;
旧服务器-SQL Server执行时间:CPU时间= 419毫秒,经过时间= 695毫秒。
新服务器-SQL Server执行时间:CPU时间= 1340 ms,经过的时间= 1636 ms。
执行计划在此处上传:http : //we.tl/ARbPuvf9t8
以后更新:
- AMD 2.1GHz Opteron 16核心处理器看起来比Intel 2.5GHz四核处理器差很多
- 极大的改进,将车窗电源选项从平衡切换到大功率
- 进一步改进,将最大并行度更改为8,将成本阈值更改为4
现在,SQL Server执行时间:CPU时间= 550毫秒,经过的时间= 828毫秒。
它仍然比旧服务器差,但还不错。如果您还有其他建议(除了本地查询优化之外),请随时发表评论。