小编Mic*_*elD的帖子

删除域后镜像问题

我成功地在两台服务器之间创建了一个带有证书的镜像。其中一台服务器是域控制器。删除域后,镜像中断。经过数小时的搜索,我重新安装了 SQL Server,希望所有可能的域删除问题都消失了,但镜像仍然拒绝工作。我不断收到模糊的错误:

消息 1418,级别 16,状态 1,第 1 行 服务器网络地址“TCP://...”无法访问或不存在。检查网络地址名称以及本地和远程端点的端口是否可操作。

如果我检查镜像服务器的事件日志,我会看到 2 个错误:

  1. 加密操作失败。此错误表明 SQL Server 存在严重问题。检查 SQL Server 错误日志和 Windows 事件日志以获取更多信息。
  2. 在 Service Broker 或数据库镜像操作期间系统加密调用失败:系统错误“5(无法检索此错误的文本。原因:15105)”。

任何想法/建议?

sql-server-2008 sql-server mirroring

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

是否有选项或提示可以提高“in”子句中具有多个值的查询的性能

我们有一个表 CustomerNote,有 4 列 ID、CustomerID、Note、Date

CustomerID asc, Date desc 上有一个索引

当执行以下查询时

select top 30 
    Date 
from CustomerNote
where CustomerID in (1,5)
order by Date desc
Run Code Online (Sandbox Code Playgroud)

使用了索引,但它仍然获取 customerID 1 和 5 的所有 CustomerNote,然后排序/置顶,导致大量 CPU 使用。 在此输入图像描述

这是由于“in”子句中的多个值造成的。我知道“in”子句的值永远不会超过 10 个,因此如果 sql server 迭代 10 个,为每个 customerID 获取至少 30 个值并进行合并、排序和顶部,这将是一个更好的方法。是否有查询提示或选项可以实现此目的?

performance sql-server execution-plan execution

6
推荐指数
2
解决办法
1275
查看次数

未使用空间索引

我有一个带geometry列的表。对于一个记录,只Point存储一个。已创建空间索引,但搜索最近位置的查询不使用此索引,从而导致性能不佳。

示例脚本:

--Create the table
create table Location(
    LocationID int not null identity(1,1) primary key,
    LocationPoint geometry
)


--add records
declare @counter int =0
WHILE @counter<150000
BEGIN
    set nocount on
    --select 
    set @counter =@counter +1
    declare @RandomLocation geometry=geometry::Point(RAND() *1000, RAND() *1000, 0)     
    insert into Location(LocationPoint) values  (@RandomLocation)   
END

--create index
CREATE SPATIAL INDEX SPATIAL_StructureBE ON dbo.Location(LocationPoint)
USING GEOMETRY_GRID WITH ( 
    BOUNDING_BOX  = (xmin  = 0.0, ymin  = 0.0, xmax  = 1000, ymax  = 1000), 
    GRIDS = …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server spatial query-performance

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

添加列时环境之间的性能差异

我们有 2 个完全相同的数据库环境。第二个环境包含生产数据库的副本并在发票表中托管大约 11M 条记录。此环境的目标是用于查看特定升级查询需要多长时间才能知道是否会出现任何停机(因为表在架构更改期间被锁定)

在第二个环境中执行 add 语句时

alter table Invoice add IsVerified bit not null default(0)
Run Code Online (Sandbox Code Playgroud)

查询立即退出,这很奇怪,因为里面有11M条记录。我预计至少会有一点延迟。即使是 select count(*) 也需要更长的时间。然而,在主生产数据库上,它需要更长的时间,超过 30 秒,因此我们必须将此查询计划到一个特殊的维护窗口中。执行查询时,没有任何东西阻止 SPID(使用 sp_who2 检查)

可能是什么原因,数据库的第二个副本似乎根本没有在 11M 记录数据库中添加列,而另一个主数据库无法及时完成(<30 秒)。也许一些特殊设置允许您添加默认值列而不需要写入所有记录?难道是因为我们的测试环境是Developer版而生产环境是Standard版?也许开发版中的某些特殊功能在 SQLStandard 中未激活?

select count(*) from Invoice //result: 11701200
SQL Server Execution Times:
   CPU time = 2375 ms,  elapsed time = 608 ms.
Run Code Online (Sandbox Code Playgroud)

要添加的脚本:

alter table Invoice add IsVerified bit not null default(0)
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2019

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