我已经对OPTION (FAST XXX)
查询提示在SELECT
语句中的作用做了一些挖掘,但我仍然对此感到困惑。根据 MSDN:
指定为快速检索第一个 number_rows 优化查询。这是一个非负整数。返回第一个 number_rows 后,查询将继续执行并生成其完整结果集。
对我来说这没有多大意义,但基本上查询可以非常快地获得前 XXX 行,然后以正常速度获得其余行?
让我想到这一点的 Microsoft Dynamics 查询是:
select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like '%'
order by project OPTION(FAST 500)
Run Code Online (Sandbox Code Playgroud)
谁能准确解释这个查询提示在做什么以及它比不使用它的优势?
我遇到了一个查询的性能问题,我似乎无法理解。
我从游标定义中提取了查询。
此查询需要几秒钟才能执行
SELECT A.JOBTYPE
FROM PRODROUTEJOB A
WHERE ((A.DATAAREAID=N'IW')
AND ((A.CALCTIMEHOURS<>0)
AND (A.JOBTYPE<>3)))
AND EXISTS (SELECT 'X'
FROM PRODROUTE B
WHERE ((B.DATAAREAID=N'IW')
AND (((((B.PRODID=A.PRODID)
AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157')))
AND (B.OPRNUM=A.OPRNUM))
AND (B.OPRPRIORITY=A.OPRPRIORITY))
AND (B.OPRID=N'GRIJZEN')))
AND NOT EXISTS (SELECT 'X'
FROM ADUSHOPFLOORROUTE C
WHERE ((C.DATAAREAID=N'IW')
AND ((((((C.WRKCTRID=A.WRKCTRID)
AND (C.PRODID=B.PRODID))
AND (C.OPRID=B.OPRID))
AND (C.JOBTYPE=A.JOBTYPE))
AND (C.FROMDATE>{TS '1900-01-01 00:00:00.000'}))
AND ((C.TODATE={TS '1900-01-01 00:00:00.000'}))))))
GROUP BY A.JOBTYPE
ORDER BY A.JOBTYPE
Run Code Online (Sandbox Code Playgroud)
实际的执行计划是这样的。
注意到服务器范围的设置被设置为 MaxDOP 1,我尝试使用 maxdop 设置。
添加OPTION (MAXDOP 0)
到查询或更改服务器设置会导致更好的性能和此查询计划。
但是,有问题的应用程序(Dynamics AX)不会执行这样的查询,它使用游标。 …
performance sql-server parallelism cursors microsoft-dynamics query-performance
我们正在使用 SQL Server 2012 运行 Dynamics AX 2012 安装。我知道不应再使用游标,但 AX 正在使用它,我们无法更改此行为,因此我们必须使用它。
今天我发现了一个非常糟糕的查询,读取次数超过 5300 万次,执行时间超过 20 分钟。
我通过我们的监控工具 SentryOne 捕获了这个查询。
declare @p1 int
set @p1=1073773227
declare @p2 int
set @p2=180158805
declare @p5 int
set @p5=16
declare @p6 int
set @p6=1
declare @p7 int
set @p7=2
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 bigint,@P2 nvarchar(5),@P3 bigint,@P4 nvarchar(8),@P5 bigint,@P6 bigint,@P7 bigint,@P8 bigint,@P9 bigint,@P10 bigint,@P11 bigint,@P12 bigint,@P13 bigint,@P14 bigint,@P15 bigint,@P16 bigint,@P17 bigint,@P18 bigint,@P19 nvarchar(5),@P20 bigint,@P21 bigint,@P22 bigint,@P23 bigint,@P24 bigint',N'SELECT T1.PRODUCT,T1.EXTERNALVENDPARTY,T1.LIFECYCLESTATUS,T1.RECID,T2.ECORESPRODUCT,T2.ECORESDISTINCTPRODUCTVARIANT,T2.SGE,T2.ECORESREFORDERNUM,T2.ORDERNUM,T2.RECID,T3.ECORESREFORDERNUM,T3.NAME1,T3.NAME2,T3.NAME3,T3.RECID,T4.ECORESPRODUCT,T4.EXTERNALITEMID,T4.ECORESDISTINCTPRODUCTVARIANT,T4.RECID,T5.RECID,T5.PERSON,T6.RECID,T6.NAME,T6.INSTANCERELATIONTYPE,T7.RECID,T7.NAME,T7.INSTANCERELATIONTYPE,T8.PARTY,T8.ACCOUNTNUM,T8.RECID,T9.RECID,T9.DISPLAYPRODUCTNUMBER,T9.INSTANCERELATIONTYPE,T10.PRODUCT,T10.CATEGORY,T10.RECID,T11.RECID,T11.CODE,T11.NAME,T11.INSTANCERELATIONTYPE FROM INVENTTABLE T1 CROSS JOIN ECORESPRODUCTORDERNUM …
Run Code Online (Sandbox Code Playgroud) performance sql-server cursors sql-server-2012 microsoft-dynamics performance-tuning
我有一个 Microsoft Dynamics AX SQL Server 数据库。我只是DBCC CHECKDB
为了检查完整性而运行。几分钟后,我得到了以下结果:
CHECKDB在数据库“AXPROD”中发现 0 个分配错误和4 个一致性错误。repair_rebuild 是 DBCC CHECKDB (AXPROD) 发现的错误的最低修复级别。DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。
由于我遇到了 4 个一致性错误,我想知道是否有办法解决这个问题,或者是否有办法获得有关这些错误的更多详细信息。
我正在使用 3 层应用程序 Microsoft Dynamics AX,其中中间层维护与 SQL Server 的连接。几个客户端连接到这个中间层服务器。
中间层服务器通常有几个连接到 SQL Server,所以我很确定它们正在池中,但是没有关于如何实现的文档。
通常情况下,我们可以不涉及SPID的用户或客户端应用程序,但在这里我们可以设置一个注册表项(具体到Microsoft Dynamics AX),这使得在提供这些信息的选择context_info
的领域sys.dm_exec_sessions
。
同样,没有关于如何实现的文档。我们在这方面的唯一信息是MSDN 上一个模糊的博客条目。
帖子提到
添加此信息的性能开销很小。
因此,我们不知道任何实现细节,例如:
有什么方法可以确定服务器端连接池的工作方式以及 context_info 的影响是什么?
更新:
从这里使用这个查询
SELECT des.program_name,
des.login_name,
des.host_name,
-- der.database_id,
COUNT(des.session_id) AS [Connections]
FROM sys.dm_exec_sessions des
INNER JOIN sys.dm_exec_connections DEC
ON des.session_id = DEC.session_id
WHERE des.is_user_process = 1
--AND des.status <> 'running'
GROUP BY des.program_name,
des.login_name,
des.host_name
-- ,der.database_id
HAVING COUNT(des.session_id) > 2
ORDER BY …
Run Code Online (Sandbox Code Playgroud) 这适用于 SQL Server 2012。
我正在对 Dynamics AX 环境中的整体性能缓慢进行故障排除。一切都很慢 - 应用程序本身、报告、临时等。马上,我可以看到没有配置 SQL Server 的最佳实践 - MAXDOP、tempdb、特定于 Dynamics 的跟踪标志和索引/碎片化维护。我很确定存在低效查询、缺失或非最佳索引等。
我花了一点时间查看等待统计数据,但现在我想知道我是否应该首先应用所有推荐的最佳实践(DynamicsAX 的行业标准最佳实践),然后解决缓慢的问题,或者深入研究每个问题一个,并在它到来时解决它?我知道有些人会说,在您确定需要翻转开关之前,不要开始翻转开关。
你会如何处理这种情况?
performance sql-server best-practices sql-server-2012 microsoft-dynamics performance-tuning
MS Shipped 表的目的是什么:sys.persistent_version_store
?
为什么我想知道
主要是好奇心,部分原因是它可能与一个等待咬我们的问题有关......
我们正在运行 MS Dynamics 365 for Finance and Operations 的 SaaS 实例。这用于监控性能的工具非常有限。在试图找到一些有意义的东西时,我发现这张表的行数非常高(~75,000,000)。这似乎令人担忧。这可能没问题,但 MS 已将其包含在他们的分析工具中,这意味着这会使图表上的所有其他信息黯然失色(因为它具有线性标度),从而使图表毫无意义。我想了解这张表是什么,以便我可以确定它是否需要调查,或者将它包含在监控工具中是否只是糟糕的设计。
为什么不看文档
由于它是一个 MS 表,因此应该在某处进行记录。但是,搜索persistent_version_store给出了1 个结果,而且是中文的。搜索Persistence Version Store效果更好;但目前还不清楚这是否是同一件事/关于它是什么的文件不多;只有如何解决达到最大大小的问题。
如何将 6GB 的 zip 文件和 90GB 的 bak 文件的巨大 Microsoft SQL Server 数据库还原到只有 100GB 可用空间的计算机?
当我解压缩 zip 文件时,我得到一个 90GB 的 bak 文件,因此硬盘驱动器上只剩下 10GB,因此没有足够的空间使用 SQL Server Management Studio 进行还原。
优点是我有两台电脑,另一台有 200GB 可用空间,所以我能够完全恢复,但它不是预期的电脑。我已经能够使用以太网通过网络访问恢复的数据库,但我感兴趣的其他软件要求运行数据库的 SQL Server 与感兴趣的软件在同一台计算机上,因此我必须将数据库移动/恢复到不知何故空间较小的计算机。
恳请指导,我一直在探索从我完全恢复到新计算机的计算机手动复制和粘贴 .mdf 和日志文件的选项,然后以某种方式将其连接起来,但我不知道它是否会起作用.
我正在研究并行设置的可能边缘情况。
我长期以来一直相信maxdop 1是 Microsoft Dynamics CRM 数据库的可行选项。由于数据库的本质是严格的 OLTP,并且并行性对 CRM 实例几乎没有好处,因此我始终将 CRM 数据库设置为maxdop 1
.
但是,我现在有一个数据库实例,它具有:
我询问了我们的业务合作伙伴,他们对性能重要性的看法如下:
因此,我倾向于牺牲 OLAP 数据库的并行性,并设置maxdop 1
为最大限度地使 CRM 受益。
然而,可能存在一些中间立场。
如果我将 设置cost threshold for parallelism
为一个数字,排除 CRM 抛出的所有内容,但根据我的查询计划可能会抓取一些 OLAP 事务,对 CRM 会有任何不利影响吗?
如果有的话,保持阈值如此之高(几乎从未达到)的影响是什么,与设置相比maxdop 1
,我是否会在计算查询计划时让 SQL Server 考虑阈值而产生一些隐藏成本?
我在从应用程序 (Microsoft Dynamics AX) 执行以下查询时遇到问题:
DECLARE @p1 INT;
SET @p1 = NULL;
DECLARE @p2 INT;
SET @p2 = 0;
DECLARE @p5 INT;
SET @p5 = 2 + 4096;
DECLARE @p6 INT;
SET @p6 = 8193;
DECLARE @p7 INT;
SET @p7 = 0;
EXEC sp_cursorprepexec
@p1 OUTPUT,
@p2 OUTPUT,
N'@P1 nvarchar(5),@P2 int,@P3 nvarchar(5),@P4 int,@P5 nvarchar(5),@P6 nvarchar(5),@P7 datetime,@P8 nvarchar(21),@P9 numeric(28, 12)',
N'SELECT A.INVENTTRANSIDFATHER,B.INVENTTRANSID,B.TRANSREFID,C.MODELGROUPID,C.COSTGROUPID,C.DIMENSION,C.DIMENSION2_,C.DIMENSION3_ FROM INVENTTRANS A,INVENTTRANS B,INVENTTABLE C WHERE ((A.DATAAREAID=@P1) AND (A.TRANSTYPE=@P2)) AND ((B.DATAAREAID=@P3) AND (((B.INVENTTRANSID=A.INVENTTRANSIDFATHER) AND (B.TRANSREFID=A.TRANSREFID)) AND (B.TRANSTYPE=@P4))) AND ((C.DATAAREAID=@P5) …
Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2008-r2 microsoft-dynamics
sql-server ×8
performance ×5
cursors ×2
parallelism ×2
backup ×1
dbcc-checkdb ×1
hints ×1
restore ×1
t-sql ×1