标签: microsoft-dynamics

SELECT 语句中的 OPTION FAST 有什么作用?

我已经对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)

谁能准确解释这个查询提示在做什么以及它比不使用它的优势?

sql-server hints t-sql microsoft-dynamics

34
推荐指数
2
解决办法
4万
查看次数

sp_cursoropen 和并行性

我遇到了一个查询的性能问题,我似乎无法理解。

我从游标定义中提取了查询。

此查询需要几秒钟才能执行

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

15
推荐指数
1
解决办法
2339
查看次数

sp_cursorprepexec 导致 5300 万次读取?

我们正在使用 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

9
推荐指数
1
解决办法
1219
查看次数

如何修复数据库一致性错误

我有一个 Microsoft Dynamics AX SQL Server 数据库。我只是DBCC CHECKDB为了检查完整性而运行。几分钟后,我得到了以下结果:

CHECKDB在数据库“AXPROD”中发现 0 个分配错误和4 个一致性错误。repair_rebuild 是 DBCC CHECKDB (AXPROD) 发现的错误的最低修复级别。DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。

由于我遇到了 4 个一致性错误,我想知道是否有办法解决这个问题,或者是否有办法获得有关这些错误的更多详细信息。

sql-server dbcc-checkdb microsoft-dynamics

7
推荐指数
1
解决办法
3万
查看次数

使用 CONTEXT_INFO 验证连接池服务器端

我正在使用 3 层应用程序 Microsoft Dynamics AX,其中中间层维护与 SQL Server 的连接。几个客户端连接到这个中间层服务器。

中间层服务器通常有几个连接到 SQL Server,所以我很确定它们正在池中,但是没有关于如何实现的文档。

通常情况下,我们可以不涉及SPID的用户或客户端应用程序,但在这里我们可以设置一个注册表项(具体到Microsoft Dynamics AX),这使得在提供这些信息的选择context_info的领域sys.dm_exec_sessions

同样,没有关于如何实现的文档。我们在这方面的唯一信息是MSDN 上一个模糊的博客条目

帖子提到

添加此信息的性能开销很小。

因此,我们不知道任何实现细节,例如:

  1. 信息是以某种方式包含在连接字符串中还是由 SET CONTEXT_INFO 完成?
  2. 什么时候重用连接?
  3. 可以预期的确切影响

有什么方法可以确定服务器端连接池的工作方式以及 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 connection-pooling microsoft-dynamics

7
推荐指数
1
解决办法
1696
查看次数

SQL 性能问题 - 首先正确配置服务器还是一一解决问题?

这适用于 SQL Server 2012。

我正在对 Dynamics AX 环境中的整体性能缓慢进行故障排除。一切都很慢 - 应用程序本身、报告、临时等。马上,我可以看到没有配置 SQL Server 的最佳实践 - MAXDOP、tempdb、特定于 Dynamics 的跟踪标志和索引/碎片化维护。我很确定存在低效查询、缺失或非最佳索引等。

我花了一点时间查看等待统计数据,但现在我想知道我是否应该首先应用所有推荐的最佳实践(DynamicsAX 的行业标准最佳实践),然后解决缓慢的问题,或者深入研究每个问题一个,并在它到来时解决它?我知道有些人会说,在您确定需要翻转开关之前,不要开始翻转开关。

你会如何处理这种情况?

performance sql-server best-practices sql-server-2012 microsoft-dynamics performance-tuning

7
推荐指数
1
解决办法
197
查看次数

什么是persistent_version_store 表?

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效果更好;但目前还不清楚这是否是同一件事/关于它是什么的文件不多;只有如何解决达到最大大小的问题。

azure-sql-database system-tables microsoft-dynamics

6
推荐指数
2
解决办法
846
查看次数

将 90GB 的数据库恢复到只有 100GB 的计算机

如何将 6GB 的 zip 文件和 90GB 的 bak 文件的巨大 Microsoft SQL Server 数据库还原到只有 100GB 可用空间的计算机?

当我解压缩 zip 文件时,我得到一个 90GB 的 bak 文件,因此硬盘驱动器上只剩下 10GB,因此没有足够的空间使用 SQL Server Management Studio 进行还原。

优点是我有两台电脑,另一台有 200GB 可用空间,所以我能够完全恢复,但它不是预期的电脑。我已经能够使用以太网通过网络访问恢复的数据库,但我感兴趣的其他软件要求运行数据库的 SQL Server 与感兴趣的软件在同一台计算机上,因此我必须将数据库移动/恢复到不知何故空间较小的计算机。

恳请指导,我一直在探索从我完全恢复到新计算机的计算机手动复制和粘贴 .mdf 和日志文件的选项,然后以某种方式将其连接起来,但我不知道它是否会起作用.

sql-server backup restore microsoft-dynamics

6
推荐指数
1
解决办法
565
查看次数

设置 maxdop 1 与设置高并行度阈值

我正在研究并行设置的可能边缘情况。

我长期以来一直相信maxdop 1是 Microsoft Dynamics CRM 数据库的可行选项。由于数据库的本质是严格的 OLTP,并且并行性对 CRM 实例几乎没有好处,因此我始终将 CRM 数据库设置为maxdop 1.

但是,我现在有一个数据库实例,它具有:

  • Microsoft Dynamics CRM 数据库
  • 主要用于 OLAP 目的的 ETL 数据库

我询问了我们的业务合作伙伴,他们对性能重要性的看法如下:

  1. CRM 必须快速,期间
  2. ETL 导入不应受到限制,但应排在 CRM 性能之后

因此,我倾向于牺牲 OLAP 数据库的并行性,并设置maxdop 1为最大限度地使 CRM 受益。
然而,可能存在一些中间立场。

如果我将 设置cost threshold for parallelism为一个数字,排除 CRM 抛出的所有内容,但根据我的查询计划可能会抓取一些 OLAP 事务,对 CRM 会有任何不利影响吗?

如果有的话,保持阈值如此之高(几乎从未达到)的影响是什么,与设置相比maxdop 1,我是否会在计算查询计划时让 SQL Server 考虑阈值而产生一些隐藏成本?

performance parallelism sql-server-2012 microsoft-dynamics

4
推荐指数
1
解决办法
1107
查看次数

帮我调整长时间运行的查询

我在从应用程序 (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

4
推荐指数
1
解决办法
721
查看次数