我在 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”:
为什么会发生这种情况以及如何优化查询性能?
尝试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) int大写INT或小写最正确的拼写是int什么?
reserved wordsSQL Server 中还有很多其他的。
如何找出每个单词的最佳情况?
例如,下图是一段随机代码,其中包含许多不同的单词,我如何验证这些单词是否具有“正确”大小写拼写?
如果我有 CS(区分大小写)数据库,这些事情会重要吗?
会不会影响性能?
让我们说select 1 from table1 where 1=1和SELECT 1 FROM table1 WHERE 1=1?
我们有一台 DR 服务器,每日数据库正在从生产恢复到 DR 服务器。
从上周开始,Sp_Configure 值(显示高级)正在发生变化。
我如何找出这些值的来源,它们与生产服务器 Sp_Configure 值不同。
每隔几分钟到大约一小时,进程缓存就会被刷新(但不是完全!)。如果我运行:
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。我没有看到任何内存压力指标。
我还观察到,当我将最小服务器内存减少到 16 GB 时,进程缓存清除的频率急剧增加。
我的SQL Server版本如下:
Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64)
Run Code Online (Sandbox Code Playgroud)
还有什么:
我怀疑 VMWare 可能在这里扮演了一些角色,但是当我检查来宾端可用的 perfmon 计数器时,我没有发现任何可疑的东西。
**Priority 10: Performance**:
- Query Store Disabled - The new SQL Server 2016 Query Store …Run Code Online (Sandbox Code Playgroud) 我已经成功地在两台服务器之间创建了一个 SQL Server AlwaysOn 高可用性组,并且一切似乎在内部都运行良好。每个副本都位于不同的物理位置,位于不同的防火墙和公共 IP 以及私有 IP/子网之后。现在,他们能够通过站点到站点 VPN 直接相互通信。
我用来访问数据库的应用程序能够连接到侦听器的 DNS。故障转移集群节点和 SQL 副本都有私有 IP,所以只要我在我的网络中运行应用程序,我就可以了。
我现在遇到的问题是我需要应用程序能够在世界任何地方使用。基本上,我需要能够从 Internet 连接到侦听器而无需 VPN,并且仍然能够利用 HA//Failover 功能。
如何做到这一点?似乎在线发布的唯一文档与 Azure 相关,但不适用于我的设置。
谢谢!
抱歉,如果我没有使用正确的术语,我不是 DBA,但现在,我就在这里!
情况是上周,一个数据库服务器运行不正常(大约有 6 年历史)。托管公司构建了一个新服务器,并将所有当前数据转移到运行良好的新服务器上。
然而,不知何故,新服务器丢失了 36 小时的数据。托管公司为我们提供了包含这些数据的备份等。
由于某些表具有自动生成的键(类型integer),是否有任何方法可以将日期范围中的一组数据恢复到我的实时数据库中?我显然不能只是剪切和粘贴,因为所有数据的完整性都将丢失。
想法?
Windows Server 和 Microsoft SQL Server 2008。
我可以将文字表名称传递到内置函数中CHANGETABLE。我想知道这是如何完成的以及是否可以在我自己的存储过程/内联函数中完成。
在此之上。如果可以先将其传递给文字常量,然后将其传递给函数,这样我就可以获得表 ID,而不必在两个地方指定表名称。
提前致谢。
所以我正在尝试使用 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 ×10
backup ×1
collation ×1
datetime ×1
failover ×1
listener ×1
metadata ×1
plan-cache ×1
restore ×1
t-sql ×1