以前Tempdb我都会启用TF 1117,1118 改善资源竞争问题
降低tempdb竞争是一件我觉得很重要的事情,毕竟tempdb只有一个,而且是大家都一定会使用的,
但真实世界中,偏偏我看到tempdb是最常被忽略的一个环节,
就如同我很常使用”公厕”来比喻tempdb,大家都可以上,但上完就马上离开,
没有人想管理”公厕”,现在TF 1117,1118也可以套用在user database。
SQL 2016开始,针对user database我们可以使用alter database 来达到TF 1117,1118效果,
TF1118简单来说,一律都分配混和范围,且分享给所有objects,
TF1117主要就是,相同filegroup中所有档案,一起成长,这可以避免hot file情况,
我个人会对user database 都一律使用,因为我认为优点效益(提供更好的效能和可扩充性)远大于缺点,
下面我简单测试TF1117。
TF 1118
ALTER DATABASE SET MIXED_PAGE_ALLOCATION {ON | OFF}
alter database ricoTF set mixed_page_allocation on
TF 1117
ALTER DATABASE 修改FILEGROUP <文件组> {AUTOGROW_ALL_FILES | AUTOGROW_SINGLE_FILE}
--enable
alter database ricoTF MODIFY FILEGROUP [primary] AUTOGROW_ALL_FILES
--check
select is_autogrow_all_files
from ricoTF.sys.filegroups
目前ricoTF的檔案資訊如下
SELECT name,type_desc, [Current Size in MB]=(size*8)/1024
, [Growth Size in MB]=(growth*8)/1024
FROM ricoTF.sys.database_files
使用预设AUTOGROW_SINGLE_FILE 并让档案成长
drop table if exists mytest
create table mytest
(
c1 int
,c2 varchar(10)
)
;with mybase
as
(
select top 1000000 t1.column_id,left(t2.name,10) as 'objname'
from sys.all_columns t1
cross join sys.all_objects t2
)
insert into mytest with(tablock)
select *
from mybase
SELECT name,type_desc, [Current Size in MB]=(size*8)/1024
, [Growth Size in MB]=(growth*8)/1024
FROM ricoTF.sys.database_files
可以看到只有ricoTF 档案成长而已。
现在,改成AUTOGROW_ALL_FILES后,来看看效果是否会如预期
drop database ricoTF
create database ricoTF on primary
(name='ricoTF',filename='E:\sql2k17data\ricoTF.mdf',size=8mb,maxsize=unlimited,filegrowth=8mb)
,(name='ricoTF02',filename='E:\sql2k17data\ricoTF02.ndf',size=20mb,maxsize=unlimited,filegrowth=8mb)
log on
(name='ricoTF_Log',filename='E:\sql2k17data\ricoTF_Log.ldf',size=50mb,maxsize=unlimited,filegrowth=50mb)
alter database ricoTF MODIFY FILEGROUP [primary] AUTOGROW_ALL_FILES
果然两个档案一起成长。
Ps:我这里是要让大家看到差异,实务上,所有档案的初始和成长大小都建议相同。