SQL Server临时表执行后仍占内存吗?含2008与2019差异疑问
SQL Server临时表未主动清理时的存在性与内存占用(2008 vs 2019)
核心前提:临时表的分类与基础生命周期
临时表分两类,行为差异明显:
- 本地临时表:以单个
#开头(如#TempTable),仅对创建它的会话可见。 - 全局临时表:以两个
#开头(如##GlobalTemp),所有会话都可见。
SQL Server 2008的行为
- 存储过程内创建的本地临时表:无论是否手动执行
DROP TABLE,存储过程执行结束后,SQL Server会自动销毁该临时表,不会持续占用内存或存储资源。哪怕创建临时表的会话仍在持续,只要存储过程执行完毕,对应的本地临时表就会被清理。 - 全局临时表:如果存储过程创建了全局临时表且未主动删除,该表会持续存在,直到创建它的会话结束,同时没有其他会话在引用它时,才会被SQL Server自动清理。在此期间会占用内存(数据缓存)和tempdb存储。
- 会话级本地临时表:如果是在会话中直接创建(而非存储过程内),未主动删除的话会一直存在到会话结束,期间占用资源。
SQL Server 2019的行为
整体规则与2008完全一致,无核心差异:
- 存储过程内创建的本地临时表,执行结束后自动销毁,无需手动清理。
- 全局临时表和会话级本地临时表的生命周期规则和2008相同,未主动删除时会根据会话状态和引用情况决定何时被清理。
补充说明
临时表的数据首先会存在内存缓存中,当数据量超过内存阈值时会写入tempdb的磁盘文件。但无论哪种情况,只要临时表被销毁,对应的内存缓存和磁盘占用都会被释放。
内容的提问来源于stack exchange,提问作者TheMortiestMorty
相关产品推荐
相关产品推荐

