Welcome

首页 / 数据库 / SQLServer / SQL Server表变量对IO及内存影响的测试

SQL Server表变量对IO及内存影响的测试2015-02-141. 测试创建表变量对IO的影响

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

use tempdbgoSet nocount onExec 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,idfrom Test.dbo.Orders Select top(1) name,object_id,type,create_datefrom sys.objects Where type="U" Order by create_date DescExec sp_spaceused /*插入数据之后*/GoExec 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*创建表变量后

可以看到数据文件写入次数以及写入字节发生了明显的变化,比较写入字节数:

select (2921709568-2913058816)*1.0/1024/1024

大约为8.3M,与表变量的数据基本一致,可见创建表变量,确实是发生了IO操作