标签: sql-server

重新启动Windows会重新启动SQL Server吗?

重新启动Windows是否也会重新启动SQL Server?

长话短说,我刚刚进行了更改,以便 SQL Server 和 Windows 身份验证用户都可以登录。服务器需要重新启动才能使更改生效,我可以只重新启动计算机而不是服务器吗?

我的服务器存在配置问题,我想更改其中一项设置,以便 SQL 凭据也可以登录(而不仅仅是 Windows 身份验证)。我的管理员说您可以进行任何更改,但不要重新启动 SQL Server。我问我可以重新启动SQL Server所在的Windows服务器吗,他说可以。

重新启动计算机与重新启动 SQL Server 的作用不一样吗?

sql-server windows-server

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

SQL Server 的 is_nullable 有什么意义吗?

SQL Server 有一个类型标志,称为is_nullable您可以在 上看到它sys.types。目前,(SQL Server 2019)它只设置为FALSE两种类型,sys.timestamp和sys.sysname. 对sys.timestamp这种类型似乎接受null。在sys.sysname它没有。这种行为有什么解释吗?

你可以看到这些类型

SELECT * FROM sys.types WHERE is_nullable = 0;  
SELECT TYPEPROPERTY('timestamp', 'AllowsNull');  -- returns 0
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它,

CREATE TABLE foo ( a sys.timestamp );
INSERT INTO foo (a) VALUES ( null );
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用,这将不起作用 sys.sysname

Msg 515 Level 16 State 2 Line 1
Cannot insert the value NULL into column 'a', table 'dbo.foo'; column does not allow nulls. INSERT …
Run Code Online (Sandbox Code Playgroud)

null sql-server datatypes metadata sql-server-2019

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

与数据库正常运行时间相关的估计恢复时间和重做队列大小

有人可以帮我弄清楚我的理解是否正确:

在我的可读辅助副本的 AG 仪表板上,我看到:

  • 预计恢复时间(秒) - 4598
  • REDO 队列 - 将近 24 GB

那么,如果我的辅助 AG 需要将节点/故障转移或 SQL 重新启动作为活动的一部分,这究竟意味着什么?

这是否意味着我的二级数据库需要 4598 秒才能使用 24 GB 的重做队列启动这个数据库?

我很担心,因为我们的一个生产秒方在白天的大部分时间里重做大小为 400 GB,而从 AG 仪表板恢复时间将近 10 小时。这是否意味着所谓的 DR 受到了损害?


我刚刚做了一个测试故障转移,正如我从错误日志消息中看到的那样,数据库按预期进行了恢复,并看到它在 1235 秒内完成。只是好奇,因为估计恢复的数量还差得很远。这只是为了解释我的业务用户帮助他们我们正在谈论的中断窗口。

sql-server high-availability availability-groups sql-server-2017

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

聚集索引与表本身有何不同?

如果 SQL Server 聚集索引是表的物理顺序,并且包含所有列,那么它是表本身吗?聚集索引是如何物理存储的?

我看过问答什么是聚集索引?但我的问题是关于这些的物理组织,而不是它们的功能。

sql-server clustered-index

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

以强制恢复模式启动 SQL Server 数据库

从磁盘映像快照还原时,我想强制SQL Server 数据库进入恢复模式。有什么建议可以强制恢复单个或一组数据库,以便可以应用其他事务日志?

sql-server snapshot recovery

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

SQL Server 如何从开始日期和结束日期在 6 个月前的表中进行选择

所以我有一个表,其中包含以下 select 语句中列出的一些列。

SELECT [AccountName], 
       [AccountNumber], 
       [Tenor], 
       [Currency], 
       [TotalCredit], 
       [TotalDebit], 
       [CreditCount], 
       [DebitCount], 
       [AccountBalance], 
       [StatementStartDate], 
       [StatementEndDate] 
  FROM [TAF.EligibilityService].[dbo].[AccountStatements]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想使用StatementStartDate和StatementEndDate选择 6 个月前和今天之间存在的记录。

例如,如果开始日期是 1 年前,只要结束日期还在 6 个月前,就应该返回记录。

提前致谢。

sql-server

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

何时根据服务器上的内存量对 SQL Server 中的表进行分区

我知道表分区主要是为了数据管理。我知道大表的表维护变得更加困难,因为例如索引重建不能适应内存或因为例如使用 O(n*log(n)) 对比例进行排序,这会导致大表出现额外问题。

有人可以举一些例子,相对于服务器上的内存量,一个表应该有多大才能成为分区的明确候选者?假设表大于 RAM 量。不分区表是不好的做法吗?

我正在寻找一些可以作为分析依据的原则。

在下面的答案中链接到的文章中,它还提到:

  • 长期运行的索引维护作业(或无法在所有运行他们,因为他们会花这么长时间)的参考。

所以我想我的问题可以表述为:考虑到硬件规格,当 SQL Server 没有分区时,SQL Server 何时开始出现行存储索引重建问题?

我不相信“这与桌子的大小无关”。当索引无法重建时,我会说分区与表的大小非常相关。

sql-server partitioning

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

如果表存在而不使用 sp_executesql 更新表中的行

我有一种情况,我需要对大量类似的数据库运行查询。他们中的大多数人都会有一个表,我需要更新其中的一些行,但其中一些人没有该表。

我想编写一个查询,该查询具有IF检查表是否存在EXEC sp_executesql的UPDATE语句,而无需使用该语句。有没有办法在 SQL Server 中做到这一点?

这是我今天正在做的一个例子:

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[MyTableName]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
  -- this is what I want to be able to do but cannot
  UPDATE [dbo].[MyTableName] SET [SomeColumn] = NULL WHERE [SomeColumn] NOT IN (1, 2, 3)

  -- this is the only way I know to do this without an error
  EXEC sp_executesql N'UPDATE [dbo].[MyTableName] SET [SomeColumn] = NULL WHERE [SomeColumn] NOT …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2017

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

在 cast/convert 中使用 varchar(max) 而不是 varchar(n) 对性能有什么影响吗?

考虑以下表达式,它从日期时间值截断(不舍入)毫秒数:

declare @now datetime2 = sysdatetime();
select @now;
select convert(datetime2, convert(varchar(20), @now, 120));

-- Output
2021-07-30 09:38:33.5566666
2021-07-30 09:38:33.0000000
Run Code Online (Sandbox Code Playgroud)

请注意varchar(20). 我不喜欢那个特定的长度值,因为如果我应该更改我的数据类型,可能会丢失数据:

declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(20), @now, 120));

-- Output
2021-07-30 02:39:12.7200000 -07:00
2021-07-30 02:39:12.0000000 +00:00 -- oops, we lost the time zone too!
Run Code Online (Sandbox Code Playgroud)

因此,我更愿意使用以下内容:

declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(max), @now, 120)); -- note …
Run Code Online (Sandbox Code Playgroud)

performance sql-server datatypes

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

SQL Server 不使用 OPTION(MAXDOP 20)创建并行计划

我们在具有 8 个套接字和 20 个处理器的 VM 上托管了一个 UAT3 服务器,我们在具有相同配置的同一 VM 上托管了类似的 UAT2 服务器。

我们在两个服务器上运行以下查询

select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)

两个服务器具有相同的数据和相同的结构。

UAT2 和 UAT3 具有默认设置并行度5 和最大并行度的成本阈值0。

IN UAT2 服务器并行处理正在发生。它需要 10 秒才能完成,但 UAT3 串行处理正在发生,因为它需要 3 分 30 秒。

我们比较 UAT2 和 UAT3 服务器配置都相同。不知道为什么 SQL Server 在 UAT2 中选择并行执行而不是在 UAT3 中。

下面是表定义

select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)

下面是视图

CREATE TABLE [dbo].[FKMB_CUSTOMER]( 
    [RECID] [nvarchar](64) NOT NULL, 
    [XMLRECORD] [xml] NULL, 
    [ALT_CUSTOMER] AS 
        ([dbo].[IX_CUSTOMER_ALT_CUSTOMER]([XMLRECORD])) 
        PERSISTED, 
    [SMS] AS 
        ([dbo].[IX_CUSTOMER_SMS_1]([XMLRECORD])) …
Run Code Online (Sandbox Code Playgroud)

sql-server parallelism execution-plan query-performance

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