即使对于相同的查询,计划缓存和查询存储也不相同。当寻找特定查询或一组相关查询的性能或监视信息时,每个查询的优点/缺点是什么?
我的在线研究表明的总体印象是,查询存储可以比计划缓存更快地查询(我不确定为什么),并且它的条目往往持续更长时间(这是可配置的),但我没有发现任何说法关于计划缓存优于查询存储的情况。
假设我不关心 SQL Server 2017 和 2022 引入的使用查询存储进行自动性能调优的功能。相反,假设我比较查询存储和计划缓存是出于两者可以执行的任务的目的。
我在 SQL Server 上运行查询发现重复的统计信息。本次查询结果返回 1 条记录。在 AutoCreatedStatistics 列下显示“_WA_Sys_XX”,在 Index 列下显示“_dta_index_XX”。据我了解,这两个是重复的。我想删除其中 1 个。但我该如何决定应该删除哪一个呢?做出决定后,为了从 SSMS 中删除统计信息,我需要将鼠标悬停在统计信息上,右键单击并查找删除按钮,但删除按钮显示为灰色。有谁知道为什么它看起来是灰色的?
移动模型数据库后,SQL Server 2008 R2 无法启动。有任何想法吗?错误:945,严重性:14,状态:2。有什么想法吗?Sql 2008 R2 不会以trace -f -T3608 或单用户模式-m 启动。需要参数来启动短信以将模型移回原处。
我给出了两个表格的简化版本,如下所示。
表记录
ID unit val
--- --- ---
1 KV 3
1 BAR 4
2 KV 7
2 KG 5
3 C 37
Run Code Online (Sandbox Code Playgroud)
表单位
unit convUnit formula
--- --- ---
KV CV @val * .865
KG lbs @val / 2.205
BAR PSI @val / 14.504
C F @val * 9/5 + 32
Run Code Online (Sandbox Code Playgroud)
我将无法更改表结构。
我知道哪个单位将转换为哪个单位(即我知道 KV 将转换为 CV,KG 将转换为磅等..)。
请注意,公式是一varchar列,我从表格tblRecords.unit中引用了tblUnit.unit
但我的问题是如何在单个查询中动态计算公式。即我想要以下输出。
ID unit val convVal(column will be counted on the fly using formula stored in tblUnit.formula …Run Code Online (Sandbox Code Playgroud) 在关注 BrentOzar 的“索引重建期间离线多少? ”时,我很好奇运行:
SELECT Quantity FROM [Production].[TransactionHistory] WITH(NOLOCK)
Run Code Online (Sandbox Code Playgroud)
在执行上述文章中的重建时,观察到它被延迟,直到索引重建完成
什么是阻塞SELECT ... WITH(NO LOCK)以及如何避免它?
更新:
Windows NT 6.1 上
的 Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
企业评估版(64 位)(内部版本 7601:Service Pack 1)
我们的主数据库大小为 15GB。服务器有 16GB RAM。我们使用简单的恢复模型。
最近,我们注意到我们的自定义应用程序查找(只是使用即席 SQL 语句进行基本读取)速度明显减慢。大多数情况下会多几秒钟。
我不是 SQL Server 管理员,并且不知道接下来该去哪里。
我们监控了CPU,它似乎从未达到峰值。与 RAM 相同。我们有大量的索引,但我认为这只是写入速度的问题......
对我下一步可以看什么有什么建议吗?
我有一种情况,我需要对大量类似的数据库运行查询。他们中的大多数人都会有一个表,我需要更新其中的一些行,但其中一些人没有该表。
我想编写一个查询,该查询具有IF检查表是否存在EXEC sp_executesql的UPDATE语句,而无需使用该语句。有没有办法在 SQL Server 中做到这一点?
这是我今天正在做的一个例子:
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[MyTableName]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
-- this is what I want to be able to do but cannot
UPDATE [dbo].[MyTableName] SET [SomeColumn] = NULL WHERE [SomeColumn] NOT IN (1, 2, 3)
-- this is the only way I know to do this without an error
EXEC sp_executesql N'UPDATE [dbo].[MyTableName] SET [SomeColumn] = NULL WHERE [SomeColumn] NOT …Run Code Online (Sandbox Code Playgroud) 考虑以下表达式,它从日期时间值截断(不舍入)毫秒数:
declare @now datetime2 = sysdatetime();
select @now;
select convert(datetime2, convert(varchar(20), @now, 120));
-- Output
2021-07-30 09:38:33.5566666
2021-07-30 09:38:33.0000000
Run Code Online (Sandbox Code Playgroud)
请注意varchar(20). 我不喜欢那个特定的长度值,因为如果我应该更改我的数据类型,可能会丢失数据:
declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(20), @now, 120));
-- Output
2021-07-30 02:39:12.7200000 -07:00
2021-07-30 02:39:12.0000000 +00:00 -- oops, we lost the time zone too!
Run Code Online (Sandbox Code Playgroud)
因此,我更愿意使用以下内容:
declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(max), @now, 120)); -- note …Run Code Online (Sandbox Code Playgroud) 我们在具有 8 个套接字和 20 个处理器的 VM 上托管了一个 UAT3 服务器,我们在具有相同配置的同一 VM 上托管了类似的 UAT2 服务器。
我们在两个服务器上运行以下查询
select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)
两个服务器具有相同的数据和相同的结构。
UAT2 和 UAT3 具有默认设置并行度5 和最大并行度的成本阈值0。
IN UAT2 服务器并行处理正在发生。它需要 10 秒才能完成,但 UAT3 串行处理正在发生,因为它需要 3 分 30 秒。
我们比较 UAT2 和 UAT3 服务器配置都相同。不知道为什么 SQL Server 在 UAT2 中选择并行执行而不是在 UAT3 中。
下面是表定义
select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)
下面是视图
CREATE TABLE [dbo].[FKMB_CUSTOMER](
[RECID] [nvarchar](64) NOT NULL,
[XMLRECORD] [xml] NULL,
[ALT_CUSTOMER] AS
([dbo].[IX_CUSTOMER_ALT_CUSTOMER]([XMLRECORD]))
PERSISTED,
[SMS] AS
([dbo].[IX_CUSTOMER_SMS_1]([XMLRECORD])) …Run Code Online (Sandbox Code Playgroud) 我在这个网站上看到了如何获得本月的第三个星期五:
select quote_date
FROM table
where datename(weekday, quote_date) = 'Friday'
and datepart(day, quote_date)>=15 and datepart(day, quote_date)<=21;
Run Code Online (Sandbox Code Playgroud)
在第三个星期五之后,我将如何获得第一个星期一?
sql-server ×10
t-sql ×3
datatypes ×1
date-math ×1
index ×1
index-tuning ×1
monitoring ×1
parallelism ×1
performance ×1
plan-cache ×1
query-store ×1