0

再会,

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

我想要一些类似的东西:

use tempdb <tempdbname>

<query>

use tempdb <normaltempdb>

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

在此先感谢,ziv。

4

3 回答 3

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……抱歉,我不知道如何为这些产品分配临时数据库。

于 2017-01-02T16:19:13.423 回答
0

如果您主要关心的是对 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。

于 2016-12-21T14:33:31.120 回答
0

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

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

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

于 2017-01-03T14:29:46.197 回答