【问题标题】:Changing tempdb "in-query"更改 tempdb“查询中”
【发布时间】:2017-01-03 22:29:46
【问题描述】:

早安,

是否可以更改我当前会话使用的 tempdb? 我有一个非常繁重的查询,用于 HD 使用。 理想情况下,我希望使用我们专门用于此类繁重事物的 tempdb 运行查询。 (主要问题是查询创建了一个非常大的临时表)

我想要一些类似的东西:

use tempdb <tempdbname>

<query>

use tempdb <normaltempdb>

如果这是可能的,即使通过其他方式,请告诉我。 目前,我知道的唯一方法是将用户绑定到不同的 tempdb,然后使用该用户而不是普通用户进行 HD 登录。

提前致谢, ziv.

【问题讨论】:

  • 好吧,我使用下面的方式,它对我有用use tempdb select top 100 * from sysobjects user testdb select * from table1是你想要的还是什么?

标签: sybase tempdb


【解决方案1】:

在 Sybase ASE 中,您不能在运行中更改 tempdb;您的 tempdb 会在登录时自动分配。

你有几个选择:

1(推荐)- 让 DBA 专门为此进程创建登录名并将所述登录名绑定到所需的 tempdb(例如 sp_tempdb 'bind',...);让你的进程使用这个新的登录名

2(不推荐)- 创建带有“desired_tempdb_name..”前缀的永久表,而不是创建#temp 表;如果您在完成后忘记手动删除所述表,您可能会惹恼您的 DBA

3(好的,如果您有磁盘空间)- 正如 Rich 建议的那样,确保所有 tempdb 的大小都足够大以支持您的进程

注意:如果您使用的是 Sybase 的 SQLAnywhere、IQ 或 Advantage RDBMS……抱歉,我不知道如何为这些产品分配临时数据库。

【讨论】:

    【解决方案2】:

    如果您主要关心的是对 tempdb 和其他用户的影响,您可以考虑创建多个相同大小和结构的默认 tempdb。将这些添加到默认组,并在连接时将会话分配给 tempdb,从而降低一个大型查询影响整个数据服务器的风险

    http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00841.1502/html/phys_tune/phys_tune213.htm

    您还可以考虑对特定登录使用登录触发器,并检查正在连接的程序名称以决定使用哪个 tempdb(例如,Business Objects 可以转到更大的 DSS tempdb 或类似数据库)。

    虽然我知道在连接时设置了 tempdb 绑定,但无法更改会话中的会话 tempdb。

    【讨论】:

    • 恐怕我无法添加数据库,也无法修改登录触发器。但“不”,也是一个答案。感谢您的意见。
    【解决方案3】:

    听起来您至少有一个由 DBA 创建的其他 tempdb。您可以通过应用程序名称以及登录 ID 绑定到它。在您的客户端会话中设置应用程序名称(取决于您如何执行此操作的客户端。)使用 sp_tempdb(仅限 dba)将该应用程序名称绑定到备用 tempdb,您的 # 表将位于该 tempdb 中。具有该应用程序名称的任何会话都将使用该 tempdb。

    tempdbs 不必具有相同的大小或结构,您可以拥有单独的日志和数据(一个好主意),根据您的操作,更多的日志和更少的数据。

    markp 提到 tempdbs 中的永久表,并说“不推荐”。不过,这可能是一个很好的技术。您确实需要小心它们有多大以及何时掉落。您可能不需要或不想直接删除它们,例如,如果您需要从它们 bcp 和/或让它们可见以用于支持目的,但您确实需要清楚空间使用情况、何时删除以及如何删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多