タグ付けされた質問 「parallelism」

問題を別々の実行パスで同時に完了できる部分に分割することにより、実行時間を短縮します。


2
計算列のスカラーUDFが並列処理を禁止しないようにする方法はありますか?
SQL ServerのScalar UDFの危険性について多くのことが書かれています。カジュアル検索では、大量の結果が返されます。 ただし、スカラーUDFが唯一のオプションである場所がいくつかあります。 例として:XMLを扱う場合:XQueryは計算列定義として使用できません。Microsoftによって文書化された1つのオプションは、Scalar UDFを使用してXQueryをScalar UDFにカプセル化し、それを計算列で使用することです。 これにはさまざまな効果があり、いくつかの回避策があります。 テーブルが照会されたときに行ごとに実行します テーブルに対するすべてのクエリを強制的にシリアルに実行します 関数をスキーマバインドし、計算列を永続化するか、インデックスを作成することで、行ごとの実行を回避できます。これらのメソッドはいずれも、スカラーUDFが参照されていない場合でも、テーブルにヒットするクエリの強制シリアル化を防ぐことはできません。 それを行う既知の方法はありますか?

2
並列クエリ実行エラーを理解する必要がある
今日、実稼働SQLサーバーのパフォーマンスが低下しました。これが発生した間、いくつかの"The query processor could not start the necessary thread resources for parallel query execution"エラーを記録しました。私が読んだことは、これが複雑なクエリを実行するときに使用するCPUの数に関係していることを示唆しています。しかし、私は停電たちの中にチェックするときCPU Utilization was only at 7%。私がまだ出くわしていない、これが参照している可能性のある他の何かがありますか?これはパフォーマンス低下の原因である可能性がありますか、それともニシンを追いかけていますか? これに対する私のsp_configure値は次のとおりです。 name minimum maximum config_value run_value cost threshold for parallelism 0 32767 5 5

1
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 …

3
並列統計更新
SQL Server 2008以降ではUPDATE STATISTICS WITH FULLSCAN、シングルスレッド操作ですか、それとも並列処理を使用できますか?デフォルトのサンプリングによる統計の更新はどうですか?並列処理を使用できますか?MAXDOPupdate statsで指定するオプションが表示されません。

3
高いCXPACKETおよびLATCH_EX待機
私が取り組んでいるデータ処理システムのパフォーマンスに問題があります。大量のCXPACKETおよびLATCH_EX待機イベントを示す1時間のperoidから待機統計を収集しました。 システムは3つの処理SQL Serverで構成され、多数の数値計算と計算を実行してから、中央のクラスターサーバーにデータを供給します。処理サーバーでは、一度に最大6つのジョブを実行できます。これらの待機統計は、ボットネックを引き起こしていると思われる中央クラスターに関するものです。中央クラスタサーバーには、16コアと64GB RAMがあります。MAXDOPは0に設定されます。 CXPACKETは実行中の複数の並列クエリからのものであると思いますが、LATCH_EX待機イベントが何を示しているのかわかりません。私が読んだことから、これは非バッファ待機かもしれませんか? これらの種類の待機統計の原因が何であるか、このパフォーマンス問題の根本原因を調査するために私が取るべき措置は何ですか? 上位のクエリ結果は合計待機統計であり、下位のクエリ結果は1時間の統計です。

2
このクエリをリファクタリングして、並列に実行できますか?
サーバーで実行するのに約3時間かかるクエリがありますが、並列処理を利用していません。(で約115万レコード、dbo.Deidentifiedで300レコードdbo.NamesMultiWord)。サーバーは8つのコアにアクセスできます。 UPDATE dbo.Deidentified WITH (TABLOCK) SET IndexedXml = dbo.ReplaceMultiWord(IndexedXml), DE461 = dbo.ReplaceMultiWord(DE461), DE87 = dbo.ReplaceMultiWord(DE87), DE15 = dbo.ReplaceMultiWord(DE15) WHERE InProcess = 1; そしてReplaceMultiword、次のように定義された手順です。 SELECT @body = REPLACE(@body,Names,Replacement) FROM dbo.NamesMultiWord ORDER BY [WordLength] DESC RETURN @body --NVARCHAR(MAX) ReplaceMultiword並行計画の形成を防ぐことへの呼びかけはありますか?これを書き換えて並列処理を可能にする方法はありますか? ReplaceMultiword 置換の一部は他の置換の短いバージョンであり、最長一致が成功するようにするため、降順で実行されます。 たとえば、「ジョージワシントン大学」と「ワシントン大学」の他の大学があります。「ワシントン大学」の試合が最初であれば、「ジョージ」は取り残されます。 技術的にはCLRを使用できますが、その方法はよくわかりません。

4
CXPACKET待機の処理-並列処理のコストしきい値の設定
Sharepointサイトのトラブルシューティングに関する以前の質問のフォローアップとして、CXPACKETの待機について何かできるかどうか疑問に思いました。 ひざまずく解決策は、MAXDOPを1に設定することですべての並列処理をオフにすることであることを知っています。これは悪い考えのように聞こえます。しかし、別のアイデアは、並列処理が開始される前にコストのしきい値を増やすことです。実行計画のコストのデフォルトの5はかなり低いです。 だから私は、実行計画コストが最も高いクエリを見つけるクエリがすでに書かれているのだろうかと思っていました(実行期間などが最も長いクエリを見つけることができることを知っていますが、実行プランのコストはどこかで取得可能です、また、そのようなクエリが並行して実行されたかどうかも教えてくれます。 誰かがそのようなスクリプトを手元に持っていますか、またはこれを見つけるために関連するDMV、DMFまたは他のシステムカタログビューの方向に私を向けることができますか?

3
GROUP BY句を使用した場合よりも、GROUP BY句を使用した場合の方が、集計クエリが大幅に高速になるのはなぜですか?
GROUP BY句を使用しない場合よりも、句を使用した場合に集計クエリの方がはるかに高速に実行される理由を知りたいのです。 たとえば、このクエリの実行には約10秒かかります SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 これは1秒もかかりませんが SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 GROUP BY CreatedDate CreatedDateこの場合は1つしかないため、グループ化されたクエリは、グループ化されていないクエリと同じ結果を返します。 2つのクエリの実行プランが異なることに気付きました-2番目のクエリは並列処理を使用しますが、最初のクエリは使用しません。 GROUP BY句がない場合、SQLサーバーが集計クエリを異なる方法で評価するのは正常ですか?また、GROUP BY句を使用せずに最初のクエリのパフォーマンスを改善するためにできることはありますか? 編集 OPTION(querytraceon 8649)並列処理のコストオーバーヘッドを0に設定するために使用できることを学びました。これにより、クエリで並列処理が使用され、ランタイムが2秒に短縮されます。 SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 OPTION(querytraceon 8649) クエリはユーザーの選択時に値を入力することを目的としているため、実行時間を短くしたいので、グループ化されたクエリのように瞬時に実行するのが理想的です。今はクエリをラップしていますが、それが理想的なソリューションではないことはわかっています。 SELECT Min(CreatedDate) FROM ( SELECT Min(CreatedDate) as CreatedDate …

2
MAXDOP = 1、クエリヒントと並列処理のコストしきい値
インスタンスがMAXDOP1に設定されていて、クエリヒントを使用して特定のクエリを並列化できる場合、SQLは並列処理のコストしきい値を使用して、実際に並列化するかどうかを決定しますか? このリンクはCTFP MAXDOPが1の場合は無視されることを示唆していますが、私はこの特定の情報を掘り下げることができませんでした。これは、クエリのヒントなしでは意味がありませんMAXDOP。 これら2つのリクエストの予想される動作を誰かに教えてもらえますか? 例1: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 30 例2: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 70

2
Parallelism Exchangeイベントのデッドロックが被害者なしである場合、それは問題ですか?
実稼働環境(SQL Server 2012 SP2-はい...わかっています...)にこれらのクエリ内並列スレッドデッドロックが多数見られますが、拡張イベントを介してキャプチャされたデッドロックXMLを見ると、犠牲者リストは空です。 <victim-list /> デッドロックは4つのスレッドの間にあり、2つはWaitType="e_waitPipeNewRow"、2つはWaitType="e_waitPipeGetRow"。 <resource-list> <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19"> <owner-list> <owner id="process4649868" /> </owner-list> <waiter-list> <waiter id="process40eb498" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21"> <owner-list> <owner id="process368ecf8" /> </owner-list> <waiter-list> <waiter id="process46a0cf8" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe13904cb4e0" WaitType="e_waitPipeGetRow" nodeId="19"> <owner-list> <owner id="process40eb498" /> </owner-list> <waiter-list> <waiter id="process368ecf8" …

2
Parallel Scalar UDFのサポートは妥当な機能リクエストですか?
スカラーUDFが全体的なシリアルプランを強制することはかなりよく文書化されています。 関数の並列実行 UDFを計算する必要があるパイプラインのポイントに入る行の数が多い場合、エンジンがそれらをプロセッサー間で単に分散できないのはなぜですか?UDF内に状態がない場合、順序は関係ありません。 UDFがブラックボックスであるため、カーソルを使用する必要があるという主張があります。反復間で一部の状態が維持されている場合、SP内でユーザーカーソルを並列化できませんが、それ以外の場合は並列化可能であるように見えます。 エンジンがUDF計算ステージだけでなく、全体の計画をシリアルにする理由を説明するための追加のポイント。 並列UDFのサポートは、要求するのに妥当な機能ですか?

2
Debianで単一のMySQLクエリに複数のコアを使用する
ゲストOSとしてDebianを使用するVM(VMWare)でテスト用のMySQLサーバーを実行しています。ゲストには4つのエミュレートされたCPUコアがあるため、thread_concurrencyを4に設定しました。 数分かかる可能性のある大きなテーブルで高価な結合を行っていますが、ゲストOSで一度に使用されるコアは1つだけです。これは、関係するテーブルに使用されているストレージエンジンに関係なく発生します(MyISAMおよびInnoDBでテスト済み)。さらに、これらの大きなクエリを実行すると、データベース全体がブロックされているように見えるため、追加のクエリを並行して実行することはできません。奇妙なことに、htopは、クエリに使用されるコアがクエリの実行中に変化することを示しています! なぜこれが起こるのですか? これは関連するエントリですSHOW FULL PROCESSLIST;(他のクエリはありません)。 | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp table | SELECT DISTINCT * FROM `pulse_stocks`.`stocks` sto, `pulse_new`.`security` sec WHERE (sto.excntry = sec.excntry AND sto.stock_id = sec.ibtic) OR ( sto.isin = sec.isin AND sto.isin <> "" AND …

3
並列実行のためにスカラー関数をTVF関数に変換-引き続きシリアルモードで実行
の私のクエリの1つは、リリース後にシリアル実行モードで実行されていましたが、アプリケーションから生成されたLINQ to SQLクエリで参照されるビューで2つの新しい関数が使用されていることに気付きました。そのため、これらのSCALAR関数をTVF関数に変換しましたが、クエリはシリアルモードで実行されています。 以前、他のいくつかのクエリでスカラーからTVFへの変換を実行し、強制的なシリアル実行の問題を解決しました。 これがスカラー関数です: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER JOIN Event1 r WITH (NOLOCK) ON (cis.Event1Id = r.Id) WHERE (r.EventNumber = …

2
単一の行をアンピボットするときに、役に立たない並列分岐をどのようにして取り除くことができますか?
少数のスカラー集計をアンピボットする次のクエリを考えてみます。 SELECT A, B FROM ( SELECT MAX(CASE WHEN ID = 1 THEN 1 ELSE 0 END) VAL1 , MAX(CASE WHEN ID = 2 THEN 1 ELSE 0 END) VAL2 , MAX(CASE WHEN ID = 3 THEN 1 ELSE 0 END) VAL3 , MAX(CASE WHEN ID = 4 THEN 1 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.