标签: sql-server-2019

SQL:查找匹配多行的唯一多列值三元组?

TL;DR:使用 Transact-SQL/SQL Server,如何找到表中与另一列中的某些值集的列值(ColA、ColB、ColC)的单个“解决方案”三元组相匹配的行?

更多信息:假设我有一个与此类似的表(为了获得焦点而删除了 ID 列):

火焰离子化检测器 可乐 科尔B 科尔C
1 1 1 1
1 2 2 2
2 1 1 1
2 3 3 3
3 1 1 1
3 2 2 2

我试图找到 FID 的每个值都存在的 (ColA、ColB、ColC) 的共同三元组值。在此示例中,(1, 1, 1) 将是该三元组,因此我想返回类似以下内容的内容:

火焰离子化检测器 可乐 科尔B 科尔C
1 1 1 1
2 1 1 1
3 1 1 1

感觉应该是某种使用的集合操作intersect,但我对如何最好地以声明方式对其进行建模和编码感到困惑。想法?非常感谢您的帮助!

澄清:几点希望有助于解释我的问题。

  1. 我正在寻找一个查询来查找三元组可能是什么。我不一定知道数据中的内容。
  2. 三元组值不依赖于 FID 值,反之亦然。我的示例恰好使用了与 FID 值之一匹配的 (1,1,1)。数据可能看起来更像是:
火焰离子化检测器 可乐 科尔B 科尔C
13 1 …

sql-server t-sql sql-server-2019

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

聚集列存储索引上的 Trim_reason = DICTIONARY_SIZE

在包含 170 亿行的分区表上,我得到的 row_group 数量非常多。
我听说我应该尝试在每个行组中获取 1.048.576 行。我该如何实现这一目标?

据报道,这trim_reason是。DICTIONARY_SIZEsys.dm_db_column_store_row_group_physical_stats

当我的批处理作业每批插入 1,048,576 行时,每个行组平均获得 100.000 行。

我对列存储索引相当陌生,但我能找到的唯一参考DICTIONARY_SIZE是字符串列。我的表只有bitbigint、 和numeric列。

我的表看起来像这样(列名模糊),我知道很多列大多包含 NULL。如果存在值,它们可能会变化很大(标准差很大)。这是振动数据。

CREATE TABLE fct.MeasureV2
(
MeasureV2ID bigint NOT NULL IDENTITY(1, 1),
DT1ModelID int NOT NULL CONSTRAINT DF_MeasureV2_DT1ModelID DEFAULT ((0)),
DT1TID int NOT NULL CONSTRAINT DF_MeasureV2_DT1TID DEFAULT ((0)),
TimeStampUTC datetime NOT NULL,
AChkSum bigint NULL,
OChkSum bigint NULL,
SChkSum bigint NULL,
ATp numeric (18, 10) NULL,
ATpAvg numeric (18, 10) NULL,
AWDAbsAvg …
Run Code Online (Sandbox Code Playgroud)

sql-server columnstore sql-server-2019

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

确保正在恢复的页面不被损坏的 SQL Server 机制是什么?

假设 dbcc checkdb 在一页上显示损坏。

假设我想通过仅恢复损坏的页面来修复此问题。

所以我进入恢复页面用户界面,单击按钮找到损坏的页面,输入完整和日志备份文件并恢复。

我的问题是 - sql 服务器检查给定完整备份中页面是否损坏的方式是什么?

sql-server corruption sql-server-2019

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

UPDATE 语句中 GETDATE() 值出现差异的可能性

正如标题所暗示的那样,我想知道这是否可能,或者您是否遇到过同一 UPDATE 语句中不同 GETDATE() 结果的问题。

我有一个存储过程,它更新包含两个 DateTime 列的记录,其中还有一个 CASE 语句,一般更新如下:

 UPDATE A
        SET Status = dbo.func('P')
           ,Time1 = GETDATE()
           ,Time2 = ISNULL(A.Time2, GETDATE())
           ,ModifiedOn = GETDATE()
        FROM dbo.Table A
        WHERE A.ID = @ID
        AND A.RowID = @RowID;
Run Code Online (Sandbox Code Playgroud)

我看到 Time2 值稍晚一些,但总是以 3 或 4 的增量增加。这似乎是由于 SQL Server 通过设计将日期时间四舍五入到最接近的 0.000、0.003、0.007 Stack Post Here

我认为这种差异是由两个 GETDATE() 调用之间的轻微延迟引起的,并且延迟通常会导致一个“滴答声”,因为我只看到 Time2 - Time1 = {-.003, -.004 之间的差异}。

上述查询是否有可能返回两个不同的 GETDATE() 结果?

sql-server datetime sql-server-2019

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

由于正在进行的 ASYNC_NETWORK_IO 而暂停的查询是否会导致阻塞?

我正在查看dm_exec_sessions请求生产服务器上的 DMV。有些查询的状态为“已暂停”,持续时间为 12 分钟,等待类型为ASYNC_NETWORK_IO

我理解这是因为客户端应用程序获取数据的速度不够快(或者结果太大以至于客户端程序需要时间来消耗它)。

这样的查询(由于正在进行的查询而暂停ASYNC_NETWORK_IO)是否会导致该表阻塞?

该查询是 a SELECT,我看不到该查询阻止任何其他查询。因此我要问的问题是它是否有可能阻止任何东西。

例如:是否ASYNC_NETWORK_IO意味着执行正在进行或执行已完成并且客户端应用程序正在提取数据?在后一种情况下,我不明白为什么这个查询可能会阻止其他查询,因为它已经产生了结果。

查询持有的锁如下:

  • 页面锁定请求方式S
  • 对象锁请求方式IS

sql-server blocking waits sql-server-2019

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

SQL Server AlwaysOn 可用性组自动播种

我在 SQL Server 2019 中创建了一个 AlwaysOn 并选择了自动播种,但它不会在辅助节点中创建我的数据库,另一方面,如果我手动创建我的数据库,我会给出您的数据库已经存在的错误!解决办法是什么?

sql-server high-availability availability-groups sql-server-2019

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

聚集索引数据访问

我试图了解 SQL Server 如何从聚集索引访问数据。我的理解是,当表具有聚集索引时,SQL 应该能够使用搜索谓词搜索保存记录的单页。

但是,我的测试向我展示了执行查询时它会加载更多数据页。

设置

CREATE TABLE t2(id INT IDENTITY PRIMARY KEY CLUSTERED,col2 VARCHAR(500),col3 VARCHAR(500));

INSERT INTO [dbo].[t2]([col2],[col3])
SELECT TOP 10010 REPLICATE('z',490),REPLICATE('*',490)
FROM sys.all_columns c1,
     sys.all_columns c2
Run Code Online (Sandbox Code Playgroud)

以下查询

select *
from sys.dm_db_index_physical_stats(db_id(),object_id(N'dbo.t2'),DEFAULT,null,'DETAILED');
Run Code Online (Sandbox Code Playgroud)

将输出显示为

在此处输入图片说明

然后我清除了缓存

CHECKPOINT 

GO

DBCC DROPCLEANBUFFERS
Run Code Online (Sandbox Code Playgroud)

并将以下SELECT搜索运行到一行中

SELECT  [fplc].*,[t2].[col3] FROM [dbo].[t2] AS [t2] 
CROSS APPLY sys.[fn_PhysLocCracker](%%physloc%%) AS [fplc]
WHERE id=4582
Run Code Online (Sandbox Code Playgroud)

上面的查询告诉我记录位于第 1061 页

我使用下面的代码检查有多少页已加载到缓冲区中以获取我的 SELECT 结果

SELECT buffers.* FROM sys.dm_os_buffer_descriptors  buffers
INNER JOIN sys.allocation_units AS au
    ON au.[allocation_unit_id] = buffers.[allocation_unit_id]
INNER JOIN sys.partitions AS …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2019

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

如何知道真实的 SQL Server 内存和 CPU 使用率

我的 SQL Server 2019 SE 在 Windows Server 2019 SE 上运行,硬件规格如下:

40 核 1TB 内存

我认为上述规范是矫枉过正!但如果我从 Windows 任务管理器中看到:

SQL Server 内存使用量为:384GB,处理器使用量为 8 核。

如何将真实的 SQL Server 内存和每分钟 CPU 利用率记录到一个表中,以便我可以分析所需的真实规格是什么?

sql-server sql-server-2019

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

如何判断索引是否打开了 OPTIMIZE_FOR_SEQUENTIAL_KEY?

SQL Server 2019 带来了一个OPTIMIZE_FOR_SEQUENTIAL_KEY选项,据我所知,您在创建索引时指定或使用WITH关键字更改。

但是您如何检查该选项是否已针对给定索引打开?

在 Server 2019 中是否默认开启?还是蔚蓝?

index azure-sql-database sql-server-2019

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

以最少的停机时间向未分区的表添加分区

我们每个月都尝试过以下方法。

表大小约为 2TB,3000 万行,包含 50 列,因此我们开始重命名旧表并将新表分区为一批 10K 行。对于 1000 万行,大约需要 7 个小时。

我们正在寻找可以在最短停机时间内完成的任何快速有效的方法?任何帮助表示赞赏。

sql-server partitioning sql-server-2019

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