标签: sql-server-2016

SQL Server 突然使用索引扫描而不是查找

我们有一个每天运行的存储过程。在其中一个子查询(执行计划中的查询 20)中,SQL Server 在 2021 年 9 月 24 日之前一直使用索引查找。但突然间,当查询在 2021/09/25 运行时,SQL Server 在同一步骤开始使用索引扫描。

以下是 2021 年 9 月 24 日执行搜寻的计划

2021/09/24查询计划 寻求2021/09/24手术

以下是 2021 年 9 月 25 日 SQL Server 执行索引扫描的计划

2021/09/25查询计划 2021/09/25 扫描操作

EMAIL_SENDS_CCMP_LTD 表是一个相当大的表,下面是该表的空间使用数据

EMAIL_SENDS_CCMP_LTD 统计信息

以下是上面突出显示的存储过程中的查询 -

insert into  TALBOTS_BASE.dbo.EMAIL_ACTIVITIES
(EMAILTYPE,INTSOURCE,EMAIL,ACCTNO,FNAME,LNAME,EMAILDATE,DNEFLAG,SOURCE_CD,CREATE_ID,EMAILPREF,HASH,FILENAME,SEQ,FILEDATE,MODDATE,IPADDRESS,HAV_EMAILDATE)
SELECT 
      'OPEN' AS EMAILTYPE
      ,'CCMP' AS INTSOURCE 
      , a.[P_email] AS EMAIL
      ,'' AS ACCTNO
      ,'' AS [FNAME]
      ,'' AS [LNAME]
      ,CASE WHEN ISNULL(c.Subchannel,'')<>'HWW' 
       THEN
            CASE WHEN ISDATE([click_time])=1 THEN CAST([click_time] AS DATE) ELSE NULL END
      ELSE NULL
      END AS EMAILDATE
      ,'' as …
Run Code Online (Sandbox Code Playgroud)

sql-server-2016 query-performance

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

log_reuse_wait_desc = AVAILABILITY_REPLICA,日志已 100% 满,但 AG 一切正常

这是一个奇怪的场景。事务日志已满。它等待AG。AG一切都好。无延迟,最后提交/硬化时间在所有节点上几乎都是实时的。预计恢复时间为零。我也从主节点和辅助节点检查了这一点(以防仪表板未更新)。此页面仅列出了此错误的两个原因:传递延迟和重做延迟。没有任何内容适用于我的系统。如何进一步解决这个问题?

编辑 1。我们对环境所做的唯一更改是添加了两个 SQL Server 2019 节点以准备迁移。但它不应该出现这样的问题。

编辑2。我发现的唯一解决方法是将数据库重新添加到AG。

sql-server availability-groups sql-server-2016

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

mslid 上的非聚集索引查找速度很慢

我在 SQL Server 中遇到一个问题,其中非聚集索引查找的性能很差。

下面是实际的执行计划 https://www.brentozar.com/pastetheplan/?id=Sk3-4JGAK

我怎样才能提高绩效?

下面是表定义

 CREATE TABLE [Parts].[ManufacturingData](
     [LeadFinishId] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
     [PartID] [int] NOT NULL,
     [LeadFinishMaterial] [varchar](50) NULL,
     [CreatedDate] [datetime] NULL,
     [CreatedBy] [int] NULL,
     [ModifiedDate] [datetime] NULL,
     [Modifiedby] [int] NULL,
     [DeletedDate] [datetime] NULL,
     [DeletedBy] [int] NULL,
     [Revision_Id] [int] NULL,
     [BaseMaterialID] [int] NULL,
     [MSLID] [int] NULL,
     [MSLSource_Revision_id] [int] NULL,
     [MaximumReflowTemperatureID] [int] NULL,
     [ReflowTemperatureSource_Revision_Id] [int] NULL,
     [MaximumWaveTemperatureID] [int] NULL,
     [WaveTemperatureSource_Revision_ID] [int] NULL,
     [ReflowSolderTimeID] [int] NULL,
     [WaveSolderTimeID] [int] NULL,
     [NumberOfReflowCycleID] [int] NULL,
     [LeadFinishPlatingID] [int] NULL, …
Run Code Online (Sandbox Code Playgroud)

sql-server constraint stored-procedures execution-plan sql-server-2016

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

包含或不包含在索引中

现在的情况

我正在观察一个简单的语句,该语句正在查询一个表并访问多个索引来检索数据:

SELECT DISTINCT 
feld16,
zahl4,
feld12,
feld19 FROM 
object1 WHERE 
(deleted = 0 or deleted IS NULL)
Run Code Online (Sandbox Code Playgroud)

查询执行计划可以在Brent Ozar 的 Paste The Plan网站上找到,图形表示如下:

上述 SELECT 语句的查询执行计划

该表由包含各种数据的 82 列组成。列中数据的分布deleted为:

 deleted | Number of records
---------+-------------------
       0 |        71'620'068
    NULL |                10
 a value |            59'673
Run Code Online (Sandbox Code Playgroud)

结果集包含大约。大约 6400 万行。7100 万行与搜索谓词匹配WHERE (deleted = 0 or deleted IS NULL)。这是因为DISTINCT遗漏了 700 万条记录。

向前走

为了加快速度,我正在考虑添加一个新索引。最初我以为我有足够的知识来添加足够的索引,但我开始重新审视自己。

问题

以下哪个索引定义(可能)是适当的解决方案?

1.不带INCLUDE的索引

CREATE NONCLUSTERED INDEX [IDXNew] ON [schema_owner].[object1]
(
    [deleted] ASC,
    [feld16] ASC,
    [zahl4] …
Run Code Online (Sandbox Code Playgroud)

sql-server index-tuning nonclustered-index sql-server-2016

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

CHECKDB 期间出现错误 665

在我们的服务器上运行 CHECKDB 时,我们遇到了以下错误:

在文件“D:\MSSQL\Data\database1.mdf_MSSQL_DBCC34”中的偏移量 0x00021279006000 处写入时,操作系统向 SQL Server 返回错误 665(由于文件系统限制,请求的操作无法完成)。

正在运行的命令:

DBCC CHECKDB (database) WITH ALL_ERRORMSGS, NO_INFOMSGS, PHYSICAL_ONLY
Run Code Online (Sandbox Code Playgroud)

设置:

  • 生产环境中的5台服务器可用性组

    • 所有具有 NVMe 驱动器的物理服务器
    • SQL Server 2016
    • CHECKDB 在所有机器上运行
    • 仅在 AG 中的服务器 3 和 5(辅助服务器)上失败
      • 每台服务器 D 盘上有超过 700GB 的可用空间
    • 数据库大小为 2.2TB(1 个文件)
  • 测试环境中的2台服务器可用性组

    • 所有具有 SAN 驱动器的虚拟机
    • SQL Server 2019
    • CHECKDB 在所有机器上运行
    • 仅在 AG 中的服务器 1(主服务器)上失败
      • 服务器D盘有超过300GB的可用空间
    • 数据库为 2.6TB(2 个文件 - 2.3TB 和 280GB)

这一切都发生在同一个晚上。生产服务器上的数据库相同,但测试中的数据库不同。当然,我接到电话并开始调查此事。我决定在产品中的服务器 3 上再次运行 CHECKDB,以查找失败的数据库,并且成功且没有错误。此后我们再次收到错误,但它是随机的,这让我怀疑它是否是基于活动的。根据我们的监测,该活动相当正常。

根据本文 ( https://www.mssqltips.com/sqlservertip/3008/solving-sql-server-database-physical-file-fragmentation/ ),我们使用 CONTIG -A 查看了文件碎片。mdf 文件的碎片还不错(2 和 4 个碎片)。

根据这篇文章(https://learn.microsoft.com/en-US/troubleshoot/sql/database-engine/database-file-operations/1450-and-665-errors-running-dbcc-checkdb …

sql-server sql-server-2016 sql-server-2019

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

SQL Server 2016 插件不起作用

最近我在我的 PC 上安装了 SQL Server 2016。

这是我的服务器的详细信息:

Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64)
2016 年 3 月 10 日 16:49:45
版权所有 (c)
Windows 10 Pro 6.3(内部版本10586:)上的Microsoft Corporation企业评估版(64 位)

在我的 PC 上安装服务器后,尝试安装以下插件

  1. 适用于 SSMS V3.6.1 的 SQL 漂亮打印机插件
  2. SQLSentry 计划浏览器

问题:

  1. SQL Pretty Printer甚至没有安装它会抛出错误,例如

    在此处输入图片说明

    但是SQL Pretty Printer站点说它适用于 SQL Server 2016,您可以查看链接。

    在此处输入图片说明

  2. 下一个SQLSentry 计划资源管理器已成功安装,但插件未显示在SSMS.

版本: v2.8(内部版本 9.0.9252.0)

在此处输入图片说明

谁能帮我解决这个问题。请注意,两者都在 SQL Server 2014 中完美运行。

sql-server ssms plugins sql-server-2016 windows-10

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

SQL Server 服务帐户配置 - 每台服务器一个帐户?

计划为我们的 Sql-Servers 重新创建新的服务帐户,我想知道 - 从安全角度来看 - 每个服务和每个服务器拥有一个域帐户或仅为每个服务创建一个域帐户并重复使用可能更好那些在不同的服务器上?

DOMAIN\Service-SSRS
DOMAIN\Service-SSAS
DOMAIN\Service-SSIS

vs.

DOMAIN\Service-SQL01-SSRS
DOMAIN\Service-SQL01-SSAS
DOMAIN\Service-SQL01-SSIS
DOMAIN\Service-SQL02-SSRS
DOMAIN\Service-SQL02-SSAS
DOMAIN\Service-SQL02-SSIS
etc.
Run Code Online (Sandbox Code Playgroud)

我们这样做是因为我们希望在所有服务器上都有一个统一和一致的配置,而今天还没有到位。我觉得每个服务器都有一个帐户可能会带来更大的灵活性,因此适得其反......

有什么具体的优点/缺点吗?为每台服务器设置单独的服务帐户是否有很多用途?

security sql-server configuration service-accounts sql-server-2016

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

json 字段上的“where”导致算术溢出错误

我有一张桌子:

当我从表中选择所有内容时:

 SELECT JSON_VALUE(LastReadings, '$.lastReadings."7-temp".value') as x FROM
(VALUES    
(2,N'{"groups": [],"lastReadings": {"amir": {"name": "Ink","value":12.0},"7-temp": {"name": "Temperature","value":12}},"customId":null}'),
(3,N'{"groups": [],"lastReadings": {"amir": {"name": "Ink","value":12.0},"7-temp": {"name": "Temperature","value":32}},"customId":null}'),
(4,N'{"groups": [],"lastReadings": {"amir": {"name": "Ink","value":12.0},"7-temp": {"name": "Temperature","value":22}},"customId": null}'),
(5,N'{"groups": [],"lastReadings": {"amir": {"name": "Ink","value": 12.0},"7-temp": {"name": "Temperature","value":123}},"customId": null}')    
)
[AmirTestTable](Id,LastReadings )
Run Code Online (Sandbox Code Playgroud)

我得到

+-----+
|  x  |
+-----+
|  12 |
|  32 |
|  22 |
| 123 |
+-----+
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试添加 where 子句时:

 SELECT JSON_VALUE(LastReadings, '$.lastReadings."7-temp".value') as x 
 FROM
(VALUES
  (2,N'{"groups": [],"lastReadings": {"amir": {"name": "Ink","value":12.0},"7-temp": {"name": "Temperature","value":12}},"customId":null}'),
  (3,N'{"groups": …
Run Code Online (Sandbox Code Playgroud)

json sql-server-2016

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

哪个 SQL Server 版本支持 CDC?

有谁知道哪个 SQL Server 2014/2016 版本/版本支持 CDC(变更数据捕获)?

sql-server sql-server-2014 sql-server-2016

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

恢复模式是完整的还是简单的,备份过程有什么区别吗?

过去,我完成了服务器迁移,并通过此脚本模板通过备份移动了我的数据库。

BACKUP DATABASE [ExampleDB] TO  DISK = N'D:\Backups\ExampleDb.bak
Run Code Online (Sandbox Code Playgroud)

我在新服务器上恢复了 bak 文件。出乎意料的是,用户报告迁移后数据丢失,我通过检查旧服务器中的数据对其进行了验证。大约 8 小时数据丢失。这对我来说是非常意外的时刻。

我的问题是通过该脚本进行备份将为我提供完整备份,无论它是在完整恢复模式还是简单恢复模式下?

换句话说,无论恢复模式是简单还是完整,当我获得备份时,备份文件之间有什么区别吗?

sql-server backup sql-server-2016

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