设置:
该服务器用于 ETL 处理。我们刚刚在此服务器中安装了更多 RAM,总共 240GB RAM。SQL Server 服务是唯一真正运行的东西。
内存在 BIOS、OpenManage 和 Windows 中显示良好。
如果我将 SQL Server 配置为使用 70/100GB 的最小/最大内存,我们没有问题。但是,一旦我将其增加到 120/150GB,当我运行我们的 ETL 进程之一时,我会收到以下错误:
无法为数据库 'tempdb' 中的对象 '<临时系统对象:422234507706368>' 分配空间,因为 'PRIMARY' 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。(消息 1105,状态 2,过程未知,第 1 行)
在更改内存配置之前,我们从未遇到过这个问题。重新配置回原来的70/100GB后,我们没有收到这个错误。
我尝试过的事情:
我不知道是什么导致了这个问题。
我目前有一些位于子域上的 SQL Server。我们正在消除该子域并将所有内容移至常规域。
就 SQL Server 配置而言,除了可能使用不同的服务帐户之外,还有什么我需要更改的吗?
请注意,这只是一个域更改 - 服务器名称应该相同。
在 SQL Server 2008 R2 中工作时,我试图将一组 DDL 语句作为一个组回滚(想想数据库的升级脚本),但遇到了麻烦。
取以下代码:
begin try
begin tran
create table foo (i int)
alter table foo add x dog
insert into foo select 1,1
insert into foo select 1,1,1
commit tran
end try
begin catch
rollback tran
print @@error
end catch
Run Code Online (Sandbox Code Playgroud)
我期待尝试在更改表语句上失败,下降到捕获,回滚事务,并打印错误消息。但是,如果您检查对象/表,您会看到 foo 仍然存在(因此创建表没有正确回滚)。
select * from sys.objects where name = 'foo'
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
让我们假设我们有一个如下表:
PK -- nonclustered primary key
Col1 -- unique clustered
Col2
Col3
Run Code Online (Sandbox Code Playgroud)
这是指数:
nonclustered index on (Col2, Col3)
Run Code Online (Sandbox Code Playgroud)
与此索引的任何不同:
nonclustered index on (Col2, Col3) include (PK)
Run Code Online (Sandbox Code Playgroud)
如果我的 PK 是集群的而不是非集群的怎么办?现在它有所作为/没有有所作为吗?
编辑添加:
我想这是一种迂回的提问方式:非聚集索引的指针是基于聚集索引还是主键返回到表?我假设使用的是聚集索引 RID。