标签: sql-server-2016

列存储:糟糕的执行计划 - 过滤而不是查找

请参阅https://www.brentozar.com/pastetheplan/?id=SyLQIPDtF (SQL 2016 Enterprise)上的执行计划

  • 我有一个数据仓库表peak_reporting_data,它跟踪每天和每小时的活动,每月包含大约 40 亿行,并具有按 date_key 分区的聚集列存储索引(每天一个分区)
  • 在表peak_reporting_monats_peaks中,我聚合了该表并按月峰值对其进行排序/排名。有 3 种类型的活动 (kpi_type),每种类型每月最多有 24 小时 * 31 天 = 744 行,[monats_peak] 排名从 1 到 744。它有一个关于 Month_key、kpi_type、monats_peak 的唯一索引。
  • 对于最活跃的时间(每个 kpi_type),我需要更多详细信息,因此我编写了以下查询/视图:
    SELECT prmp.month_key
         , prd.*
      FROM mba.peak_reporting_monats_peaks        AS prmp
      LEFT LOOP JOIN (SELECT prd.date_key
                           , prd.hour
                           , prd.kpi_type
                           , prd.is_dr_brand
                           , prd.type_id_usage
                           , prd.product_identifier
                           , SUM(prd.kb) / 1024.0 / 1024.0 AS gb
                           , SUM(CAST(prd.sek AS BIGINT))  AS sek
                           , SUM(prd.anzahl)               AS anzahl
                           , SUM(prd.kb) / 439453125.0     AS gbits
                        FROM db1.mba.peak_reporting_data AS prd …
Run Code Online (Sandbox Code Playgroud)

sql-server execution-plan columnstore sql-server-2016

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

在 T-SQL 中计算值的中位数

我有一段用 T-SQL 编写的代码(存储过程),它将临时表中的多个数据插入表中,如下所示:

INSERT INTO [myschema].[CalculatedData](
    Year, 
    Month,
    Line,
    Car,
    Service,
    Route,
    Trip,
    Stop,
    Qty,
    CalculatedMean
  ) SELECT
    Year,
    Month,
    Line,
    Car,
    Service,
    Route,
    Trip,
    Stop,
    COUNT(*),
    AVG(Duration),  
  FROM
    @TableToCalculate
  GROUP BY
    Year,
    Month,
    Line,
    Car,
    Service,
    Route,
    Trip,
    Stop;
Run Code Online (Sandbox Code Playgroud)

如您所见,我计算了所有值的平均值。很简单,考虑到内置功能

现在,我想做的是计算中位数。没有任何函数可以计算它,但由于中位数等于计算第 50 个百分位数,因此可以使用它。但我不知道该怎么做。

有什么帮助吗?

sql-server t-sql sql-server-2016

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

清除 TEXT 列后减小表大小的注意事项

我有第三部分应用程序,其中有一个 450GB 的表,其中在 TEXT 列中包含文件附件(是的,我知道)。通过文档保留角度,我已使用便携式驱动器将大约 35% 的旧附件导出到磁盘。TEXT 列现在有一条注释,表明附件已存档(有利于应用程序的 UI) - 从多个 MB/GB 减少到不到 1KB。

我知道反对缩小数据库的论点。我从这个论坛收集的选项包括(1)复制表、删除原始表、重命名副本、(2)使用 xp_cmdshell 'bcp...' 导出表、截断表、使用 BULK INSERT 从 'c: 导入数据。 ..' 和 ...; (3) 运行 ALTER INDEX ALL ON dbo.Table REORGANIZE WITH (LOB_COMPACTION = ON)

我最关心的是 SQL Server 将用于任何选项的资源(磁盘空间、CPU、内存...),特别是考虑到表的大小。至于时间,如果需要,我可以阻止周末时间,但是日志文件、临时数据库文件等呢?在开始使用这些选项中的任何一个之前,我应该设置/更改哪些设置?

该服务器具有 160GB 内存,其中 128GB 用于 SQL Server (2016),2 个节点,配有 20 个处理器,每个节点在 MS Windows Server 2012 R2 标准上额定频率为 2.2 GHz。

index sql-server blob sql-server-2016 index-maintenance

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

在 SP3 上安装 SQL Server 2016 SP2 - Windows 更新这么说?

目前我们的服务器运行在 Microsoft SQL Server 2016 (SP3) (KB5003279) - 13.0.6300.2 (X64) 2021 年 8 月 7 日 01:20:37 版权所有 (c) Windows Server 2016 Standard 10.0 上的 Microsoft Corporation Enterprise Edition(64 位)(内部版本 14393:)。这是辅助只读 AG 副本。我们在主副本和辅助副本上安装了 SP3。然而最近第二个节点在 Windows 更新中声明了这一点

可用更新:SQL Server 2016 Service Pack 2 (KB4052908)

如果服务包是累积的,为什么服务器会这样说。有什么想法吗?谢谢。在此输入图像描述

SP3安装程序

SP2_错误

sql-server windows service-pack sql-server-2016

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

sys.dm_exec_describe_first_result_set 返回错误的数据类型

我有两个与链接服务器连接的 SQL Server 2016。当我sys.dm_exec_describe_first_result_set从远程服务器查询时,它返回列表的数字数据类型而不是十进制。

第一个查询(从远程服务器执行)

select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from LinkedServerFoo.DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
Run Code Online (Sandbox Code Playgroud)

第二个查询(从sql server执行)

select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

这对我来说是一个问题,因为我根据这些查询的输出来比较数据类型。

知道可能出现什么问题吗?为什么会这样以及如何解决?

  • smalldatetimewhere sys 表错误返回也存在同样的问题datetime

t-sql system-tables sql-server-2016

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

查询存储中的“执行计数”是什么?

我们正在使用 SQL Server 2016。我们在 2023 年 9 月 11 日的查询持续时间方面遇到一些问题。想在 QueryStore 上检查它,我在 2023 年 9 月 11 日 05:00 PM 执行的查询存储上看到:

在此输入图像描述

2023 年 9 月 11 日,我们的执行次数要多得多(2023 年 9 月 8 日,执行次数约为 1150 VS 800)。我在 2023 年 9 月 12 日运行相同的查询存储检查,发现昨天的执行计数比我昨天检查的要少得多。

你知道为什么我们会有这样的差异吗?更重要的是,我仍然看到 2023 年 9 月 11 日的执行计数仍在减少。

在此输入图像描述

添加了查询存储设置。在此输入图像描述

查询执行 2023-09-14 9:52 AM:

在此输入图像描述

查询执行 2023-09-14 10:53 AM: 在此输入图像描述

查询执行 2023-09-14 12:36 PM:甚至 2023-09-11 也已更改...在此输入图像描述

sql-server sql-server-2016 query-store

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

是否有可能减轻延迟持久性造成的数据丢失风险

由于磁盘性能较差,我需要使用 SQL Server 2016 中的延迟持久性设置进行评估。

微软明确表示,这会带来数据丢失的风险,因为事务是在内存中而不是在磁盘上提交的。

这种风险不仅限于 SQL Server 崩溃,其他原因也可能导致这种风险,例如服务器重新启动。

如果有人尝试重新启动服务器,是否有任何方法可以通过将 SQL Server 将数据闪存到磁盘来降低风险?我搜索过诸如事件触发之类的内容,但一无所获。

除了我上面提到的风险之外,您还认为我应该考虑其他风险吗?这是一个独立的 SQL Server,不参与故障转移群集,也不属于可用性组的一部分。


我提到的性能不佳与日志延迟有关;此 SQL Server 实例中等待时间最长的是 CX*,其次是 WriteLog。目前将事务写入磁盘需要 3-4 毫秒。这是关于云的,即使在 SQL Server 中激活 T1800 后,系统也会受到日志延迟的影响。我猜这与虚拟化/vSAN 固件和更深层次的卷设置有关;我们已经打开了供应商服务票,但为了以防万一供应商无法提供帮助,我必须调查所有可能提高性能的可能性。

sql-server transaction-log sql-server-2016

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

高可用性 SQL Server

我们目前有一个在 Win 2012 专用服务器上运行的 asp.net 应用程序,带有 SQL 2014 Express 的本地副本。

我们希望添加第二个 Web 服务器并将它们放在 NLB 集群中。但是如何处理 SQL... 该网站严重依赖 SQL 数据库(读取和写入)

我隐约熟悉 SQL 复制、可用性组、日志传送等的形式,并且已经阅读了 StackExchange 上关于同一主题的很多帖子,但我仍然有一些问题。

该站点只有中等流量,但 HA 和 RPO 仍然非常重要。我宁愿有一些停机时间,而不是松散的 1 行 SQL 数据,尽管迁移到此设置的重点是减少停机的机会。

一个适用于 SQL Express 的解决方案将是理想的,SQL Standard 很好,但我不想升级到 SQL Enterprise。

A) 关于在 IIS 服务器上保留 SQL,我有什么选择/建议。我宁愿将 SQL 跨越 2 个以上的 Web 服务器,然后只为 SQL 添加额外的服务器。B) SQL 2016 中是否有任何新功能可以帮助解决这个问题?

虽然我知道这不完全是 DBA 的问题,但我还是会问。有没有办法强制 asp.net 同时写入所有可用的 SQL 数据库,但可以从其中任何一个读取?(有点像 Windows NLB 对所有服务器使用相同的 IP,将更新/插入发布到 SQL IP 会将其写入所有服务器,但查询只会使用第一台回答的服务器的结果?

谢谢你们!

replication sql-server high-availability sql-server-2016

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

建议使用 Ola Hallengren 脚本的 SQL Server 备份计划

我们正在构建一个新的 AlwaysOn SQL Server 2016 数据库集群,我正在使用 Ola Hallengren ( https://ola.hallengren.com ) 备份脚本设置备份,我正在寻找最佳运行时间的一些建议以下任务:

DatabaseIntegrityCheck - SYSTEM_DATABASES
DatabaseIntegrityCheck - USER_DATABASES
IndexOptimize - USER_DATABASES
Run Code Online (Sandbox Code Playgroud)

我目前计划使用以下计划进行备份:

DatabaseBackup - SYSTEM_DATABASES - FULL @ 23:30 every day
DatabaseBackup - USER_DATABASES - FULL @  23:00 every day
DatabaseBackup - USER_DATABASES - DIFF @ Every hour starting at 00:00 to 22:00
DatabaseBackup - USER_DATABASES - LOG @ Every 5 mins starting at 00:03 to 23:59:59
Run Code Online (Sandbox Code Playgroud)

通过阅读建议是在备份之前进行数据库完整性检查,所以我认为可能在主备份之前 30 分钟,然后在已知负载很小的时间运行索引优化。将其作为 SQL Server 备份的计划有意义吗?

sql-server backup jobs sql-server-2016 ola-hallengren

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

SQL Server 2016 上的跟踪标志 10260

我们的 SQL Server 2016 开发服务器在启动时设置了跟踪标志 10260。运行 SQL Server 2016 的其他服务器没有。
我搜索了高低,但未能找到有关该主题的任何信息。

这个跟踪标志有什么作用?

移除是否安全?

sql-server-2016 trace-flags

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