iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SqlServer中tempdb的日志机制原理是什么
  • 251
分享到

SqlServer中tempdb的日志机制原理是什么

2024-04-02 19:04:59 251人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关sqlServer中tempdb的日志机制原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。测试用例我们分别在用户数据库(

这篇文章将为大家详细讲解有关sqlServer中tempdb的日志机制原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

测试用例

我们分别在用户数据库(testpage),tempdb中创建相似对象t1,#t1,并在tempdb中创建创建非临时表,然后执行相应的insert脚本(用以产生日志),并记录执行时间用以比较用以比较说明tempdb”快”

Code

用户数据库testpage

use testpageGocreate table t1(id int identity(1,1) not null,str1 char(8000))declare @t datetime2=sysutcdatetime()declare @i intset @i=1while (@i<100000)begininsert into t1 select @i,'aa'select @i=@i+1endselect [extime]=DATEDIFF(S,@t,sysutcdatetime())

tempdb

use tempdbgocreate table #t1(id int not null,str1 char(8000))declare @t datetime2=sysutcdatetime()declare @i intset @i=1while (@i<100000)begininsert into #t1 select @i,'aa'select @i=@i+1endselect [extime]=DATEDIFF(S,@t,sysutcdatetime())

非临时表在tempdb中执行

use tempdbgocreate table t1(id int not null,str1 char(8000))declare @t datetime2=sysutcdatetime()declare @i intset @i=1while (@i<100000)begininsert into t1 select @i,'aa'select @i=@i+1endselect [extime]=DATEDIFF(S,@t,sysutcdatetime())

由图1-1中我们可以看出,在普通表中执行一分钟的脚本,tempdb只需执行22s.而普通表在tempdb中也只需27s均大大优于普通表中执行情况.

感兴趣的朋友亦可在执行过程中观察日志相关的性能技术器的运行情况如(Log Bytes Flusged \sec 等)

图1-1

由此测试我们可以看出本文开始提到的”tempdb比其他数据库快”.

实际并不是tempdb有什么魔法,而是tempdb的日志机制与其他数据库大有不同.

Tempdb的日志机制

Tempdb Simple恢复模式(重启后无需还原操作)

Tempdb使用最小化日志

Tempdb 不受系统CheckPoint影响(系统checkpoint不涉及tempdb,但人为tempdb中执行会落盘)

Tempdb 在刷入数据页到磁盘前,日志无需落盘(事务提交日志无需落盘)

"快"的原因

可以看到系统检查点自身会绕过tempdb,tempdb执行时无需日志先落盘.且会最小化日志记录(关于此一个特性我会稍候陈述)这些都极大的缓解了磁盘io瓶颈,使得tempdb相比其他DB会快很多.

注意:虽然系统checkpoint检查点会绕过tempdb,但tempdb中人为执行checkpoint还是会起作用,大家只应测试环境中使用,正式环境中慎用!

在上面的实例中我们可以看到无论在表的类型是什么,在tempdb中速度都会有很大提升,但普通表的执行时间还是略长于临时表,这是因为普通表的的日志记录信息还是要略多于临时表的.

关于tempdb最小化日志

在堆表(heap)中 insert,update操作的的更新信息日志无需记录.

我们通过简单实例来看.

USE [tempdb]GOcreate table #nclst(id int identity(1,1) primary key nonclustered,---heaptablestr1 char(8000));create table #clst(id int identity(1,1) primary key,------clusteredstr1 char(8000));checkpoint-----生产环境慎用!DBCC SHRINKFILE (N'templog' , 0, TRUNCATEONLY)GOinsert into #nclst(str1) select 'aa'select [Current LSN],Operation,CONTEXT,[Log Record Length] from fn_dblog(null,null) where AllocUnitId is not nullcheckpoint-----生产环境慎用!DBCC SHRINKFILE (N'templog' , 0, TRUNCATEONLY)GOinsert into #clst(str1) select 'aa'select [Current LSN],Operation,CONTEXT,[Log Record Length] from fn_dblog(null,null) where AllocUnitId is not null

由图1-2中可以看出堆表中并未记录Insert中的#ncls.str1的具体信息,而聚集表中则记录相应信息

图1-2

Tempdb为何需要日志

既然tempdb每次重启都会重新建立,我们无需重做日志,但运行过程中是可能需要回滚的,这也是tempdb日志存在的原因.

Tempdb 不支持重做(Redo)但需支持回滚(rollback).

关于tempdb回滚.

Tempdb中如果日志文件中无足够空间应用回滚则会引起整个实例就宕机!

Tempdb最佳实践-日志

a 不要tempdb中checkpoint(消耗巨大引起系统性能下滑)

b 不要tempdb中开启过长事务(无法截断日志,造成日志过大,如回滚时无法回滚则宕机)

c 一般需要中间表匹配的过程在tempdb中创建进行(创建速度快,需视具体情况而定.)

d tempdb中使用堆表速度佳.(需视具体情况而定)

关于SqlServer中tempdb的日志机制原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: SqlServer中tempdb的日志机制原理是什么

本文链接: https://www.lsjlt.com/news/56636.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SqlServer中tempdb的日志机制原理是什么
    这篇文章将为大家详细讲解有关SqlServer中tempdb的日志机制原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。测试用例我们分别在用户数据库(...
    99+
    2024-04-02
  • SqlServer中tempdb的作用是什么
    这篇文章将为大家详细讲解有关SqlServer中tempdb的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简介:tempdb是SQLServer...
    99+
    2024-04-02
  • sqlserver日志清理的方法是什么
    在 SQL Server 中清理日志的方法有以下几种: 使用备份和恢复操作:通过定期备份数据库和日志文件,可以清理事务日志。备份...
    99+
    2024-04-09
    sqlserver
  • 什么是SQLServer中的日志文件和日志记录
    SQL Server中的日志文件是用来记录数据库中的所有操作的文件。日志记录是指将数据库的所有更新操作(如插入、删除、更新)以及事务...
    99+
    2024-04-09
    SQLServer
  • sqlserver数据库日志清理的方法是什么
    SQL Server数据库日志清理的方法包括: 使用SQL Server Management Studio (SSMS):可以...
    99+
    2024-04-09
    sqlserver
  • MySQL中复制机制的原理是什么
    MySQL中复制机制的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。背景介绍复制,就是对数据的完整拷贝,说到为什么要...
    99+
    2024-04-02
  • SqlServer中索引的原理是什么
    本篇文章为大家展示了SqlServer中索引的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。索引的概念索引的用途:我们对数据查询及处理速度已成为衡量应用系...
    99+
    2024-04-02
  • Mysql中MVCC机制的原理是什么
    这篇文章将为大家详细讲解有关Mysql中MVCC机制的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Mysql的锁和事务隔离级别在理解MVCC机制的原理之前,需要先理解Mysql的...
    99+
    2023-06-14
  • mysql中WAL机制的原理是什么
    mysql中WAL机制的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、WAL预写日志系统。数据库中的高效日志算法,对于非内存数据库来说,磁盘I/O...
    99+
    2023-06-20
  • Java中 CAS机制的原理是什么
    Java中 CAS机制的原理是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。多线程实践public class test { &nb...
    99+
    2023-06-15
  • Node.js中Require机制的原理是什么
    这篇文章给大家介绍Node.js中Require机制的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是 CommonJS每一个文件就是一个模块,拥有自己独立的作用域,变量...
    99+
    2024-04-02
  • Android中Binder机制原理是什么
    Binder机制是Android系统中的一种进程间通信(IPC)机制,用于实现不同进程间的数据交互和方法调用。Binder机制的原理...
    99+
    2023-09-14
    Android
  • MySql中主从复制机制的原理是什么
    今天就跟大家聊聊有关MySql中主从复制机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。主从复制机制MySQL基于binlog实现主从复制,从节点跟踪并获取主节点bin...
    99+
    2023-06-14
  • node中事件机制的原理是什么
    今天就跟大家聊聊有关node中事件机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Publish/Subscribe(发布/订阅模式)...
    99+
    2024-04-02
  • shiro中缓存机制的原理是什么
    本篇文章给大家分享的是有关shiro中缓存机制的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实...
    99+
    2023-05-31
    shiro
  • java中反射机制的原理是什么
    这期内容当中小编将会给大家带来有关java中反射机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了...
    99+
    2023-06-14
  • Java RMI机制的原理是什么
    本篇内容主要讲解“Java RMI机制的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java RMI机制的原理是什么”吧!Java RMIJava RMI之HelloWorld篇Ja...
    99+
    2023-06-20
  • android Handler机制的原理是什么
    Android中的Handler机制是用来实现线程之间的通信的一种机制。它的原理是基于消息队列和消息循环。每个线程都有自己的消息队列...
    99+
    2023-09-20
    android
  • java中异常处理机制的原理是什么
    Java中的异常处理机制是基于异常类的继承关系和异常处理代码块的机制。当程序发生异常时,会抛出一个异常对象,该异常对象会沿着调用链向...
    99+
    2023-08-31
    java
  • Hibernate flush机制的原理是什么
    本篇内容介绍了“Hibernate flush机制的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!针对昨天同事遇到的hiberna...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作