好的,所以我有一个运行非常缓慢的报告存储过程。客户抱怨报告无法运行,所以我开始调查问题在存储过程中的确切位置,我发现这部分占用了 99.8% 的时间。
DECLARE @xmlTemp TABLE (
CompanyID INT,
StoreID INT,
StartDate DATETIME,
DateStaID INT,
EndDate DATETIME,
DateEndID INT,
LastUpdate DATETIME)
INSERT INTO @xmlTemp
VALUES (50,
2,
'3/3/2013',
0,
'3/3/2013',
0,
'3/3/2013')
SELECT DISTINCT T.CompanyID,
CompanyName,
Z.StoreID,
StoreName,
CashedOutBy,
TransactionID,
RegisterID,
BusinessDate,
CashedOut,
Total - Isnull((SELECT Sum(DISTINCT PaymentAmount)
FROM vPullDrawerPayments
WHERE CompanyID = T.CompanyID
AND StoreID = T.StoreID
AND TransactionID = T.TransactionID
AND Isnull(PaymentType, 1) <> 1), 0) AS PaymentAmount,
'Cash' AS PaymentDesc,
CASE
WHEN Z.EndDate >= Z.LastUpdate THEN 1 …Run Code Online (Sandbox Code Playgroud) Microsoft SQL Server 2008 Enterprise 上的碎片索引是否会导致 RESOURCE_SEMAPHORE_QUERY_COMPILER 等待?
由于 RESOURCE_SEMAPHORE_QUERY_COMPILER 等待,我们的一个应用程序在过去两周内出现了停机。我们通过重建索引来“修复”它们;这只是在黑暗中的一个镜头。
应用程序供应商已经“深入研究”并“找到了根本原因”,他们声称这是索引碎片,他们的建议是实施我们已经实施的解决方法:每周重建索引(在发布时就已就位)和每晚重组(新)。
我担心的是应用程序供应商只是拿走了我们的工作并声称它是他们自己的。当我们最初偶然发现此修复程序时,我们认为它是一种不太可能导致问题的临时解决方法(很难反对重建/重组索引)。这个问题是在我们最大的用户繁忙时间之后开始的,所以使用率和索引碎片下降了。我们刚刚清除了大量数据,因此碎片百分比会变得更容易(当我们遇到信号量问题时达到峰值约 22%),但百分比仍然显着下降。
我担心的是,我们正在对这种情况进行创可贴,我们再次遇到问题只是时间问题。如果查询需要很长时间,我可以理解,但对我来说,编译查询时出现内存问题似乎很奇怪。
随机位信息:
如果我遗漏了一些重要的事情,我深表歉意;让我知道,我会尝试添加它。
编辑:
当我们每天重新组织时,我们正在重新编译统计信息,很明显,当我们重建索引时会完成,所以我将花一些时间研究我们的查询计划。我真的很感谢指导。
我处于不得不进行数据库恢复的不幸情况。
我的完整备份是在晚上 9.30 (157MB) 进行的,并且在上午 11 点和下午 3 点进行了增量备份。每个增量备份小于 30kb。现在是下午6点。
当我用 WITH RECOVERY 恢复完整备份时,用了不到一分钟。但是我无法应用这两个事务日志。
当我用 NORECOVERY 恢复完整备份时,也花了不到一分钟就说它成功了,但随后数据库仍处于正在恢复...状态。在过去的 40 分钟里一直是这样。任务管理器几乎没有显示任何活动。这是正常的吗?我应该流产吗?
我在针对我的一些测试数据库运行 CDC 更改捕获作业时遇到问题。
我收到的错误消息如下:
以用户身份执行:NT AUTHORITY\NETWORK SERVICE。无法作为数据库主体执行,因为主体“dbo”不存在,无法模拟此类主体,或者您没有权限。[SQLSTATE 42000](错误 15517)。
我怎样才能解决这个问题?
我想让用户能够管理 SQL 代理作业。根据文档页面,我可以通过在 msdb 上授予“适当的”角色来做到这一点。我已授予所有三个 SQLAgent% 角色,但用户在(作为测试)尝试重命名作业时收到此错误:
Only members of sysadmin role are allowed to update or delete jobs owned by a different login.
(Microsoft SQL Server, Error: 14525)
Run Code Online (Sandbox Code Playgroud)
这个问题是类似的,但没有解决 SQL 代理的答案。在 MS SQL 2K8 中,系统管理员角色是唯一的解决方案吗?
我想知道索引的顺序如何影响性能(ASC、DESC)?如果有影响,为什么?我应该选择哪个顺序?
performance sql-server-2008 sql-server query-performance performance-tuning
这个问题什么是将 sql 08 空间数据放到地图上的最简单方法?(以及许多其他文章)推荐 Craig Dunn 的 Geoquery,但所有下载链接似乎都已失效。
SQL Server Managament Studio 的空间结果选项卡将显示单个数据集,这篇 MSDN 文章SQL Server 2008中的空间数据支持提到了一种UNION ALL用于显示叠加在地图上的点数据的解决方法:
SELECT geog, name FROM Mondial.dbo.city WHERE geog IS NOT NULL
UNION ALL
SELECT geog, cntry_name FROM SpatialSamples.dbo.cntry00
Run Code Online (Sandbox Code Playgroud)
每当我尝试类似的事情时,我只会显示一个结果集。
SQL Server 2008 或 2012 中是否有内置的东西来做到这一点?
我需要将表名从触发器传递到过程。
ALTER TRIGGER [dbo].[Trg_ProjectCreation]
ON [dbo].[Projects]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
-- procedure call
exec Proc_Test @Tablename (not need to hardcode)
END
Run Code Online (Sandbox Code Playgroud)
我想知道有什么方法可以从触发器本身获取表名。我需要它是动态的,因为当表的名称更改时,我不想更改我的代码。
我对这个主题的了解表明 perf counter SQL Server:Memory Manager: Total Server Memory 只给你缓冲池内存。在名为 sys.dm_os_process_memor 的 DMV 中有一个名为 physical_memory_in_use 的列,它为您提供物理工作集。
但我不确定...
是否有 DMV 或性能计数器可以告诉我在 64 位 Windows 操作系统上运行的 64 位 SQL Server 2008 R2 和 SQL 2012 的 SQL Server 进程使用的总物理内存(缓冲池 + 非缓冲池,即 MemToLeave)?
sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012
我的数据库表 ( Medicines) 中有以下列。
ID bigint,
MedicineName nvarchar(50),
BrandName nvarchar(50),
MedicineCode nvarchar(20),
and price,quantity.
Run Code Online (Sandbox Code Playgroud)
我正在使用此查询创建存储过程:
create proc searchmedicine
@name nvarchar(50)=null,@brand nvarchar(50)=null, @code nvarchar(20)=null
as
select * from Medicines
where MedicineName= Case WHEN @name IS NOT NULL THEN @name ELSE MedicineName END
AND BrandName=Case WHEN @brand IS NOT NULL THEN @brand ELSE BrandName END
AND MedicineCode=Case WHEN @code IS NOT NULL THEN @code ELSE MedicineCode END
Run Code Online (Sandbox Code Playgroud)
现在我很困惑哪个非聚集索引更适合帮助优化查询:复合列还是单列?
sql-server-2008 ×10
sql-server ×7
index ×2
performance ×2
permissions ×1
spatial ×1
t-sql ×1
trigger ×1
view ×1