0

0

SQLServer表变量对IO及内存影响测试

php中文网

php中文网

发布时间:2016-06-07 15:44:31

|

1442人浏览过

|

来源于php中文网

原创

1. 测试创建表变量对IO的影响 测试创建表变量前后,tempdb的空间大小,目前使用 sp_spaceused 得到大小,也可以使用视图 sys.dm_db_file_space_usage use tempdb go Set nocount on Exec sp_spaceused /* 插入数据之前 */ declare @tmp_orders table ( list_

1. 测试创建表变量对io的影响

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

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

执行结果如下:

SQLServer表变量对IO及内存影响测试

可以看到:

1) 在表变量创建完毕,同时批处理语句没有结束时,临时库的空间增大了接近9M空间。创建表变量的语句结束后,空间释放

2)在临时库的对象表sys.objects中能够查询到刚刚创建的表变量对象

 

继续验证是否发生IO操作,使用视图sys.dm_io_virtual_file_stats

在创建表变量前后执行如下语句:

<span><span>select</span> <span>db_name</span>(database_id) database_name,<span>*</span>
<span>from</span> sys.dm_io_virtual_file_stats(<span>db_id</span>(<span>'</span><span>tempdb</span><span>'</span>), <span>NULL</span>)</span>

测试结果如下:

1* 创建表变量前

SQLServer表变量对IO及内存影响测试

2*创建表变量后

SQLServer表变量对IO及内存影响测试

 

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

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

SpeechEasy
SpeechEasy

SpeechEasy是一种合成语音解决方案,可以让用户从文本生成高质量、易于理解的音频。

下载

 

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

 

2. 测试创建表变量对内存的影响

考虑表变量是否占用内存的数据缓冲区,测试SQL如下:

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

测试结果如下:

SQLServer表变量对IO及内存影响测试

可以看到表变量创建后,数据页面也会缓存在Buffer Pool中。但所在的批处理语句结束后,占用空间会被释放。

 

3. 结论

SQL Server在批处理中创建的表变量会产生IO操作,占用tempdb的空间,以及内存bufferPool的空间。在所在批处理结束后,占用会被清除

 

参考文章:

http://www.cnblogs.com/CareySon/archive/2012/06/11/2544835.html

http://www.cnblogs.com/wghao/archive/2011/11/02/2227219.html

如有不对的地方,欢迎拍砖,谢谢!O(∩_∩)O

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1142

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

371

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

245

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

37

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

114

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

77

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

863

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

123

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 18.6万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 3.8万人学习

NumPy 教程
NumPy 教程

共44课时 | 3.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号