tempdb对SQL Server数据库性能有何影响

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 1.SQL Server系统数据库介绍   SQL Server有四个重要的系统级数据库:master,model,msdb,tempdb.   master:记录SQL Server系统的所有系统级信息,包括实例范围的元数据,端点,链接服务器和系统配置设置,还记录其他数据库是否存在以及这些数据问文件的位置等等.如果master不可用,数据库将不能启动.   model:用在SQL Server 实例上创建的所有数据库的模板。
1.SQL Server系统数据库介绍

  SQL Server有四个重要的系统级数据库:master,model,msdb,tempdb.

  master:记录SQL Server系统的所有系统级信息,包括实例范围的元数据,端点,链接服务器和系统配置设置,还记录其他数据库是否存在以及这些数据问文件的位置等等.如果master不可用,数据库将不能启动.

  model:用在SQL Server 实例上创建的所有数据库的模板。因为每次启动 SQL Server 时都会创建 tempdb,所以 model 数据库必须始终存在于 SQL Server 系统中。

  msdb:由SQL Server 代理用来计划警报和作业。

  tempdb:是连接到 SQL Server 实例的所有用户都可用的全局资源,它保存所有临时表,临时工作表,临时存储过程,临时存储大的类型,中间结果集,表变量和游标等。另外,它还用来满足所有其他临时存储要求.

  2.tempdb内在运行原理

  与其他SQL Server数据库不同的是,tempdb在SQL Server停掉,重启时会自动的drop,re-create. 根据model数据库会默认建立一个新的8MB(mdf file:8MB;ldf file:1MB, autogtouth设置为10%)大小recovery model为simple的tempdb数据库.

  tempdb数据库建立之后,DBA可以在其他的数据库中建立数据对象,临时表,临时存储过程,表变量等会加到tempdb中.在tempdb活动很频繁时,能够自动的增长,因为是simple的recovery model,会最小化日志记录,日志也会不断的截断.

  3.如何合理的优化tempdb以提高SQL Server的性能

  如果SQL Server对tempdb访问不频繁,tempdb对数据库不会产生影响;相反如果访问很频繁,loading就会加重,tempdb的性能就会对整个DB产生重要的影响.优化tempdb的性能变的很重要的,尤其对于大型数据库.

  注:在优化tempdb之前,请先考虑tempdb对SQL Server性能产生多大的影响,评估遇到的问题以及可行性.

  3.1最小化的使用tempdb

  SQL Server中很多的活动都活发生在tempdb中,所以在某种情况可以减少多对tempdb的过度使用,以提高SQL Server的整体性能.

  如下有几处用到tempdb的地方:

  (1)用户建立的临时表.如果能够避免不用,就尽量避免. 如果使用临时表储存大量的数据且频繁访问,考虑添加index以增加查询效率.

  (2)Schedule jobs.如DBCC CHECKDB会占用系统较多的资源,较多的使用tempdb.最好在SQL Server loading比较轻的时候做.

  (3)Cursors.游标会严重影响性能应当尽量避免使用.

  (4)CTE(Common Table Expression).也会在tempdb中执行.

  (5)SORT_INT_TEMPDB.建立index时会有此选项.

  (6)Index online rebuild.

  (7)临时工作表及中间结果集.如JOIN时产生的.

  (8)排序的结果.

  (9)AFTER and INSTEAD OF triggers.

  不可能避免使用tempdb,如果有tempdb的瓶颈或issue,就该返回来考虑这些问题了.

  3.2重新分配tempdb的空间大小

  在SQL Server重启时会自动建立8MB大小的tempdb,自动增长默认为10%. 对于小型的数据库来说,8MB大小已经足够了.但是对于较大型的数据库来说,8MB远远不能满足SQL Server频繁活动的需要,因此会按照10%的比例增加,比如说需要1GB,则会需要较长的时间,此段时间会严重影响SQL Server的性能. 建议在SQL Server启动时设置tempdb的初始化的大小(如下图片设置为MDF:300MB,LDF:50MB),也可以通过ALTER DATABASE来实现. 这样在SQL Server在重启时tempdb就会有足够多的空间可利用,从而提高效率.

2010-05-11-11-09-49.jpg

  难点在于找到合理的初始化大小,在SQL Server活动频繁且tempdb不在增长时会是一个合适的值,可以设置此时的值为Initial Size;当然还会有更多的考量,此为一例.

  3.3不要收缩tempdb(如没有必要)

  有时候我们会注意到tempdb占用很大的空间,但是可用的空间会比较低时,会想到shrink数据库来释放磁盘空间, 此时要小心了,可能会影响到性能.

2010-05-11-11-10-20.jpg

  如上图所示:tempdb分配的空间为879.44MB,有45%的空间是空闲的,如果shrink掉,可以释放掉一部分磁盘空闲,但是之后SQL Server如有大量的操作时,tempdb空间不够用,又会按照10%的比例自动增长. 这样子的话,所做的shrink操作是无效的,还会增加系统的loading.

  3.4 分派tempdb的文件和其他数据文件到不用的IO上

  tempdb对IO的要求比较高,最好分配到高IO的磁盘上且与其他的数据文件分到不用的磁盘上,以提高读写效率.

  tempdb也分成多个文件,一般会根据CPU来分,几个CPU就分几个tempdb的数据文件. 多个tempdb文件可以提高读写效率并且减少IO活动的冲突.

  tempdb是SQL Server重要的一部分,以上只是对tempdb的一些了解总结,还需要进一步学习

相关实践学习
使用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月前
|
SQL Prometheus 监控
数据库优化技巧 - SQL语句优化
数据库优化技巧 - SQL语句优化
435 0
|
SQL 数据可视化 数据库
SQL SERVER数据库服务器CPU不能全部利用原因分析
SQL SERVER数据库服务器CPU不能全部利用原因分析
168 0
|
SQL Shell 测试技术
数据库查询优化让sql执行更快
人 们 在使用 SQL 时 往往会陷入一个 误 区,即太 关 注于所得的 结 果是否正确,而忽略了不同的 实现 方法之 间 可能存在的性能差异, 这种 性能差异在大型的或是 复杂 的数据 库环 境中(如 联 机事 务处 理 OLTP 或决策支持系 统 DSS )中表 现 得尤 为 明 显 。 笔者在工作 实 践中 发现 ,不良的 SQL 往往来自于不恰当的索引 设计 、不充份的 连 接条件和不可 优 化的 where 子句。
105 0
|
数据库
SQLServer数据库F5负载问题
目前在用F5给数据库负载遇到的一个问题,给数据库负载(此处不涉及读写分离的问题,因为是一对一的负载即pool memeber只有一个)根据客户的要求给数据库负载采用七层的standerd模式,在TCP协议中,发现VS(标准模式的全端口配置)始终没有办法命中流量,当时网络是没问题的,长ping没有问题。
1391 0
|
存储 关系型数据库 数据库
mysql,sqlserver数据库单表数据过大的处理方式
经常混迹于技术社区,频繁看到这个题目,今天干脆在自己博客重复一遍解决办法: 针对mysql,sqlserver等关系型数据库单表数据过大的处理方式 如果不是阿里云的分布式数据库 DRDS 那种多机器集群方案的话: 先考虑表分区 ;然后考虑分表 ;然后考虑分库。
2484 0
|
数据库 SQL
SQLServer数据库差异备份
原文:SQLServer数据库差异备份 差异备份 (differential backup)定义 一种数据备份,基于完整数据库或部分数据库或一组数据文件或文件组(差异基准)的最新完整备份,并且仅包含自确定差异基准以来发生更改的数据。
1334 0
SQL优化:紧急情况下提高SQL性能竟是这样实现的!
笔者在某运营商的优化经历中曾经遇到了一条比较有意思的 SQL,本文记录了整个过程。
6238 0
|
SQL 数据库 索引
Sql Server数据库性能优化之索引
最近在做SQL Server数据库性能优化,因此复习下一索引、视图、存储过程等知识点。本篇为索引篇,知识整理来源于互联网。 索引加快检索表中数据的方法,它对数据表中一个或者多个列的值进行结构排序,是数据库中一个非常有用的对象。
1134 0