在数据处理的过程中,我们习惯使用SELECT INTO #Table这样的语句,用临时表来存放中间数据。大量使用临时表,会造成资源争夺,降低性能,因为在SQL Server 2012及之前的版本,tempdb只有一个数据文件(tempdb.mdf)。对于SQL Server应用程序来说,恰当配置的tempdb对整个吞吐量其中很关键的作用。 SQL Server 2016的推出,为我们带来很多新的功能及增强,其中之一就是在安装过程中默认的tempdb配置。SQL Server 2016安装的过程中,向导不会默认创建一个数据文件,而是根据其探测到的逻辑处理器的个数来创建默认数量的tempdb数据文件,最多可达8个,这有利于减少PFS、GAM和SGAM页的争夺。如下图,测试电脑是4核处理器,因此,默认配置了4个数据文件:
在SQLServer 2016之前,对于大量使用tempdb的应用程序,推荐打开追踪标记1117和1118。其中,追踪标记1118把表开头的8个页面在统一区里分配,可以降低SGAM(Shared Global Allocation Map)争夺;1117会确保同一个文件组内的多个文件在插入数据的时候会同时增长,而不是只增长第一个数据文件。对于SQL Server 2016的tempdb,1117和1118是默认激活的,从而避免了手动激活的需求。
下图显示了,对于tempdb,is_mixed_page_allocation_on的值为0,其含义就是,数据库中表和索引总是在统一区里分配初始页,1则表示冲混合区里分配。
下图显示了,对于tempdb,is_autogrow_all_files的值为1,这表示tempdb是唯一支持Autogrow_All_Files ON选项的系统数据库。
SQL Server 2016自带的tempdb增强,通过默认的多个tempdb数据文件,降低了tempdb争夺,它有利于减少PFS、GAM和SGAM页的争夺。追踪标记1117和1118在2016之前的版本里可用,但需要手动激活。我们过去开发了大量存储过程,其中又有很多用到了临时表,相信未来升级到SQL Server 2016之后,整体的性能会得到进一步的提升。 (责任编辑:IT) |