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,但我对如何最好地以声明方式对其进行建模和编码感到困惑。想法?非常感谢您的帮助!
澄清:几点希望有助于解释我的问题。
| 火焰离子化检测器 | 可乐 | 科尔B | 科尔C |
|---|---|---|---|
| 13 | 1 … |
在包含 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是字符串列。我的表只有bit、bigint、 和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) 假设 dbcc checkdb 在一页上显示损坏。
假设我想通过仅恢复损坏的页面来修复此问题。
所以我进入恢复页面用户界面,单击按钮找到损坏的页面,输入完整和日志备份文件并恢复。
我的问题是 - sql 服务器检查给定完整备份中页面是否损坏的方式是什么?
正如标题所暗示的那样,我想知道这是否可能,或者您是否遇到过同一 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() 结果?
我正在查看dm_exec_sessions并请求生产服务器上的 DMV。有些查询的状态为“已暂停”,持续时间为 12 分钟,等待类型为ASYNC_NETWORK_IO。
我理解这是因为客户端应用程序获取数据的速度不够快(或者结果太大以至于客户端程序需要时间来消耗它)。
这样的查询(由于正在进行的查询而暂停ASYNC_NETWORK_IO)是否会导致该表阻塞?
该查询是 a SELECT,我看不到该查询阻止任何其他查询。因此我要问的问题是它是否有可能阻止任何东西。
例如:是否ASYNC_NETWORK_IO意味着执行正在进行或执行已完成并且客户端应用程序正在提取数据?在后一种情况下,我不明白为什么这个查询可能会阻止其他查询,因为它已经产生了结果。
查询持有的锁如下:
SIS我在 SQL Server 2019 中创建了一个 AlwaysOn 并选择了自动播种,但它不会在辅助节点中创建我的数据库,另一方面,如果我手动创建我的数据库,我会给出您的数据库已经存在的错误!解决办法是什么?
sql-server high-availability availability-groups sql-server-2019
我试图了解 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 2019 SE 在 Windows Server 2019 SE 上运行,硬件规格如下:
40 核 1TB 内存
我认为上述规范是矫枉过正!但如果我从 Windows 任务管理器中看到:
SQL Server 内存使用量为:384GB,处理器使用量为 8 核。
如何将真实的 SQL Server 内存和每分钟 CPU 利用率记录到一个表中,以便我可以分析所需的真实规格是什么?
SQL Server 2019 带来了一个OPTIMIZE_FOR_SEQUENTIAL_KEY选项,据我所知,您在创建索引时指定或使用WITH关键字更改。
但是您如何检查该选项是否已针对给定索引打开?
在 Server 2019 中是否默认开启?还是蔚蓝?
我们每个月都尝试过以下方法。
表大小约为 2TB,3000 万行,包含 50 列,因此我们开始重命名旧表并将新表分区为一批 10K 行。对于 1000 万行,大约需要 7 个小时。
我们正在寻找可以在最短停机时间内完成的任何快速有效的方法?任何帮助表示赞赏。
sql-server-2019 ×10
sql-server ×9
blocking ×1
columnstore ×1
corruption ×1
datetime ×1
index ×1
partitioning ×1
t-sql ×1
waits ×1