标签: sql-server-2014

连接已断开且无法恢复 - sql server 错误

我在创建 tempDB 文件时遇到以下 sql server 错误。有任何想法吗?

在此输入图像描述

连接已断开且无法恢复。客户端驱动程序尝试恢复连接一次或多次,但所有尝试均失败。增加 ConnectRetryCount 的值可增加恢复尝试的次数。(微软 SQL Server,错误:0)

sql-server permissions tempdb connectivity sql-server-2014

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

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

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

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

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

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

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

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

根据特定公式找到最小的缺失元素

我需要能够从具有数千万行的表中找到缺失的元素,并且有一个BINARY(64)列的主键(这是要计算的输入值)。这些值大多按顺序插入,但有时我想重用已删除的先前值。用IsDeleted列修改已删除的记录是不可行的,因为有时插入的行比当前存在的行高数百万个值。这意味着示例数据将类似于:

KeyCol : BINARY(64)
0x..000000000001
0x..000000000002
0x..FFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

因此在0x000000000002和之间插入所有缺失值0xFFFFFFFFFFFF是不可行的,使用的时间和空间量将是不可取的。本质上,当我运行算法时,我希望它返回0x000000000003,这是第一个开口。

我在 C# 中提出了一个二进制搜索算法,它将查询数据库中位置的每个值i,并测试该值是否是预期的。对于上下文,我可怕的算法:https : //codereview.stackexchange.com/questions/174498/binary-search-for-a-missing-or-default-value-by-a-given-formula

例如,该算法将在具有 100,000,000 个项目的表上运行 26-27 个 SQL 查询。(这看起来并不多,但它会非常频繁地发生。)目前,该表中大约有 50,000,000 行,性能变得很明显

我的第一个替代想法是将其转换为存储过程,但这有其自身的障碍。(我必须编写一个BINARY(64) + BINARY(64)算法,以及大量其他东西。)这会很痛苦,但并非不可行。我也考虑过实现基于的翻译算法ROW_NUMBER,但我对此有一种非常糟糕的直觉。(BIGINT对于这些值,A几乎不够大。)

我愿意接受其他建议,因为我真的需要尽快解决这个问题。值得一提的是,C# 查询选择的唯一列是KeyCol,其他列与此部分无关。


此外,对于它的价值,获取适当记录的当前查询是这样的:

SELECT [KeyCol]
  FROM [Table]
  ORDER BY [KeyCol] ASC
  OFFSET <VALUE> ROWS FETCH FIRST 1 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

<VALUE> …

t-sql sql-server-2014 where

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

存储 HASHBYTES('MD5', ...) 结果的最佳数据类型

存储结果的最佳数据类型是HASHBYTES('MD5', ...)什么?

它输出 16 字节的二进制如下:例如

0x5CFCD77F9FF836189D2F647EBCEA183E
Run Code Online (Sandbox Code Playgroud)

我可以将它存储在以下数据类型中:

  • char(34)
  • binary(16)(我认为 - 我在这里读到(/sf/ask/1030561381/#16680423)使用相同的算法应该返回无论输入字符串如何,每次都具有相同数量的字节)
  • 其他?

每行都有一个值(没有空值),并且该列将用于与另一个表中的类似列进行比较。

哪种数据类型用于存储HASHBYTES上述使用的输出的最佳数据类型?

我在想,因为固定长度的数据类型有时在连接等方面可能更有效。binary(16)vs varbinary(8000)(的默认输出HASHBYTES)似乎最好,而binary(16)vs avarchar(34)更好,因为它会使用更少的存储空间。

sql-server datatypes sql-server-2014 hashing

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

数据库级锁

我有一个 SQL Server 2014 的生产实例,我需要对其进行一些轻度维护。

本质上,我需要在单个事务中替换两个整个表的内容。我想防止任何人在数据更改正在进行时查询任一表。桌子很小,我希望操作不到几秒钟。

不幸的是,我没有为此安排停机时间的好处。

所以问题是如何一次锁定多个对象 - 甚至整个数据库?

理想情况下,我可以简单地获取数据库级锁,进行更改,然后释放锁,但这在 SQL Server 2014 中似乎是不可能的。

sql-server locking sql-server-2014

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

Microsoft 是否更改了有关文件数量和并行度的查询优化器

Microsoft 是否更改了有关文件数量和并行度的查询优化器?优化器是否不再考虑文件数量来确定查询的并行度?如果是这样,有人知道更改是什么时候进行的吗?如果没有,任何人都可以提供指向讨论该主题的 Microsoft 文档的链接(SQL Server 2014 或 2016 的当前文档)?

sql-server optimization parallelism sql-server-2014

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

SQL Server Profiler:为什么 RPC 启动事件使用与 SP 启动不同的小数分隔符?

试图诊断一个问题,我遇到了这种不一致。在 SQL Server Profiler 中,RPC Starting事件使用区域设置来写入实数(例如:在葡萄牙语(巴西)14.5 中将表示为 14,5)。通常这不是问题,除非 RPC 调用是带有实数参数的存储过程。那么期望表达为:

exec usp_something 'blabla', 14.5
Run Code Online (Sandbox Code Playgroud)

表示为:

exec usp_something 'blabla', 14,5
Run Code Online (Sandbox Code Playgroud)

当你有一个很长的参数列表时,这会让人很头疼。没有在网上找到任何线索如何改变这种行为。

有人知道改变这种行为的方法吗?

顺便说一句:我知道解决方法是改用SP Starting事件,它使用 '.' 为小数点分隔符。

sql-server-2008 sql-server profiler sql-server-2014

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

系统重启后 SQL Server 服务未自动启动

我有一个每周重新启动的 SQL Server 系统(安装 Windows 更新后)。

在过去的三周里,我看到 SQL Server 服务在服务器恢复时没有启动(配置管理器显示该服务已停止),系统事件日志显示以下错误:

事件 ID 7000

由于以下错误,SQL Server (MSSQLSERVER) 服务无法启动:该服务没有及时响应启动或控制请求。

事件 ID 7001

SQL Server 代理 (MSSQLSERVER) 服务依赖于由于以下错误而无法启动的 SQL Server (MSSQLSERVER) 服务:该服务没有及时响应启动或控制请求。

事件 7009

由于以下错误,SQL Server (MSSQLSERVER) 服务无法启动:该服务没有及时响应启动或控制请求。

但是,我可以手动启动该服务并且它可以正常启动。

该服务设置为自动启动。

不幸的是,SQL Server 错误日志也不包含任何线索。

sql-server windows-server sql-server-2014

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

SQL Server 2014 的 MAXDOP 设置

我知道这个问题已经被问过很多次了,也有答案,但是,我仍然需要更多关于这个主题的指导。

以下是来自 SSMS 的我的 CPU 的详细信息:

中央处理器

下面是数据库服务器任务管理器中的 CPU 选项卡:

CPU选项卡

MAXDOP通过以下公式将 的设置保持在 2:

declare @hyperthreadingRatio bit
declare @logicalCPUs int
declare @HTEnabled int
declare @physicalCPU int
declare @SOCKET int
declare @logicalCPUPerNuma int
declare @NoOfNUMA int
declare @MaxDOP int

select @logicalCPUs = cpu_count -- [Logical CPU Count]
    ,@hyperthreadingRatio = hyperthread_ratio --  [Hyperthread Ratio]
    ,@physicalCPU = cpu_count / hyperthread_ratio -- [Physical CPU Count]
    ,@HTEnabled = case 
        when cpu_count > hyperthread_ratio
            then 1
        else 0
        end -- HTEnabled
from sys.dm_os_sys_info
option (recompile);

select …
Run Code Online (Sandbox Code Playgroud)

sql-server configuration maxdop sql-server-2014

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

为什么不建议将 RAID 5 用于日志文件?

在阅读Grant Friitchey 编写的SQL Server Query Performance Tuning 时,我发现很难理解以下部分:避免 RAID 5 用于 t-logs 因为,对于每个写入请求,RAID 5 磁盘阵列产生的磁盘 I/O 数量是比较的两倍到 RAID 1 或 RAID 10。

我知道 RAID 5 通过奇偶校验功能区别于其他 RAID。这意味着如果某些驱动器出现故障,则可以从其他驱动器恢复丢失的数据。我想了解为什么不建议将 RAID 5 用于事务日志文件。书中的解释对我来说还不够。也许有人可以向我解释或提供一篇好文章。

performance transaction-log sql-server-2014 raid query-performance performance-tuning

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