我正在研究一个场景,在这个场景中,我提供了一个变量值。当我传递 Null 值时,查询引擎没有扫描连接表。根据逻辑查询处理,首先执行FROM子句,然后执行ON和JOIN。但在这种情况下,查询引擎直接转到Where子句。当变量的值为 NULL 时,任何人都可以解释行为查询引擎。我正在使用 SQL Server 2016。
当值改变时
performance sql-server optimization execution-plan sql-server-2016 query-performance
我有一个 SQL 2016 Ent。具有 3 个节点的 AG 版。我们在 AG 中有一个包含 5 个文件流表的数据库。每个表都在它自己的文件流数据文件中。今天我修复了一个错误,即通过重建索引将所有文件保存到一个文件流数据文件中。
在 dev 中,我们没有 AG,数据库处于简单恢复中。空间被收回了。之前和之后看起来像这样:
文件已移至正确的文件流数据文件,但未从原始数据文件中恢复空间。
一开始我还以为是车库收藏,看了Paul Randal的博文。我缩小了日志文件,然后创建了一个垃圾表,通过显式转换添加了大量行,运行了日志备份和检查点,所有这些都在主节点上。日志文件确实增长了,之前活动的 VLF 被标记为不活动。
更复杂的是,备份是辅助节点上的完全复制\日志备份。
在这种情况下回收空间的正确方法是什么?
编辑:按照安迪在他博客中的步骤后,空间被收回。每个 AG 节点看起来像:
我有以下偶尔运行缓慢的查询:
SELECT C.CustomerID
FROM dbo.Customers C WITH (NOLOCK)
WHERE C.Forename = @Forename
AND C.Surname = @Surname
OPTION (RECOMPILE)
Run Code Online (Sandbox Code Playgroud)
CustomerID 是Customers 表上的主键。客户表还有以下两个非聚集索引:
CREATE NONCLUSTERED INDEX idx_Forename ON Customers (Forename ASC)
CREATE NONCLUSTERED INDEX idx_Surname ON Customers (Surname ASC)
Run Code Online (Sandbox Code Playgroud)
当我使用输入的姓氏和名字运行查询时,查询优化器使用索引“idx_Surname”,如以下执行计划所示:
对于此特定搜索,此查询需要两分钟多的时间才能完成,并且未找到任何结果。对于输入的值,@Forename 在 Customers 表中没有匹配项,而 @Surname 匹配 31,162 条记录。当我只按 @surname 搜索时,31,162 条记录会在不到一秒钟的时间内返回,并采用以下计划:
为了优化包含 Forename 和 Surname 的搜索的查询,我添加了以下覆盖索引:
CREATE NONCLUSTERED INDEX idx_Surname_Covering ON dbo.Customers (Surname) INCLUDE (Forename)
Run Code Online (Sandbox Code Playgroud)
带有 Forename 和 Surname 的查询将在不到一秒的时间内返回。但是,实际执行计划中并没有使用覆盖索引:
所以,
ps 上面的查询是一个孤立的例子,在使用时,可以搜索姓氏或名字,或者两者都可以搜索,并且客户表还包括其他具有自己索引的可搜索列。这个细节被认为与问题无关,所以我没有包括它。
performance index sql-server execution-plan sql-server-2016 query-performance
我正在创建一个数据仓库。我以 5 分钟的间隔创建了一个时间维度 (Dim_Time)。小时聚合将具有 [分钟] = NULL。出于本示例的目的:
CREATE TABLE [dbo].[Dim_Time](
[TimeID] [int] IDENTITY(1,1) NOT NULL,
[StartDateTime] [datetime] NULL,
[Hour] [int] NULL,
[Minute] [int] NULL,
CONSTRAINT [PK_Dim_Time] PRIMARY KEY CLUSTERED
([TimeID] ASC)
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
然后我有一个传入表,它每 5 分钟从 OLTP 数据库更新一次。
CREATE TABLE [dbo].[Stg_IncomingQueue](
[IncomingID] [int] IDENTITY(1,1) NOT NULL,
[CustomerID] [int] NOT NULL,
[TimeID] [int] NULL,
[InsertTime] [datetime] NULL,
CONSTRAINT [PK_IncomingQueueMonitor] PRIMARY KEY CLUSTERED
([IncomingID] ASC)
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
然后我有以下 While 循环。其目的是获得与特定传入行相关的正确 5 分钟时隙 (TimeID):
WHILE 0 < (SELECT COUNT(*) …Run Code Online (Sandbox Code Playgroud) 我试图找到一种方法来收集过去两天的 SQL 服务器查询响应时间。有没有办法实现这一目标?我知道 DMV 有查询统计数据,但我似乎没有达到我的要求。我无权访问查询存储,因此目前也无法使用它。
我正在寻找 SQL 服务器的查询响应时间,因为有人指责 sql 服务器,但我看不到内存压力/cpu 压力或任何瓶颈。因此,现在尝试获取针对服务器运行的查询的响应时间。
谢谢
我创建了一个表,并希望找到其列的显示顺序。我应该使用以下查询来显示由 订购的信息column_id吗?
select * from sys.columns c
where c.object_id = object_id('Customer')
order by column_id
create table dbo.Customer
(
CustomerId int primary key,
CustomerName varchar(255),
CustomerAddress varchar(255),
EnrollmentDate date
)
Run Code Online (Sandbox Code Playgroud)
阅读Microsoft SQL Server 文档,我看到下面的信息,所以想确定:
列名 数据类型 描述
----------- --------- ------------------------------ ----------------
column_id:列的整数 ID。在对象内是唯一的。
列 ID 可能不是连续的。 我在 SQL Server 2016 EE 实例上有一个相对较大的 550GB 数据库,该实例的最大内存限制为操作系统可用的总 128GB RAM 中的 112GB。数据库的最新兼容级别为 130。开发人员抱怨下面的查询在隔离执行时在他们可接受的 30 秒内执行,但是当他们大规模运行他们的进程时,同一查询会并发执行多次跨多个线程,这是他们观察到执行时间受到影响并且性能/吞吐量下降的时候。有问题的 T-SQL 是:
select distinct dg.entityId, et.EntityName, dg.Version
from DataGathering dg with(nolock)
inner join entity e with(nolock)
on e.EntityId = dg.EntityId
inner join entitytype et with(nolock)
on et.EntityTypeID = e.EntityTypeID
and et.EntityName = 'Account_Third_Party_Details'
inner join entitymapping em with(nolock)
on em.ChildEntityId = dg.EntityId
and em.ParentEntityId = -1
where dg.EntityId = dg.RootId
union all
select distinct dg1.EntityId, et.EntityName, dg1.version
from datagathering dg1 with(nolock)
inner join entity e …Run Code Online (Sandbox Code Playgroud) performance sql-server t-sql sql-server-2016 memory-grant query-performance
我正在尝试调整以下查询,无论将什么值作为参数传入,该查询都需要 15-16 秒,查询是:
select distinct d.documentpath as path, d.documentname as name, d.datecreated as created, pc.DateProcessed
from datagatheringruntime dgr
inner join processentitymapping pem on pem.entityid = dgr.entityid
inner join document d on d.entityid = pem.entityid or d.unitofworkid = pem.processid
left join PendingCorrespondence pc on pc.PendingCorrespondenceId = d.PendingCorrespondenceId
where rootid = @P0 and dgr.name in('cust_pn', 'case_pn')
OPTION(RECOMPILE)
Run Code Online (Sandbox Code Playgroud)
我已经更新了查询涉及的所有表的统计信息(不包括DataGatheringRuntime在 ~ 处相当大的表100GB),并尝试使用 a 重新分解查询,CTE但获得相同的执行计划并需要一些帮助。
实际的执行计划可以在这里找到:
https://www.brentozar.com/pastetheplan/?id=ByUVIqlFE
这是从执行计划明确指出,问题在于对外部输入nested loop join与特别是lazy table spool以下的scan非群集的IX_Camunda_1 …
performance sql-server t-sql execution-plan sql-server-2016 query-performance
我有一个奇怪的。在过去的几周里,我通过 Windows 身份验证偶尔遇到登录错误,网络团队和我还没有找到解决方案。
我在运行 Windows Server 2012 R2 的物理服务器上运行 SQL 2016。
虽然这种情况一直在发生,但我一直告诉用户等待五分钟,然后再次尝试登录。如果用户等待五分钟,他们将(大多数情况下)能够登录。我曾遇到过 15 分钟无法登录的情况,然后我的下一次登录尝试成功了。
从 SQL 错误日志中,我看到如下条目:
登录失败。登录名来自不受信任的域,不能与 Windows 身份验证一起使用。[客户端:XX.XX.XXX.XXX] 错误:18452,严重性:14,状态:1。
SSPI 握手失败,错误代码为 0x80090311,在建立具有集成安全性的连接时状态 14;连接已关闭。原因:AcceptSecurityContext 失败。Windows 错误代码指示失败的原因。无法联系授权进行身份验证。[客户:XX.XX.XXX.XXX] 错误:17806,严重性:20,状态:14。
从服务器,我看到这个:
一个帐户登录失败。
主题:安全 ID:NULL SID 帐户名称:- 帐户域:- 登录 ID:0x0
登录类型:3
登录失败的帐户:安全 ID:NULL SID 帐户名称:A 用户帐户域:A 域
失败信息:失败原因:登录期间发生错误。状态:0xC000005E 子状态:0x0
进程信息:调用方进程 ID:0x0 调用方进程名称:-
网络信息: 工作站名称: A 计算机源网络地址: - 源端口: -
详细的身份验证信息:登录过程:NtLmSsp 身份验证包:NTLM 传输服务:- 包名称(仅限 NTLM):- 密钥长度:0
任何想法可能导致(有时)这样的登录失败?
在CASE表达式中,我试图在文本列中搜索以识别连字符 (-):
CASE
WHEN SUBSTRING(al.ALT_ADDRESS,1,1) IN('1','5','7')
AND al.NEW_ADDRESS CONTAINS '-'
THEN CONCAT(al.ALT_ADDRESS,al.NEW_ADDRESS)
Run Code Online (Sandbox Code Playgroud)
连字符可以位于列中的任何位置,因此我只需要知道它是否存在,而不管它在列中的实际位置。
我目前正在使用与@Josh 提供的完全相同的代码( LIKE '%-%'),但它不起作用,因为它没有为我知道它“应该”的几个特定实例返回正确的数据。确切的文字ALT_ADDRESS是:“2754 Churchill Circle”。确切的文字NEW_ADDRESS是:“O-89421”。但是,返回的结果不包括NEW_ADDRESS(O-89421)。
我已经确认破折号NEW_ADDRESS确实与我使用搜索(ASCII 45)的破折号相匹配。
sql-server-2016 ×10
sql-server ×9
performance ×4
t-sql ×3
backup ×1
filestream ×1
index ×1
memory-grant ×1
optimization ×1
security ×1