从文档来看,似乎可以恢复完整的数据库备份文件,但也可以恢复事务日志吗?
(这个想法是尽量减少从本地迁移到 MI 过程中的停机时间)。
谢谢。
我将向一个相当大的表添加一个聚集索引:
有一Id列可能用于索引键,但它是nvarchar(18)和not unique(尽管那里没有重复值)。
但是我不愿意使用它,因为它的数据类型(性能影响)并且一直在考虑添加一int identity(1,1)列并将其用作聚集索引键。
您更愿意推荐哪种解决方案?TIA
上周其中一个 SQL Server 出现问题,CPU 开始消耗超过 80%(正常为 10-30%)
这持续了大约 2 小时,直到我手动故障转移到 AG 中的辅助副本(这已经解决了问题)
问题开始:12:15
问题结束:14:15(手动 AG 故障转移后)
服务器信息:
SQL Server 2017
32 logical processors (max DOP = 8)
256 GB RAM (Max Server Memory = 180 GB, used 179 GB)
Run Code Online (Sandbox Code Playgroud)
以下指标在问题出现之前与问题开始后没有明显变化
以下指标显着达到峰值,这对于该服务器来说并不典型(通常这些指标很低):
查询:
当问题开始时,我没有注意到此服务器的工作负载发生变化
开发人员还确认应用程序完成了他们通常的工作并正在运行常规查询,应用程序负载没有峰值
在这个“高 CPU 使用率”问题中,CPU 的前 10 个查询看起来并不异常
即使 CPU 正常(10-30 %),我们通常也会看到前 10 条查询
问题:
问题似乎出在几个相关的存储过程中,该应用程序通常每秒运行 1-4 次,而那些通常在 50 毫秒内完成,但在问题期间,只要我检查了 …
在频繁执行的存储过程(有时每秒高达 10-15 次)中,有两个特定语句出现在累积 CPU 影响排名前 10 的最重查询中
这些是创建 #Temp 表的 DDL 语句:
1.
SELECT cast(0 as int) as rowId
, Column1 as tColumn1
, Column2 as tColumn2
, ...
, Column14 as tColumn14
, cast(0 as datetime) as tUTC
, -1 as tRefId
INTO #TempTable1
FROM Table1 WITH(NOLOCK)
WHERE 0=1
Run Code Online (Sandbox Code Playgroud)
SELECT tColumn1, ..., tColumn14, tUtc, tRefId
INTO #TempTable2
FROM #TempTable1
WHERE 0=1
Run Code Online (Sandbox Code Playgroud)
上述任何 DDL 平均需要 10-15 毫秒的 CPU 时间,只需创建一个 #temp 表
更改存储过程的逻辑,使其不创建临时表,不是一个选项
问题:如何加快临时表的创建时间(就 CPU 时间而言)?
我有以下查询,我正在查找该列不等于 1 的任何行istrue。但结果只包含 0 的记录,忽略 null 的记录。虽然我知道使用(istrue != 1 or istrue is null)会产生预期的结果,但我很好奇导致 SQL Server 排除 null 值的底层机制。您能否提供对此行为的见解?谢谢!
create table #test
(
id int,
val varchar(100),
istrue bit
)
insert into #test values
(1, 'test-1', 1),
(2, 'test-2', 0),
(3, 'test-3', 1),
(4, 'test-4', 0),
(5, 'test-5', null),
(6, 'test-6', null)
select * from #test
where istrue != 1
drop table if exists #test
Run Code Online (Sandbox Code Playgroud) 是否可以使用 T-SQL 在系统规范下进行查询?
我已经在 SSMS 对象资源管理器中连接到了几个 Azure SQL Servers(这些服务器上托管了几个 Azure SQL 数据库)并且看到版本是 12.0.2000.8
select @@Version 显示如下:
Microsoft SQL Azure (RTM) - 2021 年 2 月 20 日 12.0.2000.8 17:51:58 版权所有 (C) 2019 Microsoft Corporation
为了比较,我的另一个盒子是 SQL Server 2017,它显示的版本是 14.0.3370.1
我希望将 Azure SQL Servers 视为 15.0.something(对应于 SQL Server 2019),但它们似乎对应于 SQL Server 2014(版本 12)
问题:
Azure SQL Server 不应该自动升级到最新版本吗?
如何手动将它们升级到版本 15?
关于向后兼容性,我可以在一些较新版本的 SQL Server(具体是 SQL Server 2019)中托管的旧数据库上设置的最大兼容模式是什么?
在一个 MS Workshop 我被告知 SQL 2012 通常是一个安全的赌注,但我想听听是否对此有任何不同的意见。
根据以下链接,NULL值占用一些存储空间:
/sf/ask/261182071/
https://www.sqlservercentral.com/forums/topic/null-storage-2
如果列具有固定宽度数据类型 -NULL占用列的长度
char(10) NULL takes 10 bytes
INT NULL takes 4 bytes
Run Code Online (Sandbox Code Playgroud)
如果列具有可变宽度 -NULL占用 0 字节
varchar(1000) NULL takes 0 bytes (+ 2 bytes of varchar column overhead ?)
Run Code Online (Sandbox Code Playgroud)
另外,拥有可为空的列也会产生开销。链接中的信息有点矛盾。
任何人都可以阐明这一点吗?
这是我的问题:
有人说可空列的开销是每行 1 位,有人说是每行 1 个字节,
哪一个是正确的?我假设每行 1 位(因此 8 行构成 1 个字节),对吗?
对于 varchar 中的 NULL 值,每行仍然有 2 个字节的开销 - 这是真的吗?
最重要的问题:
我有一个包含约 2.5 亿行数据的表,总大小约为 115 GB
我使用下面的代码添加了 7 列,在每个命令后使用 sp_spaceused 检查表的大小
添加的列:
alter table MyTable add TestVarchar10 varchar(10) …Run Code Online (Sandbox Code Playgroud) 是否有任何系统目录视图或 DMV 可用于从 SQL Server:Memory Manager 查询(例如在 SSMS 中)以下性能计数器?
Free Memory (KB)
Target Server Memory
Total Server Memory
Maximum Workspace Memory (KB)
Database Cache Memory (KB)
Granted Workspace Memory (KB)
Lock Memory (KB)
Log Pool Memory (KB)
Optimizer Memory (KB)
Connection Memory (KB)
SQL Cache Memory (KB)
Reserved Server Memory (KB)
Stolen Server Memory (KB)
Run Code Online (Sandbox Code Playgroud) memory dmv sql-server-2017 performance-counters memory-manager
sql-server ×8
null ×2
performance ×2
cpu ×1
dmv ×1
memory ×1
memory-grant ×1
migration ×1
query ×1
scripting ×1
storage ×1