标签: sql-server

表压缩如何影响 SQL Server 的缓冲池?

我很好奇 SQL Server 的缓冲池如何受到压缩数据表的影响。

内存中的数据是像在磁盘上一样被压缩,还是完全解压?

如果数据被压缩存储在缓冲池中,那么在执行语句时,给定时间内存中保存了多少瞬时解压数据;一行/页、整个表(假设有足够的空闲页来保存数据),还是“视情况而定”?

sql-server memory compression

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

TempDB 上的 DDL 争用

我有一个 SQL Server 2005 Standard x64,它在过去几个月中遇到了 TempDB DDL 争用问题。服务器将在等待资源 2:1:103 上发生争用(等待类型为 PAGELATCH_EX)。

当服务器负载正常时,该问题似乎偶尔会发生。我一直在监视“破坏临时表”的比率,当我们在 2:1:103 出现 PAGELATCH_EX 问题时,它可以跳到 5,000+。从我读过的内容来看,这个计数器大部分时间应该是 0,但我们的大部分时间似乎都保持在 300-1100 之间。只有当系统上的用户很少时,计数器才会变为 0。

如何缩小导致 tempdb 上 DDL 争用的范围,而不必在大海捞针中寻找针头?

performance sql-server-2005 sql-server ddl tempdb

9
推荐指数
3
解决办法
1224
查看次数

并行最佳实践

一般设置并行性的最佳实践是什么?我知道 SQL Server 默认0使用所有可用的处理器,但是在什么情况下您要更改此默认行为?

我记得在某处读到过(我必须寻找这篇文章),对于 OLTP 工作负载,您应该关闭并行性(将 maxdop 设置为1)。我不认为我完全理解你为什么要这样做。

您什么时候将 maxdop 保持到 SQL Server (0)?您何时会关闭并行性 (1)?您何时会明确说明特定数量的处理器的 maxdop?

什么导致并行?

sql-server best-practices parallelism

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

尽管总是说作业成功,但计划备份任务并不总是备份所有数据库

我在 SQL 2008 中有一份工作,它运行一个存储过程来备份所有数据库。这通过 sql server 代理作业每天运行。

它每天都成功退出,但有时只有在备份了几个数据库后才成功退出。每次可以是不同数量的数据库。大多数情况下,它会成功备份所有数据库,但有时会成功备份 2 次,有时会成功备份 5 次,等等。

我在作业历史记录、事件查看器或 sql server 日志中没有看到任何错误。

备份是在本地磁盘上进行的,尽管该文件夹是可扩展存储卷上文件夹的“连接点”。

操作系统是 Windows 2003 64 位运行 Sql Server 2008 网络版 64 位作为在 Vmware ESXi 5 主机上运行的虚拟机。

存储过程:

ALTER PROCEDURE [dbo].[backup_all_databases] 
@path VARCHAR(255)='c:\backups\'

AS

DECLARE @name VARCHAR(50) -- database name  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 
DECLARE @dbIsReadOnly sql_variant -- is database read_only?
DECLARE @dbIsOffline sql_variant -- is database offline?

DECLARE db_cursor CURSOR FOR  
SELECT name …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server backup

9
推荐指数
2
解决办法
1165
查看次数

代码在临时运行与在存储过程中创建不同的计划

我有一个删除语句,它在存储过程中运行时使用了一个错误的计划,但在临时运行时选择了一个更好的计划。

我已经为查询使用的表重建了所有索引并删除了所有缓存。优化器仍然为存储过程选择了错误的计划。

我想知道为什么优化器对存储过程使用不同的执行计划而不是临时 SQL。

更新:我想它毕竟一定是参数 - 当我运行带有硬编码变量的临时代码时,我可以获得具有正确值的“坏”计划(它是一个日期,值是一岁似乎产生了“好”的计划)。现在尝试通过使用查询提示在 proc 上强制执行“好”计划。

解决方案:我最终通过使用 OPTIMIZE FOR UNKNOWN 提示获得了我想要的计划。

sql-server execution-plan

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

如何释放 SQL Server 内存?

我在本地计算机上安装了 SQL Server 沙箱。我已将 SQL Server 实例可以使用的内存设置为 1000 mb。运行密集操作时,内存使用量上升到 1000 mb。当操作结束时,SQL Server 仍然持有内存。如何释放这个内存预留?

sql-server memory

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

SQL Server - 非阻塞选择语句的隔离级别是什么?

我有一个长时间运行的事务(称为 T1),它对 SQL Server 2008 R2 中的表执行一些删除、更新和插入操作。同时,另一个进程会定期从该表中运行 select 语句。

在默认隔离设置下(我认为是 READ COMMITTED?),T1 会阻止任何 select 语句运行,直到事务提交或回滚。

我希望看到的是,即使在事务正在进行时,select 语句也能对一致的数据起作用。我相信 SNAPSHOT 隔离可以提供帮助,但不确定我是否朝着正确的方向前进。这是该应用程序的最佳隔离级别吗?

其次,我无法控制调用 select 语句的进程,但我可以控制调用 T1 的 .NET 应用程序。select 语句和 T1 都需要更改任何隔离级别,还是仅将 T1 标记为具有不同的隔离级别就足够了?

sql-server transaction locking isolation-level

9
推荐指数
2
解决办法
6720
查看次数

如何使用 UUID 的默认值创建唯一列

我有一个供内部使用的键列,它只是一个递增的整数,但我想要第二个唯一的列,它是一个 UUID,但我不知道如何调用默认值的函数(以便 SQL服务器正在创建 UUID 而不是 java),有没有可以为此向我建议的文档?

sql-server-2005 sql-server

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

如何截断 SQL Server 2008 数据库中的事务日志?

如何截断 SQL Server 2008 数据库中的事务日志?

什么是可能的最佳方法?

我从博客中尝试了以下方法:

1)从设置数据库到简单恢复,缩小文件,再设置完全恢复,实际上是丢失了宝贵的日志数据,无法及时恢复。不仅如此,您还将无法使用后续日志文件。

2) 缩小数据库文件或数据库增加碎片。

你可以做很多事情。首先,使用以下命令开始进行适当的日志备份,而不是截断它们并经常丢失它们。

BACKUP LOG [TestDb] TO  DISK = N'C:\Backup\TestDb.bak'
GO
Run Code Online (Sandbox Code Playgroud)

删除 SHRINKING 文件的代码。如果您进行适当的日志备份,您的日志文件通常(同样通常,特殊情况除外)不会变得很大。

sql-server logs

9
推荐指数
3
解决办法
7万
查看次数

有没有办法确保执行 SQL Server 触发器?

我的主管对在流程中使用触发器犹豫不决,因为如果恰逢网络中断,流程将无法完成。SQL Server 是否在调用过程的事务中包含触发器?如果没有,实现这一点的最佳方法是什么?

trigger sql-server

9
推荐指数
2
解决办法
5059
查看次数