これは有効な質問でもわかりません。しかし、私は自分の状況を説明し、あなたのような専門家から答えを得るだろう。DB /テーブルレベルでロックを適用することは可能ですか?
MS Dynamicsがインストールされています。私たちは非常に遅いパフォーマンスを観察しています。 GoogleではAPPログサーバーを検討しています。我々はここで
を「10.secondsしきい値を超えクエリ実行時間」について第二あたり4-5警告メッセージに気付いているはエラーと関連するクエリの例です。 クエリーの実行時間が27.7秒で、しきい値が10秒を超えました。スレッド:109;データベース:Main_MSCRM;私はSQLレベルでこのクエリを実行すると
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
さて、結果は2秒未満で思い付きました。 私の混乱はなぜCRMフロントエンド側に時間がかかるのですか? CRMフロントエンドでのデータレンダリングに要する時間以外に、私は何も考えられません。
私の2番目の混乱は、このクエリを実行するときと、クエリ自体にロックを持たない警告メッセージを受け取っていたときの両方です。
私が考えているのは、DBレベルで適用されるロジックと、DBがデフォルトで保持するクエリヒットを書き込むことです。
でも可能ですか?これらの警告メッセージを取り除く方法を教えてください。
ありがとうございました。
すべてにノーロックを適用するのは悪い考えです。データベースをプロファイリングして、ロックを特定し、高価なクエリが何であるかを確認し、敷物の下でそれを磨くのではなく、問題の根に到達する方が良いでしょう。 – Tanner
これは意味があります、私はその特定のDBでデータプロファイリングをしました。私は何千もの "Lock Acquired"と "Lock Released"を1分間だけ得た。それを分析するというあなたの考えに基づいて、私の次のステップになるはずです! – user2040021
これにはREAD UNCOMMITTEDの分離レベルを使用できますが、そうしないことを強くお勧めします。もちろん、重複した行や行が見つからない場合は無作為に選択してください。言い換えれば、ほとんどの場合、大部分が正確な結果を得てクールであれば大丈夫かもしれません。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –