`
SQL专家云技术团队
  • 浏览: 17655 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL SERVER——如何快速定位TempDB产生问题

阅读更多

步骤1.TempDB压力诊断

等待类型诊断

TempDB的争用压力在等待篇中已经简单介绍,等待的表现为 pagelatch_类等待,等待的资源是 “2: X :X ”

 

 

tempDB所在磁盘的响应时间

 

一个实例下只有一个tempdb,也就是当你在一个实例下创建了100个数据库,这100个数据库也只能用这一个TempDB。

你创建的临时表,或SQL执行语句所需要的排序等操作都需要用到Tempdb。所以TempDB对磁盘的响应时间要求比较高。

步骤2.解决问题

 

把TempDB设置成多个来分摊这个压力。

分成多个文件

    作为一般规则,如果逻辑处理器数小于或等于 8,使用和逻辑处理器相同数量的数据文件。如果逻辑处理器数大于 8 时,使用 8 个数据文件,然后如果仍然存在争用,增加数据文件数4 的倍数(最多的逻辑处理器数)直到争用降低到可接受的程度或对工作负荷/代码进行更改。

文件大小、增长率要相同

   这里需要注意一个小细节,你所分配的文件必须大小一致,如果设置自动增长那么增长率要相同

    

 

 

 

TempDB磁盘划分

    大多数情况下,TempDB的文件不需要拆分磁盘,在同一个磁盘即可,如果压力大可以选择放置在一个单独的磁盘中,这样不会与其他文件(如数据读写)发生磁盘资源竞争。

    

 

    如果出现TempDB 读取响应时间高的情况,请考虑,TempDB的磁盘相关优化,如将TempDB文件单独放入比较快的磁盘。

 

 

步骤3.语句调优

  语句调优篇提到语句中使用临时表或表变等会减少语句的复杂度,提升语句的效率,是常用的三板斧之一,但这里的需要一个平衡。如果对语句过度使用会造成文中提到的TempDB压力。那么怎么样平衡呢?下面给出几点建议:

  1. 切记不要过度使用临时表!临时表的使用主要有两个场景,拆分语句降低复杂性。另一个是缓存中间结果避免重复操作。
  2. 减少使用临时表锁系统表的时间!”select 字段 into #临时表 from“ 如果语句执行时间过长这将是灾难,尽量选用先创建,后插入的做法。
 
 
 

原理:TempDB压力从哪来?

    当数据库创建一张新表的时候,SQL Server要为这张表分配存储页面,同时SQL Server也要修改SGAM, PFS, 和GAM页面,把已经分配出去的页面标志成已使用。所以每创建一张新表,SGAM, PFS, 和GAM这些系统页面都会有修改动作。这种行为对一般的用户数据库不会有问题,因为正常的应用不会折腾着不停地建表、删表。但是tempdb就不同了。如果一个存储过程使用了临时表,而这个存储过程被并发用户广泛使用,那很自然地就会有很多并发用户在tempdb里同时创建表,做完了以后又删除表。这样,在一个时间点,会有很多任务要修改SGAM, PFS, 或GAM页面。但是为了维护物理的一致性,对于同一个页面,SQL Server在一个时间点同时只允许一个用户修改它。所以对于tempdb,如果同时有很多很多人要在同一个数据文件里分配空间,那这个数据文件的SGAM, PFS, 或GAM页面,就有可能成为系统瓶颈。大家只能一个一个做,并发度上不去。

    这就好像你进停车场要登记交费一样!一个一个来不要急~

    

 

    等待资源为 : “2:1:3” 这是什么意思? ID 为 2 的数据库(TempDB)的 1号文件 的 页码为3的页(SGAM页面)!

 

    

 

 

    这里关于系统页不过多的介绍,想详细了解的朋友请参见 :  SQL Server中的GAM页和SGAM页

 

我创建个临时表跟系统页还有关系?

    下面也用一个例子说明 : 

    创建临时表的时候会对系统表中进行插入和更新,而删除临时表逆向过程会删除或更新系统表!

 
use [AdventureWorks2012]
GO
checkpoint
go
create table #t
(
id int
)
drop table #t


use tempdb
go
select Operation,CONTEXT,[Transaction ID],AllocUnitId,AllocUnitName,[Page ID],[Transaction Name],Description from fn_dblog(null,null)

 

 

    

    

 

 

    所以当你并发过高且频繁创建删除临时表的时候就会造成大量的争用。

 

0
0
分享到:
评论

相关推荐

    SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

    执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 网上找了下解决方案,大体是扩大临时库的日志文件...

    关于SqlServer2000数据库中tempdb.mdf的迁移

    在探讨关于SqlServer2000数据库中tempdb.mdf的迁移这一主题时,我们首先要理解tempdb数据库在SqlServer系统中的核心角色与功能。Tempdb是一个系统数据库,它为所有用户数据库提供临时表、临时存储过程以及其他临时...

    tempdb太大引起磁盘容量不足的解决方案.docx

    tempdb 是 SQL Server 中的一个系统数据库,用于存储临时结果、游标、排序和其他临时数据。然而,当 tempdb 变得太大时,可能会导致磁盘容量不足的问题。今天,我们将讨论 tempdb 太大引起磁盘容量不足的解决方案。 ...

    SQL Server 2017及2019各个版本之间的区别和SQL Server 不同时期发布的不同版本的区别

    SQL Server是微软公司的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。本文将探讨SQL Server 2017和2019各版本之间的差异以及SQL Server不同历史版本的特点,帮助用户根据项目需求选择合适的数据库...

    sql server基本图标

    "系統图标"可能是指SQL Server中与系统相关的图标,例如系统数据库(如master、model、msdb和tempdb)的图标,或者是系统对象、系统存储过程和系统视图的表示。 4. **开发文档** 对于开发人员来说,了解这些图标...

    更改SQL Server 2005数据库中tempdb位置的方法

    在SQL Server 2005中,tempdb是一个非常重要的系统数据库,用于存储临时对象,如临时表、存储过程中的工作表以及排序和合并操作所需的内部工作表。由于tempdb频繁地创建和删除数据,因此优化其性能对于整个SQL ...

    SQL SERVER 2022安装详细教程

    这篇文章将详细阐述SQL Server 2022在Windows 11上的安装过程,并附带SSMS(SQL Server Management Studio)的安装步骤,以帮助用户快速入门。 首先,安装SQL Server 2022需要准备安装包。可以通过微软官方网站下载...

    SQLServer期末考试题目及答案.docx

    14. SQL Server 2000 tempdb 数据库 tempdb 数据库是一个临时数据库,用于存储临时数据和结果集。 15. SQL Server 2000 error 处理 在 SQL Server 2000 中,数据库管理员可以通过事务日志文件和备份机制来恢复...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...

    sqlserver sql语法大全

    ### SQLServer SQL语法大全 #### 创建数据库 在SQL Server中创建数据库是一项基本操作,通过`CREATE DATABASE`命令来实现。创建数据库时可以指定文件和日志文件的位置、初始大小及增长方式等参数。 **语法示例:**...

    如何查看SQLSERVER中某个查询用了多少TempDB空间

    在SQL Server中,TempDB是一个非常关键的系统数据库,它主要用于临时对象的存储,包括内部操作和用户创建的临时表或表变量。当处理大量数据、进行排序、哈希连接或实现行版本控制(例如在事务隔离级别中的快照隔离或...

    SQLSERVER2005常见性能排错

    SQL Server 2005 是一款强大的企业级数据库管理系统,但即使是再强大的平台也难免遇到性能问题。这些问题可能源自多种因素,如不良的设计、不当的配置或是硬件限制等。作为管理员或数据库专家,了解如何预防、诊断并...

    SQL Server 最佳实践分析器 [免费版]

    Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你检测设计的数据库是否遵循SQL Server操作和管理的最佳实践准则。这些准则公认有助于...

    浅谈SQL Server 2016里TempDb的进步

    在SQL Server 2016中,TempDb的改进是一个重要的焦点,因为它直接影响到系统性能和并发处理能力。TempDb数据库作为一个全局资源,承载着多种临时对象,包括临时表、临时工作表、临时存储过程、临时大类型、中间结果...

    mysql和sqlserver的驱动包

    而SQL Server提供多种存储引擎,如InnoDB、TempDB等,且支持更高级的事务隔离级别。 2. 性能:MySQL因其轻量级和高效而受到青睐,尤其在读取密集型应用中表现出色;SQL Server则在复杂查询和大数据管理方面更具优势...

    sqlserver数据库课件

    【SQL Server 2000】是微软公司推出的一款企业级关系型数据库管理系统,它具有丰富的特性和功能,广泛应用于各种规模的企业。本课件主要介绍了SQL Server 2000的基本概念、安装要求和主要系统数据库。 首先,SQL ...

    sql server 2005安装截图

    安装完成后,SQL Server 2005会生成一个默认的系统数据库,包括Master、Model、Msdb和TempDB。Master数据库存储了SQL Server的所有系统信息,如登录信息、数据库列表等;Model是新数据库的模板;Msdb用于调度作业、...

Global site tag (gtag.js) - Google Analytics