問題タブ [service-broker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 毒メッセージなしでキューが停止(無効化)
明らかに理由もなく停止するキューがあります。このキューに、位置メッセージ処理を実装しました。また、処理中に、毒メッセージを記録して破棄します。
それは止まることなく1年以上うまく機能しました。しかし最近(問題は4週間前に始まりました)、週に1、2回停止します。そして今週だけそれは二度止まった。
そして、新しい毒メッセージでテーブルをチェックすると、何もありません!! また、キューを有効にすると、処理が正常に再開され、「ポイズンメッセージ」の状況が再現されません。
キューのタスクについて:1日あたり約2〜3000のメッセージを受信します。トランザクションの外部でストアドプロシージャを実行するために使用されます。そして、各メッセージは処理されるまで少し続く可能性があります(多くの選択、挿入、更新を行います)。
この点を説明しましょう。データベースにはトランザクション内で起動されるトリガーがあり、トリガーはトリガーの外部でコードを実行するためのメッセージを送信します。非同期動作により、データベースのパフォーマンスが低下するのを防ぎます。
メッセージの処理中にデッドロックが発生した場合でも、キューはメッセージをポイズンとして処理することを検出しました。したがって、原則として、パフォーマンスの問題にはなりません。しかし、それは可能ですか?たぶん、データベースは成長していて、メッセージを処理するには長すぎますか?
しかし、それがposionedとして検出されない場合、どうすればそれを見つけることができますか?
キューが停止する他の理由はなぜですか?
キューが無効になったときとメッセージを保存するにはどうすればよいですか?
フォレンジック分析を行う方法を誰かが知っていますか?
何か案が?
疑似解決策を公開する更新:
Remusの投稿によると、私はイベント通知を使用して、キューが停止する正確な瞬間を取得しようとしました。
次に、イベントログを確認します。
しかし、イベントが発生した環境を知ることは困難であるため(その瞬間に他に何が実行されていたのか??)、フォレンジック分析はそこで終了します。幸い、私のブローカーサービスの実装では、出荷日、受信日、処理日などのメッセージが保存されます。これにより、3秒以内に、処理に時間がかかりすぎる数百のメッセージがキューに殺到していることを検出できました。 。
私は実際の解決策を見つけましたが、唯一の一時的な解決策は、x分ごとにエージェントジョブでキューのステータスを確認し、それを有効にすることです。
レムスありがとう!
sql-server - EndDialogメッセージがTARGET送信キューでスタックし、会話エンドポイントがDISCONNECTED_OUTBOUND状態になっている
EndDialogメッセージは、TARGET(リモート)送信キューでスタックします。各エントリのtransmission_statusは空白です。
イニシエーターは実際にEndDialogメッセージを受信し、その側でダイアログを終了しています。
INITIATORサービスの応答キュープロシージャにPRINTを配置したので、確かにそれを知っています。ログは、INITIATORがEndDialogメッセージを受信した結果としてこれらのプロシージャが実行されていることを示しています。
TARGETでは、会話エンドポイントエントリがDO状態のままであり、EndDialogメッセージもTARGET送信キューに残っていることを除いて、すべてが機能します。
TARGETがenddialogメッセージのINITIATORからACKを取得していないようです。
TARGETで、BROKER:CONVERSATIONトレースは、STARTED_INBOUND、CONVERSING、DISCONNECTED_OUTBOUNDの状態を示します。
構成に従ってください:
ターゲット:Windows Server 2003 R2 Standard 64エディションSP2、SQL Server 2008 SP2、Standard Edition 64ビット、互換モード100のデータベース
イニシエーター:Windows XP SP2、SQL Server 2005 Express SP2、互換モード80のデータベース。
この問題を解決する方法について何かアドバイスはありますか?
sql-server - ssbdiagnose はどこにありますか
SQL Server でサービス ブローカーを診断するためのこのユーティリティを入手できる場所はありますか。
sql-server-2008 - ServiceBroker外部アクティベーター...2つのキューでアクティベートしますか?
2つのキューがあり、さらに多くのキューがあります...外部アクティベーターを使用してこれらのキューを外部でアクティブにしたいです。
EAService.configを編集してqueue#1をアクティブ化すると、正常に機能します。
EAService.configを編集してqueue#2をアクティブ化すると、正常に機能します。
両方を構成に入れると、最初にリストされているものだけがアクティブになります。
両方のキューは実際には同じexeファイルによって処理されています...そして機能しない例はこれです...
さらに、id = "100"が何をしているのかわかりません...同じ#と異なる#...つまり100と101を試してみましたが、違いはありませんでした。アクティベーターサービスは、「ApplicationServiceList」にリストされている最初のサービスに対してのみ機能します
ヘルプ!
sql-server - NEW_BROKERからランダムなものを取得する代わりに、service_broker_guidを指定します
SQL 2008では、次の方法で与えられたGUIDを単純に取得する代わりに、service_broker_guidを指定する方法があります。
私たちの現在の(私の意見では壊れた)リリース方法は、相互依存関係にある2つのデータベースを復元することです。1つは「ソース」データベースであり、もう1つはスタースキーマBIデータベースです。回帰テスト計画の一部は、異なるサーバー間、さらには同じサーバー上でも、両方のデータベースのバックアップを「ゴールド」状態で復元することです。
ほとんどの場所ではBROKER_INSTANCE変数は必要ないため、通常、ルートにはBROKER_INSTANCE変数を含めません(つまり、SERVICE_NAMEとADDRESSの組み合わせで配信を保証できます)。ただし、両方がブローカーを有効にして同じインスタンスで2つのデータベースを実行している場合、そのうちの1つに新しいBROKER_IDが必要になります。さらに、同じADDRESSに2つのSERVICE_NAMEがあるため、これらのデータベースへのすべてのルートにBROKER_INSTANCE修飾子が必要になります。
Visual Studio Database Professionalを使用してビルド出力スクリプトを生成します。事前に知っていない限り、SQLCMD変数置換手法の一部としてBROKER_INSTANCEを含める簡単な方法はありません。
sql - 外部アプリに通知するための SQL Service Broker
Service Broker をよく検索した結果、次の質問と回答に出会いました。
私のシナリオは、テーブルに SQL トリガーがあり、このトリガーで xp_cmdshell を呼び出して主キー情報を外部の exe に渡すという点で、そこに記載されているものと似ています。
テーブルでトリガーを使用する代わりに、Service Broker キューとサービスをセットアップすることの価値を理解できます。私が理解しているように、キュー内のメッセージを処理するために設定したアクティブ化 sproc には、xp_cmdshell への呼び出しが含まれます。
ただし、「テーブル内のデータへの変更」イベントをトリガー イベントとしてフックする方法がわかりません。CREATE EVENT NOTIFICATION
私はその条項にその一部があることを期待しますON TABLE [x] FOR [INSERT|UPDATE]
が、そうではありません。
任意のポインタをいただければ幸いです。
sql-server - ネストされたトランザクション内での SQL Server Service Broker メッセージの送受信
SQL Server 2008 Service Broker を使用して、ストアド プロシージャによって動的に作成される長時間 (最大約 30 分) のトランザクションの進行状況をログに記録したいと考えています。私には2つの目標があります:
1) トランザクションを構成する動的に作成されたステートメントのリアルタイム ロギングを取得して、トランザクションの進行状況をリモートで監視できるようにするには、
2) ロールバックを必要とする障害が発生した可能性があるポイントまで、トランザクションを構成するステップを確認できるようにするため。
進行状況メッセージをテーブルに記録したい (ストアド プロシージャがロールバックしてもログを残したい) ため、単純にコンソールに PRINT (または RAISERROR(msg,0,0)) することはできません。
しかし、私の理解では、送信スレッドがコミットされるまで (外部トランザクション) メッセージをキューから受信することはできません。これは本当ですか?もしそうなら、どのようなオプションがありますか?
client-server - ポーリングなしのクライアント間のメッセージング
(C ++ / C#)クライアントが接続されたMSSQLサーバーのネットワークが相互に接続されています。そして、私はクライアントとサーバークライアントメッセージングの間のメッセージングの方法を設計することについてです。MS SQLServiceBrokerやApacheQpidなどの他のブローカーについてはすでに読んだことがあります。しかし、それでもこれがどのように機能するかはわかりません。誰かが私にもっと良い情報源を提供してくれるか、誰かがすでにそのような問題に取り組んでいる場合はありがたいです。
クライアント間でメッセージの送受信を不可能にするにはどうすればよいですか?
そして、これが学校の宿題や大学のコースプロジェクトではないことを確認してください。
有益なコメントやアドバイスをいただければ幸いです...
+++ありがとう+++
sql-server-2008 - データベースミラーリングおよびサービスブローカー、ミラールートが機能していません
かなり長い間、サービスブローカーを実行してきました(同じサーバーで実行しています)。次に、2台のサーバー間にデータベースミラーリングを追加します。
これを機能させるには、サービスブローカー用の新しいルートと新しいエンドポイントを作成する必要がありました(フェイルオーバーの場合のミラーリングをサポートするため)。
これは、まったく同じバージョンのWindowsとsql-serverを実行している開発環境で試しました。これは:
Microsoft SQL Server 2008 R2(RTM)-10.50.1734.0(X64)2010年8月11日12:51:02 Copyright(c)Windows NT 6.1(Build7600:)上のMicrosoftCorporationEnterprise Edition(64ビット)
1つの違いは、開発環境が仮想システムで実行されていることです。
これを本番環境に実装すると、開発環境では見られなかった問題が発生しました。
サービスブローカーの更新は非常に遅くなりましたが、一部のメッセージが届いたことがわかりました。
表示されるエラーメッセージは次のとおりです。
ミラールートは機能していません。「TCP://server1.domain.local:4022」は「不明」 []として機能しています。「TCP://server2.domain.local:4022」は「不明」 []として機能しています。
ミラールートは機能していますが、プリンシパルにのみ接続されています。'TCP://server1.domain.local:4022'は'プリンシパル'[]として機能しています。「TCP://server2.domain.local:4022」は「不明」[]として機能しています。
開発サーバーでも、同様のメッセージが表示されました。
ミラールートは機能しています。「TCP://server1.devdomain.local:4022」は「ミラー」として機能しています[]。「TCP://server2.devdomain.local:4022」は「プリンシパル」として機能しています[]。
ミラールートは機能していますが、プリンシパルにのみ接続されています。「TCP://server1.devdomain.local:4022」は「不明」[]として機能しています。「TCP://server2.devdomain.local:4022」は「プリンシパル」として機能しています[]。
ご覧のとおり、ミラールートは本番サーバーでは機能していませんが、開発サーバーでは機能していないというメッセージが表示されます。
データベースミラーリングは、ポート5022、および4022のサービスブローカーを介してセットアップされます。
ルート/エンドポイントがどのように作成されたかの例:
データベースミラーリングエンドポイントを削除すると、すべてが再び正常に機能し始めます。
何か案は?
ありがとう!
visual-studio-2010 - VS2010 データベース プロジェクトに Service Broker を含める方法
Service Broker キューをデータベース プロジェクトに追加しようとしていますが、これを行う最善の方法がよくわかりません。ソリューション エクスプローラーとスキーマ ビューの 2 つのビューを使用できます。関連するすべてのメッセージ/サービス/コントラクトと共にサービス ブローカー キューを取得する唯一の方法は、ソリューション エクスプローラー ビューでキューを追加し、スキーマ ビューで他のすべてを追加することです。
これは正しいです?このすべてに統一された見解はないのでしょうか? データベース プロジェクトに Service Broker を含めるためのベスト プラクティスは何ですか?