标签: sql-server

日期范围在 WHERE 中的 SQL Server 查询 - 执行计划使用聚集的 PK 实例而不是日期列索引

我在 SQL 服务器中有以下查询:

declare @timestamp_start date = getdate() - 1
declare @timestamp_end date = getdate()

SELECT  
    my_date = a.itemTimestamp
FROM
    my_table a with(nolock)
WHERE 
    (@timestamp_start is null OR a.itemTimestamp >= @timestamp_start)
    AND (@timestamp_end is null OR a.itemTimestamp < @timestamp_end)
Run Code Online (Sandbox Code Playgroud)

非常慢(< 2000 条记录为 90 秒),因为执行计划使用 PK 列的聚集索引作为“my_table”:

在此处输入图片说明

为什么会发生这种情况以及如何优化查询性能?

sql-server execution-plan datetime

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

sp_BlitzCache 安装语法错误

尝试sp_BlitzCache在 SQL Server 2008上安装时,我得到:

Msg 102, Level 15, State 1, Procedure sp_BlitzCache, Line 2705 Incorrect syntax near '.'.
Msg 102, Level 15, State 1, Procedure sp_BlitzCache, Line 2715 Incorrect syntax near '.'.
Msg 102, Level 15, State 1, Procedure sp_BlitzCache, Line 2865 Incorrect syntax near '.'.
Run Code Online (Sandbox Code Playgroud)

第 2705 行是:

/* END Testing using XML nodes to speed up processing */
Run Code Online (Sandbox Code Playgroud)

第 2865FROM行是:

/* Set configuration values */
SELECT  @ctp = NULLIF(CAST(value AS INT), 0)
FROM    sys.configurations …
Run Code Online (Sandbox Code Playgroud)

sql-server sp-blitzcache

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

SQL Server 中每个保留字的大小写正确吗?

int大写INT或小写最正确的拼写是int什么?

reserved wordsSQL Server 中还有很多其他的。

如何找出每个单词的最佳情况?

例如,下图是一段随机代码,其中包含许多不同的单词,我如何验证这些单词是否具有“正确”大小写拼写?

如果我有 CS(区分大小写)数据库,这些事情会重要吗?
会不会影响性能?

让我们说select 1 from table1 where 1=1SELECT 1 FROM table1 WHERE 1=1

在此处输入图片说明

如何在 SQL Server 中将数据转换为适当的大小写

sql-server best-practices collation metadata

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

我的一台灾难恢复服务器每天 sp_configure 值都在变化

我们有一台 DR 服务器,每日数据库正在从生产恢复到 DR 服务器。

从上周开始,Sp_Configure 值(显示高级)正在发生变化。

我如何找出这些值的来源,它们与生产服务器 Sp_Configure 值不同。

sql-server

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

SQL Server 2016 SP1 CU3 清除计划缓存

每隔几分钟到大约一小时,进程缓存就会被刷新(但不是完全!)。如果我运行:

SELECT count (*) FROM sys.dm_exec_cached_plans
Run Code Online (Sandbox Code Playgroud)

……刚刚清零之后,计划的数量下降到几百个,然后逐渐增加到大约2000个,然后再次清零,依此类推。

服务器在 VMWare 上运行,它有128 GB的 RAM(SQL Server 最大服务器内存设置为102 GB,最小服务器内存设置为72 GB)。根据 SentryOne 的输出,我可以看到缓冲池消耗了~61 GB。我没有看到任何内存压力指标。

SentryOne SQL Server 内存使用情况

我还观察到,当我将最小服务器内存减少到 16 GB 时,进程缓存清除的频率急剧增加。

我的SQL Server版本如下:

Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64)
Run Code Online (Sandbox Code Playgroud)

还有什么:

  • 我还没有尝试过 LPIM,因为它需要重新启动 SQL Server,但即使它是解决方案,我也很想了解为什么会发生这个问题。此外,Brent建议它仅在缓冲池修整的情况下有帮助。在我的情况下,缓冲池看起来完好无损,只有 proc 缓存受到影响。
  • 我没有找到任何可以对此负责的工作,也找不到任何真正的模式。
  • 如果有人发现这对修复/调查此问题有用,我可以访问 vCenter。但如果是这种情况,请您告诉我我应该在那里检查什么。

我怀疑 VMWare 可能在这里扮演了一些角色,但是当我检查来宾端可用的 perfmon 计数器时,我没有发现任何可疑的东西。

VM 内存性能计数器

我还根据Brent 的建议收集了sp_Blitz的输出:

**Priority 10: Performance**:

- Query Store Disabled - The new SQL Server 2016 Query Store …
Run Code Online (Sandbox Code Playgroud)

sql-server plan-cache sql-server-2016

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

从 Internet 访问 SQL Server AlwaysOn HA 侦听器

我已经成功地在两台服务器之间创建了一个 SQL Server AlwaysOn 高可用性组,并且一切似乎在内部都运行良好。每个副本都位于不同的物理位置,位于不同的防火墙和公共 IP 以及私有 IP/子网之后。现在,他们能够通过站点到站点 VPN 直接相互通信。

我用来访问数据库的应用程序能够连接到侦听器的 DNS。故障转移集群节点和 SQL 副本都有私有 IP,所以只要我在我的网络中运行应用程序,我就可以了。

我现在遇到的问题是我需要应用程序能够在世界任何地方使用。基本上,我需要能够从 Internet 连接到侦听器而无需 VPN,并且仍然能够利用 HA//Failover 功能。

如何做到这一点?似乎在线发布的唯一文档与 Azure 相关,但不适用于我的设置。

谢谢!

sql-server listener failover availability-groups

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

找不到差异备份大小减小的原因

Sql备份作业总结:

嗨,我有一个备份工作,需要每月的第一天进行完整备份,并在每天上午 9 点到下午 5 点之间每 2 小时进行一次差异备份。

问题: 在测试灾难恢复计划时,我发现在几次差异备份后差异备份的大小减少了,当我包含缩小的差异备份(红色方块)时,我收到此错误:在此处输入图片说明 恢复中 在此处输入图片说明

知道为什么差异备份的大小会减少吗?以及如何恢复此差异备份?

请帮助并提前感谢您阅读和回答这个问题。

更新 如前所述,工作是从月初开始进行完整备份,差异备份的差异备份大小增加到位置 91 之间没有完整备份但是,正如您在图像中看到的那样,在位置 92 之前没有进行完整备份。

sql-server backup sql-server-2008-r2

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

是否可以从备份中部分恢复数据?

抱歉,如果我没有使用正确的术语,我不是 DBA,但现在,我就在这里!

情况是上周,一个数据库服务器运行不正常(大约有 6 年历史)。托管公司构建了一个新服务器,并将所有当前数据转移到运行良好的新服务器上。

然而,不知何故,新服务器丢失了 36 小时的数据。托管公司为我们提供了包含这些数据的备份等。

由于某些表具有自动生成的键(类型integer),是否有任何方法可以将日期范围中的一组数据恢复到我的实时数据库中?我显然不能只是剪切和粘贴,因为所有数据的完整性都将丢失。

想法?

Windows Server 和 Microsoft SQL Server 2008。

sql-server sql-server-2008-r2 restore

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

T-SQL CHANGETABLE 如何拥有带有文字表名称的参数

我可以将文字表名称传递到内置函数中CHANGETABLE。我想知道这是如何完成的以及是否可以在我自己的存储过程/内联函数中完成。

在此之上。如果可以先将其传递给文字常量,然后将其传递给函数,这样我就可以获得表 ID,而不必在两个地方指定表名称。

提前致谢。

sql-server t-sql

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

我是 MS SQL DB 开发人员,希望在服务器上获得更多权限

所以我正在尝试使用 Visual Studio,但无法将 DEV 数据库导入到项目中。我每周都会遇到这个问题几次,因为我要么创建 SSIS 包,要么从头开始构建数据库,或者创建需要我访问多个数据库、创建作业计划的 SSAS 模型......

我当前的错误是我无法在 Visual Studio 中对 DEV 数据库进行逆向工程,因为我没有视图定义。这可能是我遇到的更常见的问题之一。当我试图查看执行计划时,我遇到了同样的错误。

因此,基于这篇文章http://sqlmag.com/database-security/security-options-developers-devsandbox-environments 我想知道对架构的授予控制是否将涵盖我需要的一切。

出现的另一个问题是我无法查询数据库以查看谁可能锁定了我的查询。运行 SP_who2 只会告诉我我在做什么。不得不提交票证并等待 DBA 找出问题,这非常令人沮丧。我需要什么权利才能运行 SP_WHO2 或运行查询以查看系统中发生了什么。

当出现问题时,我是否应该无法杀死我自己的 SPID?SSMS 中的停止按钮并不总是有效。

我还想运行 Brent Ozar 的 spBlitz 工具,以便我可以调整我自己的查询。这应该不是开发人员的任务。我想知道我是否创建了一个索引,它是否曾经被命中以及多久被命中。或者我应该在另一个覆盖索引中包含一个我需要的列。

想法?作为一名数据库开发人员,Grant Control 会为我提供我需要的一切,不要与报告编写者或为应用程序编写基本过程的人混淆。

sql-server access-control

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