小编Der*_*omm的帖子

内存增加,性能更差

设置:

  • 视窗服务器 2008 R2
  • SQL Server 2008 R2 SP1
  • 240GB 内存
  • TempDB 是 8x16GB 的数据文件,没有自动增长(总共 128GB)
  • 物理/独立服务器

该服务器用于 ETL 处理。我们刚刚在此服务器中安装了更多 RAM,总共 240GB RAM。SQL Server 服务是唯一真正运行的东西。

内存在 BIOS、OpenManage 和 Windows 中显示良好。

如果我将 SQL Server 配置为使用 70/100GB 的最小/最大内存,我们没有问题。但是,一旦我将其增加到 120/150GB,当我运行我们的 ETL 进程之一时,我会收到以下错误:

无法为数据库 'tempdb' 中的对象 '<临时系统对象:422234507706368>' 分配空间,因为 'PRIMARY' 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。(消息 1105,状态 2,过程未知,第 1 行)

在更改内存配置之前,我们从未遇到过这个问题。重新配置回原来的70/100GB后,我们没有收到这个错误。

我尝试过的事情:

  1. 将 TempDB 数据文件设置为自动增长。这只会导致文件自动增长,直到达到磁盘容量,然后失败。
  2. 添加更多 TempDB 数据文件。如图所示相同的错误。
  3. 将 TempDB 大小增加到 8x32GB(总共 256GB)

我不知道是什么导致了这个问题。

sql-server memory sql-server-2008-r2

9
推荐指数
1
解决办法
1718
查看次数

更改 SQL Server 上的域

我目前有一些位于子域上的 SQL Server。我们正在消除该子域并将所有内容移至常规域。

就 SQL Server 配置而言,除了可能使用不同的服务帐户之外,还有什么我需要更改的吗?

请注意,这只是一个域更改 - 服务器名称应该相同。

sql-server-2005 sql-server

5
推荐指数
1
解决办法
8495
查看次数

回滚 DDL 语句组

在 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)

我在这里做错了什么?

sql-server sql-server-2008-r2 ddl rollback

5
推荐指数
2
解决办法
5227
查看次数

SQL Server - 包含 PK 的索引

让我们假设我们有一个如下表:

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。

index sql-server-2005 sql-server

1
推荐指数
1
解决办法
108
查看次数