测试创建表变量对IO的影响
测试创建表变量前后,tempdb的空间大小,目前使用sp_spaceused得到大小,也可以使用视图sys.dm_db_file_space_usage

use tempdb
go
Set nocount on
Exec sp_spaceused /*插入数据之前*/
declare @tmp_orders table ( list_no int,id int)
insert into @tmp_orders(list_no,id)
select ROW_NUMBER() over( order by Id ) list_no,id
from Test.dbo.Orders
Select top(1) name,object_id,type,create_date
from sys.objects
Where type='U' Order by create_date Desc
Exec sp_spaceused /*插入数据之后*/
Go
Exec sp_spaceused /*Go之后*/

执行结果如下:

可以看到:
1) 在表变量创建完毕,同时批处理语句没有结束时,临时库的空间增大了接近9M空间。创建表变量的语句结束后,空间释放
2)在临时库的对象表sys.objects中能够查询到刚刚创建的表变量对象
继续验证是否发生IO操作,使用视图sys.dm_io_virtual_file_stats
在创建表变量前后执行如下语句:
select db_name(database_id) database_name,*
from sys.dm_io_virtual_file_stats(db_id('tempdb'), NULL)
测试结果如下:
1* 创建表变量前

2*创建表变量后


declare @tmp_orders table ( list_no int,id int)
insert into @tmp_orders(list_no,id)
select ROW_NUMBER() over( order by Id ) list_no,id
from Test.dbo.Orders
--查询tempdb库中最后创建的对象
Select top(1) name,object_id,type,create_date from sys.objects Where type='U' Order by create_date Desc
--查询内存中缓存页数
SELECT count(*)AS cached_pages_count
,name ,index_id
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN
(
SELECT object_name(object_id) AS name
,index_id ,allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.type = 1 OR au.type = 3)
UNION ALL
SELECT object_name(object_id) AS name
,index_id, allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.type = 2
) AS obj
ON bd.allocation_unit_id = obj.allocation_unit_id
WHERE database_id = db_id()
GROUP BY name, index_id
ORDER BY cached_pages_count DESC

测试结果如下:

可以看到表变量创建后,数据页面也会缓存在Buffer Pool中。但所在的批处理语句结束后,占用空间会被释放。
3. 结论
SQL Server在批处理中创建的表变量会产生IO操作,占用tempdb的空间,以及内存bufferPool的空间。在所在批处理结束后,占用会被清除
测试创建表变量对IO的影响的更多相关文章
- SQLServer表变量对IO及内存影响测试
原文:SQLServer表变量对IO及内存影响测试 1. 测试创建表变量对IO的影响 测试创建表变量前后,tempdb的空间大小,目前使用sp_spaceused得到大小,也可以使用视图sys.dm_ ...
- sql创建表变量,转百分数
declare @tab table( ID nt identity(1,1) primary key, --从1开始,每次自增1 ,Name nvarchar(200) ) declare a fl ...
- SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)
前言 接下来我们将SQL Server基础系列还剩下最后几节内容结束,后续再来讲解SQL Server性能调优,我们开始进入主题. SQL Server事务对本地变量影响 事务对变量影响具体是指什么意 ...
- SQL表变量与临时表区别 + 非游标临时表遍历
SQL表变量与临时表区别 + 非游标临时表遍历 分类: SQL Server2009-11-27 17:01 1196人阅读 评论(2) 收藏 举报 sqlinsert存储sql servermicr ...
- (转)create table #temptable 临时表 和 declare @bianliang table ()表变量
在开发过程中,经常会遇到使用表变量和本地临时表的情况.下面是对二者的一个介绍: 1. 为什么要使用表变量 表变量是从2000开始引入的,微软认为与本地临时表相比,表变量具有如下优点: a.与其他变量 ...
- SQLServer中临时表与表变量的区别分析(转)
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
- 【T-SQL系列】临时表、表变量
临时表临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志, ...
- SQLServer中临时表与表变量的区别分析
临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志 ...
- SQLServer中临时表与表变量的区别分析【转】
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
随机推荐
- Mac终端下的svn使用教程
1.将文件checkout到本地目录 1 svn checkout path(path是服务器上的目录) 2 例如:svn checkout svn://192.168.1.1/svn 3 简写:sv ...
- BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)
题目链接 数据范围在这:https://lydsy.com/JudgeOnline/wttl/thread.php?tid=613, 另外是\(n\leq3\times10^5\). 用\(t_i\) ...
- JavaScript基础笔记(七)DOM
DOM DOM可以将任何HTML或者XML文档描述成一个由多层节点构成的结构. 一.节点层次 一)Node类型 DOM1定义了一个Node接口,该接口将由DOM中所有节点类型实现. 每一个节点都有一个 ...
- SS+FinalSpeed终极教程[转]
亲测,晚高峰看YOUTUBE的720P完全不卡. 推荐使用virwire buget VPS,性价比较高,128M内存,每月500G超大流量:http://www.cnblogs.com/tuzhuk ...
- Centos 安装lnmp完整版
1.使用putty或类似的SSH工具登录服务器: 登录后运行 screen -S lnmp 2.下载并安装LNMP一键安装包: 我是CentOS系统,所以运行: wget -c http://soft ...
- 05 树莓派安装飞鸽传书 Iptux
2017-08-22 14:47:06 进入页面:https://packages.debian.org/search?keywords=iptux 选择“stretch (stable) ”—— ...
- 自己遇到过的出现java.lang.StackOverflowError的原因
public static JSONArray geth24Weather(String result) {//获取当天24小时以及第二天的天气结果对象 JSONObject fromO ...
- Code signing is required for product type 'Application' in SDK 'iOS 11.4'
查看链接: https://blog.csdn.net/Fantasy_Jun/article/details/78082359 处理方法: 将code signing identity设置为iOS ...
- day1-接口测试_jmeter_postman
1.postman测试接口六种类型,(注意1.每个请求最好使用独立的dome) 1.1 请求获取学生信息接口,请求方式为get,路径:/api/x/x,唯一参数stu_name=XXX;直接在输入地址 ...
- asp.net mvc ViewData 和 ViewBag区别,TempData
ViewData 和 ViewBag都是页面级别的生命周期,TempData--Passing data between the current and next HTTP requests Temp ...