TempDB为什么要根据CPU数目来决定文件个数

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:
 在SQL Server的世界中,SQL Server在Windows之上有一套自己的任务调度和资源分配系统,这使得SQL Server作为Windows的一个进程,却可以处理大量的并发,这些任务调度和资源分配非常像一个操作系统,因此SQL Server在Windows之上,有一层被称为SQL OS的系统。

    类似Windows进程之间的任务调度,SQL Server OS也有一套自己的调度方案,在早期的SQL Server曾经使用Windows自带的进程调度系统,但由于SQL Server是一个处理高并发的进程,因此Windows调度造成的线程切换(Context Switch)会带来很多的资源浪费,并且Windows调度是抢占式调度,这对于SQL Server来说非常不利,因此SQL Server OS通过非抢占式调度算法来调度进程,除非线程自己释放资源,SQL Server不会强制剥夺资源(当然了,一些极端情况比如死锁,或是检查scheduler时发现不利问题,会记录到日志,但依然不会抢占资源),这也使得开发人员对T-SQL语句需要小心,当然了这是题外话了。

    在了解了SQL Server基本的调度算法后,再让我们通过一个图来了解一下简单的SQL Server中线程的几种状态(这类线程对Windows来说是线程,对SQL Server来说是进程,这也是为什么查询这些线程的时候用的是Sysprocess微笑),如图1所示。

    111

    图1.SQL Server OS的简单算法

    如果你了解操作系统的调度算法的话,你会发现这里和操作系统的形式一样,当线程得到等待的资源并获得CPU时,就会是运行状态,而当获得资源没有CPU时,就会是Runnable状态,或是当线程所需的资源没有到位时,就会是阻塞状态。

    因此,多个CPU可以有多个线程在Running状态。

    另外在SQL Server中,每创建一个新表时,都会为表分配存储页面,相应的,SQL Server也需要修改GAM,SGAM和FPS页。对于修改这些页来说,SQL Server需要在修改的时候加上一个轻量级的锁,这也就是所谓的闩锁(Latch)。当多个线程同时需要修改GAM,SGAM,FPS页时,闩锁会造成阻塞。对于用户数据库来说,不可能一直存在DDL操作,但对于Tempdb来说,会经常进行建表和删表,因此对于GAM,SGAM以及FPS页都会经常修改,如果Tempdb只有一个文件而CPU存在多核的时候,多个同时运行的任务有可能争抢GAM,SGAM,FPS页的修改权,因此造成阻塞,这对性能是非常不利的,而按照CPU个数将TempDB的文件分为多份,则会存在多个GAM,SGAM,FPS页。多个Running的线程会按照每个文件的大小平均分布到不同的文件中,因此解决了争用问题。

    另外,值得注意的是,对于TempDB的最佳做法是一开始就为每一个文件分配足够大的值。并且每个文件大小相等,这就避免了某个文件增长导致的文件大小不一,而SQL Server对于文件的使用比率是按照文件大小,如果文件大小不一样,就会造成热点文件,从而有可能造成闩锁争用。

分类: SQL SERVER



本文转自CareySon博客园博客,原文链接http://www.cnblogs.com/CareySon/archive/2012/10/06/2713260.html,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
10月前
|
缓存 物联网 定位技术
Android引入.so文件的正确姿势以及加载指定CPU架构的so库(android is 32-bit instead of 64-bit)
Android引入.so文件的正确姿势以及加载指定CPU架构的so库(android is 32-bit instead of 64-bit)
|
10月前
|
Shell 网络安全 Perl
并发从数台机器中获取 hostname,并记录返回信息花费的时长,重定向到一个文件 hostname.txt 中,在全部完成后输出花费时长最短的那台机器的 CPU 信息。
并发从数台机器中获取 hostname,并记录返回信息花费的时长,重定向到一个文件 hostname.txt 中,在全部完成后输出花费时长最短的那台机器的 CPU 信息。
56 0
|
架构师 Android开发
【Android 逆向】ELF 文件格式 ( ELF 文件类型 | ELF 文件对应 CPU 架构 | ELF 目标文件版本 | 可执行程序起始地址 )
【Android 逆向】ELF 文件格式 ( ELF 文件类型 | ELF 文件对应 CPU 架构 | ELF 目标文件版本 | 可执行程序起始地址 )
156 0
【Android 逆向】ELF 文件格式 ( ELF 文件类型 | ELF 文件对应 CPU 架构 | ELF 目标文件版本 | 可执行程序起始地址 )
|
监控 测试技术 Android开发
【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
449 0
【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
|
人工智能 调度 Android开发
AI跑分超过骁龙845又如何?CPU和GPU性能决定联发科Helio P90命运
一直以来,对于联发科处理器的表现,圈内有个说法:一核有难,九核围观。 当然,这个说法跟处理器本身关系并不大,问题出在联发科芯片设计的调度问题。联发科芯片的亮点是核心够多,且工作流程是高负载启用大小核心,低负载禁用大核心。以“启用小核心并调整CPU频率大小”的调度方式,达到省电不影响性能之目的。
166 0
AI跑分超过骁龙845又如何?CPU和GPU性能决定联发科Helio P90命运
|
26天前
|
JSON Java Serverless
nacos常见问题之cpu和内存占用高如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
141 0

热门文章

最新文章