标签: sql-server

扩展事件过滤

我正在尝试使用登录名在扩展事件过滤中创建跟踪,在探查器中我们可以使用登录名进行过滤,但我在 XE 中看不到该选项。我怎么做?

sql-server extended-events

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

SQL Server 2014 压缩和最大行大小

我需要创建包含大量小数 (26,8) 列的宽非规范化表(少于 1024 列限制,大多数列将为空或零)。我知道每行限制为 8060 字节,因此我尝试使用页面压缩创建表。下面的代码创建表,插入一行并查询行大小。行大小远低于限制,但如果我尝试向表中再添加一个小数 (26,8) 列,操作将失败并显示错误“创建或更改表 't1' 失败,因为最小行大小为 8074,包括 1256字节的内部开销。”。有没有办法创建具有这么多列的单个表?

drop table t1
GO
create table t1(c1 decimal(26, 8) null)
with (data_compression = page)
GO

declare @i int = 2;
declare @sql varchar(100);
while @i <= 486
begin
    set @sql = 'alter table t1 add c' + convert(varchar, @i) + ' decimal(26, 8) null';
    execute (@sql);
    set @i += 1;
end;
GO


insert into t1(c1) select 0
GO
declare @i int = 2;
declare @sql varchar(100);
while …
Run Code Online (Sandbox Code Playgroud)

sql-server database-internals compression sql-server-2014

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

尝试连接到 sql server 2008 时出现“必须信任计算机才能进行委派,并且当前用户帐户必须...”错误

我们的管理员使用 Visual Studio 2015 设置了一个全新的 Windows 2012 R2 服务器。当我尝试从 Visual Studio 连接到现有的 sql server 2008 数据库(在 Windows 2008 r2 服务器上运行)时,使用Tools-> Connect to database...,我可以输入所有信息,对话框检索数据库列表,Test Connection工作,但当我点击ok我得到:

必须信任计算机进行委派,并且必须将当前用户帐户配置为允许委派

两台服务器都在同一个域(开发)下,我是它们的本地管理员。我的帐户虽然位于可以访问开发域的不同域上。

有想法该怎么解决这个吗?他们是指消息中的 windows 2012 服务器还是数据库服务器?

顺便提一下,我可以使用相同的 Windows 帐户从另一个 Windows 2008 r2 服务器成功连接。

更新:失败的连接使用 Windows 身份验证。

sql-server-2008 sql-server windows-server

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

恢复 Sql Server 数据库的最快方法

在清理阶段,我们的 10000 个集成测试中的每一个都需要在每个集成测试完成之前将数据库恢复到其原始的“干净”状态。运行所有测试需要时间,80% 的时间花在数据库还原操作期间。

恢复操作只是从光盘中获取备份并恢复它。我现在想知道是否有办法优化这一点。我正在考虑的一种选择是将备份文件的位置从磁盘更改为内存。那可能吗?

另一种选择是仅拍摄表数据的快照,并仅将其保存为备份数据。我假设备份文件变得更小,因此恢复速度更快。那可能吗?

理想情况下,我希望避免恢复,而只是重置受影响的数据(每个测试产生的数据)。类似于:“恢复自测试开始以来修改过的任何表行”

我有哪些选择?我不是这方面的专家,但感觉我的问题应该有一个简单的解决方案。

sql-server backup restore

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

循环与需求并行分区

这与在带有嵌套循环的查询之上有一个公共密钥驱动程序有关,并且来自驱动程序的行的并行性是需求类型或循环类型。我会假设需求分区会表现得更好,但我得到了相反的结果。

我在 SQL Server 中的同一次尝试中同时启动了查询。当我监控的查询运行时dm_exec_query_profilesdmv 不断。我注意到循环版本的启动速度要快得多,它们在 dmv 的表插入部分中插入更多行的速度要快得多,而且它们从驱动程序侧并行性部分更快地获取更多行。从逻辑上思考需求分区应该更有利,因为我们的 SQL 服务器通常超过 50-60% 的 cpu,运行 litespeed 备份,有 64 个内核等。我能够通过循环分区更好地平衡线程上处理的行,还有数据分区内是如此不平衡我注意到需求分区中的一些线程仅处理来自驱动程序的 1 条记录,而来自驱动程序的平均记录大约为 196。通过需求分区,我对分区内的行进行降序排序,而在循环中我尝试更好地平衡行。

我是否应该始终使用循环法,为什么循环法开始处理行的速度比需求分区快得多,我可以对需求分区进行更多优化吗?

查询计划位于 One Drive 链接中,我找不到在此处发布它们的另一种方式(pastetheplan 仅接受 xml,它不捕获计划资源管理器捕获的等待统计信息和持续时间等额外信息)。


CompareRoundRobinToDemand_DM_2_5114.pesession CompareRoundRobinToDemand_RRB_2_3046.pesession

同时开始,Round Robin 的速度要快得多


CompareRoundRobinToDemand_DM_3_5228.pesession CompareRoundRobinToDemand_RRB_3_4367.pesession

同时开始,Round Robin 又快了


CompareRoundRobinToDemand_DM_4_4813.pesession CompareRoundRobinToDemand_RRB_4_3577.pesession

同时开始,Round Robin 又快了

先感谢您。

监控运行会话 查询计划

SQL Server 版本和运行跟踪

我能够平衡几乎完美的循环行,而对于需求,我只是按行降序排列驱动程序,平衡需求中的行是我的程序中的一个选项,但没有产生更好的结果。在我的观察中,当整体 CPU 使用率较低时,需求表现更好,而当服务器更忙时,轮询表现更好。我注意到与循环相比,需求创建了一个额外的线程,而且总体 CPU 利用率需求略高于类似的 RRB 版本。

我知道需求中的行分布不平衡。内存授予也是故意的,它最终没有使用那么多内存。从驱动程序传递的前 16 条记录的需求与循环法相同,但循环法由于某种原因开始处理它们的速度要快得多。我想明白为什么。我还想了解什么时候使用需求或循环法更有利。似乎当服务器空闲时需求工作得更快,当服务器有现有负载时循环更快,这是迄今为止的观察,这是否有我不知道的基础。

sql-server parallelism partitioning

8
推荐指数
2
解决办法
1273
查看次数

在 SQL Server 2016 及更高版本上重建中的错误?

问题总结

即使在REBUILD索引之后,碎片聚集索引也表现不佳。如果索引是,REORGANIZED则给定表/索引的性能增加。

我只在 SQL Server 2016 及更高版本上看到这种异常行为,我已经在不同的硬件和不同的版本上测试了这种情况(所有个人机器都具有传统的旋转硬盘)。如果需要更多信息,请告诉我。

这是 SQL Server 2016 及更高版本中的错误吗?


如果有人愿意,我可以提供完整的详细信息和脚本分析,但现在不提供,因为脚本非常大并且会在问题中占用大量空间。

如果您有 SQL Server 2016 及更高版本,请在您的 DEV 环境中测试从下面提供的链接中获取的示例脚本的较短版本。

脚本

-- SECTION 1
/*
Create a Test Folder in the machine and spefiy the drive in which you created
*/
USE MASTER

CREATE DATABASE RebuildTest
ON 
( NAME = 'RebuildTest',
    FILENAME = 'F:\TEST\RebuildTest_db.mdf',
    SIZE = 200MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 50MB )
LOG ON
( NAME = 'RebuildTest_log',
    FILENAME = 'F:\TEST\RebuildTest_db.ldf',
    SIZE = 100MB, …
Run Code Online (Sandbox Code Playgroud)

performance sql-server database-internals

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

为什么 SQL 尝试转换被我的 where 子句排除的行?

我已经多次遇到过这种情况,我相信这是有充分理由的 - 但我该如何避免呢?

我确定这与周围的怪癖有关isnumeric。在英语中,我有一个过滤isnumeric(somefield) = 1. 然后我尝试int在我的where子句中使用 an 来查询它,因为表中的其他一些字段有字符值,所以整个事情都失败了。

我创建了一个显示错误的SQL 小提琴

我尝试cast/convert在视图的 select 中执行 a ,但查询引擎似乎忽略了它。

那么 - 为什么会发生这种情况,有没有一种干净的方法来处理它?

由于我在插入物上缺少引号,原始小提琴有一个非常相似的错误。这不是我试图强调的问题。我通过为所有插入的值添加引号来修复视图。

sql-server view type-conversion

8
推荐指数
2
解决办法
2537
查看次数

SQL Server 2016 是否仍然包含 sqlmaint.exe?

根据文档(SQL Server 2016 中已弃用的数据库引擎功能),sqlmaint.exe应该仍然可用(强调我的):

本主题介绍了SQL Server 2016仍然可用的已弃用的 SQL Server 数据库引擎功能。这些功能计划在SQL Server的未来版本删除

...

工具:sqlmaint Utility ...

这是绝对没有列出的上的停止使用的功能列表

但是,我sqlmaint.exe在最近安装的 SQL Server 2016 Express 系统上找不到。在以前的版本中,它与sqlserver.exe.

文档有错吗?还是文件位置移动了?还是我在安装过程中遗漏了什么?

(注意:受到重现此问题的评论的鼓励,我为此创建了一个Microsoft Connect 条目,该条目已迁移到UserVoice。)

sql-server sql-server-tools sql-server-2016

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

从 varbinary(max) 清空数据后缩小数据库的最佳方法?

我们有一个数据库,在varbinary(max)类型的字段中存储了大量数据。在某些时候,我们可以清除大多数行的数据,但不是全部。我们的计划是使该字段可以为空,并在不再需要数据时将其清空。一旦我们这样做,我们希望减少数据库的大小。实现这一目标的最佳方法是什么?

如果没有使用当前设置回收空间的好方法,我的一个想法是将该数据字段移动到只有两列的单独表:主表的键和数据字段。然后我们可以简单地删除不再需要的行。(然后进行某种收缩。)但是,这比简单地使现有字段可空要困难得多。

注意:我实际上不太关心使数据库文件变小,但我确实关心新释放的空间变得可重用。

超过 90% 的数据库大小是这一字段。我已经在 3TB 了。

sql-server disk-space blob varbinary sql-server-2014

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

将 SSMS 中的“未连接”查询窗口重新连接到原始连接

是否有一种简单的方法可以重新连接“未连接”到该查询使用的原始连接的查询窗口,而无需手动选择所需的服务器名称?如果我单击 SQL 编辑器工具栏上的“连接”按钮或右键单击 -> 连接 -> 连接...,它会将服务器名称默认为我在该 SSMS 会话中使用的最后一个连接,而不是该特定查询窗口使用的最后一个连接.

在一天结束时将我的笔记本电脑带回家后,所有打开的窗口将在我下次使用时设置为未连接。理想情况下,我希望能够将所有连接重新连接到它们的原始连接,但我不知道即使一次一个查询也是可能的。

sql-server ssms connectivity

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