AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 12286
Accepted
Will A
Will A
Asked: 2010-07-05 08:46:10 +0800 CST2010-07-05 08:46:10 +0800 CST 2010-07-05 08:46:10 +0800 CST

SQL Server - 临时表与物理表

  • 772

我的工作地点正在进行一项运动,以摆脱使用#temp 表,而是使用带有 SPID 的永久物理表。每当一个人以前插入到一个#temp 表中时,现在就需要一个- 以及在例如存储过程的开头的INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)一堆语句。DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPID此外,不用说,在使用这些“用于存储临时数据的永久表”的任何地方,都必须小心包含一个WHERE SPID = @@SPID.

转向这种做法背后的逻辑是,它将提高运行查询的服务器的整体性能(通过减少 tempdb 中的 I/O 和争用)。出于多种原因,我不热衷于这种方法 - 它很丑陋,有潜在危险,而且似乎很可能会损害那些使用新方案的查询的性能。

有没有人对这种或类似的方法来消除#temp 表有任何经验?

sql-server performance
  • 3 3 个回答
  • 11622 Views

3 个回答

  • Voted
  1. Best Answer
    Remus Rusanu
    2010-07-05T09:19:41+08:002010-07-05T09:19:41+08:00

    可以很容易地证明它不会减少 IO 或争用,而是增加两者。

    • IO:从#temp 表中插入、读取或删除的每一行现在都将从@@SPID 表中插入、读取或删除。但是每一行都会因为一个额外的@@SPID 列而变得更宽,因此所需的页面数会略微增加,并且 IO 会稍微大一些。但更重要的是,现在必须使用 a 来模拟#temp 表的删除和新会话的 #temp 表的初始化DELETE FROM @@spidTable WHERE spid = @@SPID,因此将转换截断/创建操作(即页面范围管理操作)在行操作中,慢无比。
    • 争用:在#temp 表上使用页锁的每次扫描现在都有可能锁定具有不相关 spid 行的页,从而创建以前不存在的争用。每次执行更多操作并达到锁升级阈值的更新都有机会将锁升级为表锁,从而阻塞所有其他 spid。

    因此,虽然您不会在 tempdb 中遇到神话般的 IAM/SGAM/GAM 争用,但发生这种情况的唯一原因是由于普通的额外 IO 和额外争用,您的操作将变得慢得多。

    • 18
  2. Ben M
    2010-07-05T08:57:52+08:002010-07-05T08:57:52+08:00

    这似乎是一个激进的解决方案。网上有很多关于减少 tempdb 争用(并优化其使用)的文章——您的组织是否彻底检查了该途径?

    http://www.sql-server-performance.com/tips/tempdb_p1.aspx

    http://www.sqlservercentral.com/blogs/robert_davis/archive/2010/03/05/Breaking-Down-TempDB-Contention.aspx

    http://searchsqlserver.techtarget.com/tip/Optimize-tempdb-in-SQL-Server-by-striping-and-splitting-to-multiple-files

    等等

    • 5
  3. SPE109
    2010-07-05T08:59:55+08:002010-07-05T08:59:55+08:00

    听起来你应该解决 tempDB 中的性能问题,这里有一些建议

    • 2

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何在转储中使用使用数据库执行 mysqldump

    • 4 个回答
  • Marko Smith

    在 MySQL Workbench 中,在表的“顶部”插入一个新列?

    • 4 个回答
  • Marko Smith

    SQL Server - 临时表与物理表

    • 3 个回答
  • Marko Smith

    什么时候全表扫描比索引扫描更好?

    • 4 个回答
  • Marko Smith

    收缩数据库和文件有什么区别?

    • 3 个回答
  • Marko Smith

    Sql FILESTREAM 垃圾回收问题

    • 1 个回答
  • Marko Smith

    SQL Server 2008 DBCC 问题

    • 2 个回答
  • Marko Smith

    如何在恢复中停止、脱机和删除 SQL Server 数据库?

    • 2 个回答
  • Marko Smith

    如何将 SQL Server 2000 数据库恢复到 SQL Server 2008 实例?

    • 5 个回答
  • Marko Smith

    在 T-SQL 中使用 CAST 会影响性能

    • 3 个回答
  • Martin Hope
    user481826 如何在转储中使用使用数据库执行 mysqldump 2010-10-29 16:08:59 +0800 CST
  • Martin Hope
    Will A SQL Server - 临时表与物理表 2010-07-05 08:46:10 +0800 CST
  • Martin Hope
    NibblyPig SQL 2008 中的表分区 - 为什么? 2010-06-30 00:59:23 +0800 CST
  • Martin Hope
    Gnomo 解释执行计划 2010-09-10 10:31:11 +0800 CST
  • Martin Hope
    ahsan 什么时候全表扫描比索引扫描更好? 2010-12-10 10:16:54 +0800 CST
  • Martin Hope
    Tom DeMille 我应该定期缩小我的数据库或至少我的日志文件吗? 2010-04-24 08:19:19 +0800 CST
  • Martin Hope
    Jango 收缩数据库和文件有什么区别? 2010-08-24 10:25:42 +0800 CST
  • Martin Hope
    CrapHands 如何在恢复中停止、脱机和删除 SQL Server 数据库? 2010-12-18 07:12:36 +0800 CST
  • Martin Hope
    Ryan Delucchi 在 T-SQL 中使用 CAST 会影响性能 2010-07-02 15:11:16 +0800 CST
  • Martin Hope
    Manjot SQL 2005:我们能否确定重建索引维护作业可以使数据库日志文件增长多少? 2010-08-12 18:40:44 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve