跟踪标记:1117

功能:

  • 默认,同一个文件组下的多个文件,如果某个文件没有可用空间,且设置了自动增长,则该文件自动增长,其他文件大小保持不变;
  • 开启后,同一文件组下的多个文件,如果某个文件没有可用空间,且设置了自动增长,文件组下所有文件同时增长,每个文件涨幅取决于自身filegrowth设置;

用途:

主要用于tempdb性能的优化,解释如下:

  1. 通常tempdb被配置为primary文件组下包含多个等大的数据文件,以最大化使用CPU,并且能有效减少对于PFS, SGAM, GAM的竞争(latch contention);
  2. 同一个文件组下的多个文件是等比例填充数据的(proportional fill),也就是说所有的文件最终几乎同时被填满,这时需要文件自动增长空间;
  3. 然后就会发现每个文件是逐个根据自身的filegrowth各自增长,这样多次文件增长反而带来不必要的开销,尤其是当filegrowth设置的不够大时;
  4. 开启跟踪标记1117后,文件组下所有文件同时增长,当然如果将tempdb的多个数据文件初始化为一个较大的大小,也可以不考虑这个选项,因为文件不需要增长;

备注:

在SQL Server 2016里,跟踪标记1117已经不再生效,功能被如下SQL语句所代替

ALTER DATABASE [Database_Name]
MODIFY FILEGROUP [FileGroup_Name] AUTOGROW_ALL_FILES;
--自定义文件组,默认为AUTOGROW_SINGLE_FILE

跟踪标记:1118

功能:

  • 默认,对于新建的表或索引,会先在混合区(mixed extent)分配空间,等到表或索引占用空间超过8个页后,才会在统一区(uniform extent)分配空间;
  • 开启后,对于新建的表或索引,直接使用统一区(uniform extent)分配空间;

用途:

主要用于tempdb性能的优化,解释如下:

  1. 表或索引被创建时,首先必须得使用PFS和SGAM页在混合区分配空间;
  2. 在大量使用临时表的场景,对于PFS和SGAM页的竞争(latch contention)会更加明显;
  3. 开启跟踪标记1118后,避开对SGAM页的使用,在统一区分配新建对象的空间,也许有人会担心全部使用统一区后GAM页的竞争,GAM页管理的是区(extent),而SGAM虽然管理的也是区(extent),但是一个区可以被多个对象使用,所以相比之下GAM页的压力要小很多;

备注:

在SQL Server 2016里,跟踪标记1118已经不再生效,功能被如下SQL语句所代替

ALTER DATABASE [Database_Name]
SET MIXED_PAGE_ALLOCATION OFF
--自定义数据库,默认即为OFF,不使用混合区

小结:

对于tempdb的优化,通常会配置多个数据文件,以及开启1118跟踪标记,而1117更像是在文件增长方式上,对这两者的补充。

从SQL Server 2016开始:

(1) 对于1117,1118这两个跟踪标记不再生效,但有了文件组/数据库选项,粒度更小,而不用像之前那样,开启全局的跟踪标记(对所有数据库生效),更为方便控制;

(2) 对于tempdb,文件增长:默认为文件组内全部增长;空间分配:默认为不使用混合区

use tempdb
select * from sys.filegroups
--is_autogrow_all_files
-- select * from sys.databases where name = 'tempdb'
--is_mixed_page_allocation_on
--

(3) 对于用户新建的数据库,文件增长:默认为文件组内单个文件增长,和以前一样;空间分配:默认为不使用混合区

use DBA
select * from sys.filegroups
--is_autogrow_all_files
-- select * from sys.databases where name = 'DBA'
--is_mixed_page_allocation_on
--

(4) 另外在安装SQL Server 2016时,还根据CPU核数动态设置了tempdb的文件数,所以到了SQL Server 2016,tempdb的优化选项几乎全部采用默认即可。

参考:

SQL Server 2016 – Trace Flag 1117 Changes

http://www.sqlservergeeks.com/sql-server-2016-trace-flag-1117-changes/

Working with tempdb in SQL Server 2005

https://technet.microsoft.com/en-us/library/cc966545.aspx

kb/328551

https://support.microsoft.com/en-us/kb/328551

kb/2154845

https://support.microsoft.com/en-us/kb/2154845

Trace Flags (Transact-SQL)

https://msdn.microsoft.com/en-us/library/ms188396.aspx

Trace Flags 1117, 1118, and Tempdb Configuration

https://www.brentozar.com/archive/2014/06/trace-flags-1117-1118-tempdb-configuration/

《Fast Track Data Warehouse 2.0 Architecture.docx》

1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式的更多相关文章

  1. 0. 跟踪标记 (Trace Flag) 简介

    一. 什么是跟踪标记 SQL Server 跟踪标记(Trace Flag),像是一个开关,可用来自定义SQL Server的某种行为或特性,在性能诊断,系统调试等方面较为常用.比如:开启1204或1 ...

  2. 4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志

    跟踪标记:610 功能: 用批量导入操作(Bulk Import Operations)加载数据时,对于索引组织表(即有聚集索引的表) 最小化日志: 上图为simple/bulk-logged恢复模式 ...

  3. 5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响

    跟踪标记:834 功能: 在64位的windows环境下,为SQL Server开启这个跟踪标记,那么SQL Server 会使用大页(Large pages)为内存缓冲区(buffer pool)分 ...

  4. 3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息

    跟踪标记:1204/1222 功能及用途: 捕获SQL Server死锁信息,并自动存放到错误日志(ERRORLOG)中. 举例: USE tempdb GO CREATE TABLE t1(id i ...

  5. 2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果

    跟踪标记:3604 功能: 输出DBCC命令返回结果到查询窗口(通常是SSMS窗口),类似print命令的显示效果: 用途: 常用于获取DBCC IND, DBCC PAGE命令的输出结果,因为这2个 ...

  6. (5.2.2)配置服务器参数——dbcc跟踪标记(trace)

    关键字:跟踪标记,跟踪 [1]常规dbcc命令 dbcc help('?') --查看dbcc 所有命令,常规下只有32个常用的dbcc TRACEON(2588) --指定了2588标记的话,你就可 ...

  7. DBA应该知道的一些SQL Server跟踪标记

    跟踪标记是什么? 对于DBA来说,掌握Trace Flag是一个成为SQL Server高手的必要条件之一,在大多数情况下,Trace Flag只是一个剑走偏锋的奇招,不必要,但在很多情况下,会使用这 ...

  8. DBCC--常用跟踪标记

    使用DBCC TRACEON 和DBCC TRACEOFF来打开和关闭跟踪标记 使用DBCC TRACESTATUS来查看所有打开的跟踪标记 --260:打印关于扩展存储过程动态链接库的版本信息 -- ...

  9. SQL Server中关于跟踪(Trace)那点事

    前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...

随机推荐

  1. 面试题20:搜索二叉树可能有两个元素发生了交换,如何恢复BST?

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  2. Spring的@Scheduled任务调度

    一. 定时任务实现方式 定时任务实现方式: Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行 ...

  3. c#中引用类型作为值参数和引用参数问题

    一.分类 C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型. C#的引用类型包括:数组,用户定义的类.接口.委托,object,字符串. 二.参数传递 对于引用类型, ...

  4. Linux 查看内核版本命令的相关说明

    hostname 显示主机名称uname -a 显示内核版本详细信息,其中包括主机名称,发行厂商这个命令是看不到的. 如果要看发行版及厂商可使用命令:lsb_release –a uname -a后, ...

  5. Deep Q-Network 学习笔记(三)—— 改进①:nature dqn

    由于 Q 值与 next Q 使用同一个网络时,是在一边更新一边学习,会不稳定. 所以,这个算法其实就是将神经网络拆分成 2 个,一个 Q 网络,用于同步更新 Q 值,另一个是 target 网络,用 ...

  6. FineUI分组显示弹框最新的在最上边

    function TOBTCorrFun(obj){ var msgContent = JSON.parse(obj.dataJson); var tJson = JSON.stringify(obj ...

  7. 有 a - b < c 对Java安全性的思考

    软件工程中,不论使用哪种开发语言,安全性一直是一个非常棘手却又重要的问题.安全性是软件开发领域永远的主题之一,而且随着互联网的蜂拥发展而带动的新技术的兴起与革命(比如近几年火起来的node.js,py ...

  8. Emscripten编译环境搭建--将C和C++编译成JS

    Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...

  9. 安装php扩展redis (windows环境)

    首先十分感谢网络上支持开源分享的前辈们,资源真的太丰富了,虽然也有许多优秀的国外资源被墙了... 想要给php增加redis扩展第一步当然要知道自己使用的php版本以及一些配置.查看 phpinfo ...

  10. Js如何调用本地应用程序

    一般情况下,浏览器中是无法直接和本机的其他的程序进行交互的,在IE中,我们可以通过ActiveX对象的方式进行.但是这个方式只适用于IE浏览器,另一种比较通用的方式便是URL协议的方式,我们将某种UR ...