MSSQL临时(tempdb)系统数据库

摘要:
“endtrybegincapchendcatch”--监视代码列表7:有意创建使用tempdb系统数据库空间的各种语法sqlcreatedatabasealterdatabasesetread_committed_Snapshotnused--占用tempdb createtable上用户定义对象的空间##t1createtable##t2insert##t1defaultvaluessetnocountondeclare@iintset@i=0while@i˂20开始插入##从##中选择t1set@i=@I+1end--要混淆随机数,请逐个增加它们...while@i˂1000000开始插入##值(@i)set@i=@I+1end--要占用tempdb上的大量内部对象,请从##t1join##t2on##t1.c1=##t2.c4orderbyc4中选择*--要使用记录版本空间,请从##t1begininsupdatet1setc2=c2+'a中选择top1000*into1'代码列表8:要监视tempdb系统数据库空间SqlSELECTSUM*8as[用户对象]、SUM*8as[内部对象]、SUM*8as][记录版本空间]的使用情况,SUM*8as[可用空间],SUM*8as[混合扩展名]FROMsys dm_db_file_space_用法--或在tempdb中查看页面设置或取消活动SELECTtop5*FROMsys的设置。dm处于任务阶段或任务级别_ db_ session_ space_ usageORDERBYDESCSELECTtop5*FROMsys。dm_ db_ task_ space_ UsageORDERBYDESC—移动TempdbAlterDatabasetempdbModifyFileAlterDatabasetempdbModifyFile—添加与Tempdb相关的文件AlterDatabaseempdbAddFileAlterDatabase tempdbModify—停止并重新激活SQLCMD模式下的服务!!

--Reference

--基础
每次重启都会删除,然后从model系统数据库重建
05以上版本默认大小为8MB
只能有一个文件组放置数据库文件,另一个文件组放置事务记录文件
由于不支持ACID的Durable,05以上版本tempdb事务记录不会放入redo
tempdb存放的三种对象
内部对象:排序,hash join,hash aggregate,Instead of触发器,cursor结果,DBCC check, Service Broker,大型的数据,如:XML,text,image,varchar(max)等
版本存放区:事务的snapshot隔离级别或者read committed snapshot,多数据结果集multiple active result sets,在线生成索引,after 触发器
自定义对象:global和local temporary table,数据表变量等
查出tempdb内的对象和所占空间 也可在sys.all_objects和sys.objects里查看
exec sp_MSForEachTable 'begin try exec sp_SpaceUsed ''?'' end try begin catch end catch'
监控
sys.dm_db_file_space_usage
  • 每次重启都会删除,然后从model系统数据库重建
  • 05以上版本默认大小为8MB只能有一个文件组放置数据库文件,另一个文件组放置事务记录文件
  • 由于不支持ACID的Durable,05以上版本tempdb事务记录不会放入redo
  • tempdb存放的三种对象内部对象:
    • 排序,hash join,hash aggregate,Instead of触发器,cursor结果,DBCC check, Service Broker,大型的数据,如:XML,text,image,varchar(max)等
    • 版本存放区:事务的snapshot隔离级别或者read committed snapshot,多数据结果集multiple active result sets,在线生成索引,after 触发器
    • 自定义对象:global和local temporary table,数据表变量等
  • 查出tempdb内的对象和所占空间 也可在sys.all_objects和sys.objects里查看
    exec sp_MSForEachTable 'begin try exec sp_SpaceUsed ''?'' end try begin catch end catch'
--监控
  • 代码列表 7:故意建立各种使用 tempdb 系统数据库空间的语法.sql
    create database d
    alter database d set read_committed_snapshot on
    use d
    --占用 tempdb 上用户自定对象的空间
    create table ##t1(c1 int primary key identity(1,1),c2 nvarchar(10) default 'hello t1')
    create table ##t2(c1 int primary key identity(1,1),c2 int,c3 nvarchar(10) default 'hello t2',c4 int default rand(datepart(ms,getdate()))*10000)

    insert ##t1 default values

    set nocount on
    declare @i int
    set @i=0
    while @i<20
    begin
    insert ##t1(c2) select c2 from ##t1
    set @i=@i+1
    end

    --为了要让随机数乱,所以逐条增加...
    while @i<1000000
    begin
    insert ##t2(c2) values (@i)
    set @i=@i+1
    end

    --要占用 tempdb 上大量的内部对象
    select * from ##t1 join ##t2 on ##t1.c1=##t2.c4 order by c4


    --使用记录版本空间
    select top 1000 * into t1 from ##t1

    begin tran
    update t1 set c2=c2+ ' a'
     
  • 代码列表 8:监控 tempdb 系统数据库空间的使用.sql
    SELECT
    SUM (user_object_reserved_page_count)*8 as [用户对象(kb)],
    SUM (internal_object_reserved_page_count)*8 as [内部对象(kb)],
    SUM (version_store_reserved_page_count)*8 as [纪录版本空间(kb)],
    SUM (unallocated_extent_page_count)*8 as [可用空间(kb)],
    SUM (mixed_extent_page_count)*8 as [mixedextent(kb)]
    FROM sys.dm_db_file_space_usage

    --或是在任务阶段或任务层级查看 tempdb 中的页面设置或取消设置活动

    SELECT top 5 *
    FROM sys.dm_db_session_space_usage
    ORDER BY (user_objects_alloc_page_count +
    internal_objects_alloc_page_count)
    DESC

    SELECT top 5 *
    FROM sys.dm_db_task_space_usage
    ORDER BY (user_objects_alloc_page_count +
    internal_objects_alloc_page_count)
    DESC

    --移动Tempdb
    Alter Database tempdb Modify File (Name='tempdev',FileName='C:\temp\temp.mdf',size=30 MB,FileGrowth=10 MB)
    Alter Database tempdb Modify File (Name='templog',FileName='C:\temp\temp.ldf',size=10 MB,FileGrowth=10 MB)

    --增加Tempdb相关文件
    Alter Database tempdb Add File (Name='tempdev2',FileName='C:\temp\temp2.mdf',size=30 MB,FileGrowth=10 MB)
    Alter Database tempdb Modify File (Name='templog2',FileName='C:\temp\temp2.ldf',size=30 MB,FileGrowth=10 MB)

    --以SQLCMD模式停止并且重新激活服务
    !!NET STOP MSSQLSERVER /Y
    !!NET START MSSQLSERVER

    --可以在sys.master_files系统视图查看到文件位置
     



免责声明:文章转载自《MSSQL临时(tempdb)系统数据库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 如何动态添加 View 并显示在指定位置。基于solarflare的openonload技术以TCPDirect方法加速epoll下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OPERATON_GAME

top 查看cpu和负载。 free -m free -g iostat -x 10%idle 小于 70 服务器压力很大了%util 越接近100% ,服务器压力越大。 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。idle小于70% IO压力就较大了,一般读取速度有较多的wait. 到home/d...

如何解决线程安全问题

转自:https://www.cnblogs.com/dolphin0520/p/3923737.html 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。   以下是本文的...

[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署

这是微软官方SignalR 2.0教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第五篇:MVC程序中实体框架的Code First迁移和部署 原文:Code First Migrations and Deployment with the Entity F...

SQL SERVER 分区

“索引要与其基表对齐,并不需要与基表参与相同的命名分区函数。但是,索引和基表的分区函数在实质上必须相同,即: 1) 分区函数的参数具有相同的数据类型; 2) 分区函数定义了相同数目的分区; 3) 分区函数为分区定义了相同的边界值。” “先设计一个已分区表,然后为该表创建索引。执行此操作时,SQL Server 将使用与该表相同的分区方案和分区依据列自动对索...

Linux 安装SonarQube

            1、在安装SonarQube 之前需要先了解一下它是做什么的   SonarQube助力于让所有开发人员编写更干净、更安全的代码   SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持Java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groov...

数据库打开时报错该如何解决

故障描述 故障主要表现为打开数据库时报错,内容为:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。经过对数据库文件的检测后初步可得出以下结论:sysaux01.dbf有坏块,sysaux01.dbf文件损坏。急需恢复zxfg用户下的数据。 故障分析出现上述报错的可能性原因主要有控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不...