【发布时间】:2016-07-18 13:52:32
【问题描述】:
我什至不确定这是一个有效的问题。但我会解释我的情况,并可能会从像你这样的专家那里得到答案。
我们已在 primes 上安装了 MS Dynamics。我们观察到性能非常缓慢。 我们正在查看 APP Log 服务器。 我们注意到每秒有 4-5 条警告消息关于“查询执行时间超过 10.seconds 阈值”
这是错误和相关查询的示例。 27.7 秒的查询执行时间超过了 10 秒的阈值。线程:109;数据库:Main_MSCRM;
select
top 5001 "systemuser0".QueueId as "queueid"
, "systemuser0".CreatedBy as "createdby"
, "systemuser0".Address1_Latitude as "address1_latitude"
, "systemuser0".Address2_StateOrProvince as "address2_stateorprovince"
, "systemuser0".Address1_County as "address1_county"
, "systemuser0".Address2_Country as "address2_country"
, "systemuser0".Address2_PostOfficeBox as "address2_postofficebox"
, "systemuser0".PreferredPhoneCode as "preferredphonecode"
, "systemuser0".new_RegistrationNumer as "new_registrationnumer"
, "systemuser0".YammerUserId as "yammeruserid"
, "systemuser0".Title as "title"
, "systemuser0".SetupUser as "setupuser"
, "systemuser0".FirstName as "firstname"
, "systemuser0".EmployeeId as "employeeid"
, "systemuser0".Address1_Line2 as "address1_line2"
, "systemuser0".Address1_City as "address1_city"
, "systemuser0".YomiFirstName as "yomifirstname"
, "systemuser0".ExchangeRate as "exchangerate"
, "systemuser0".Address1_ShippingMethodCode as "address1_shippingmethodcode"
, "systemuser0".YomiMiddleName as "yomimiddlename"
, "systemuser0".Address2_Line2 as "address2_line2"
, "systemuser0".DefaultFiltersPopulated as "defaultfilterspopulated"
, "systemuser0".ModifiedOnBehalfBy as "modifiedonbehalfby"
, "systemuser0".Address2_Line3 as "address2_line3"
, "systemuser0".DefaultMailboxName as "defaultmailboxname"
from
SystemUser as "systemuser0"
where
(("systemuser0".IsDisabled = 0)) order by
"systemuser0".SystemUserId asc
现在,当我在 SQL 级别运行此查询时,不到 2 秒就得出了结果。 所以我的困惑是为什么在 CRM 前端需要更多时间? 除了在 CRM 前端级别进行数据呈现所花费的时间之外,我想不出别的了。
我的第二个困惑是当我运行此查询以及其他我收到警告消息但查询本身没有锁定的情况时,它甚至比 2 秒还要快。
我的想法是编写将在数据库级别应用的逻辑,并且默认情况下,数据库中的任何查询都将具有 NO LOCK。
有可能吗?请让我知道如何摆脱这些警告信息。
谢谢。
【问题讨论】:
-
对所有内容都应用 nolock 很可能是个坏主意。您最好对数据库进行分析以识别锁并检查昂贵的查询是什么并找到问题的根源,而不是把它刷到地毯下。
-
这是有道理的,我只是对那个特定的数据库进行了数据分析。仅在 1 分钟内,我就获得了数以千计的“锁定获得”和“锁定释放”。根据您的分析想法,我下一步应该做什么!
-
您可以为此使用 READ UNCOMMITTED 隔离级别,但我强烈建议您不要这样做。除非您当然可以随机获取重复和/或丢失的行。换句话说,如果您在大多数时间都能获得大部分准确的结果,那可能没问题。 blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere
-
我同意你的观点,我不想走这条路,因为我们想要报告中的准确结果以及我们在 MS Dynamics 中的搜索。
标签: sql sql-server tsql dynamics-crm-2013