問題タブ [spid]
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 - SQL spid を強制終了した後のデータの損失
初心者の DBA である私にとって、これは非常に危険な状況です。
アクティビティ モニター画面でデッドロックが発生している場合、クエリが終了せず、サスペンド状態とヘッド ブロックのままである場合は、その spid を強制終了する必要があります。常にではありませんが、まれに、spid を強制終了した後、 database から大量のデータが失われます。ロックの最初から殺すまでデータが失われると思います。私が理解しているように、Sqlサーバーはすぐにデータを保存しないので、しばらく待って(おそらく15分ごとに何らかのサイクル)、すべてが問題ないと判断したときにデータを保存します。
たとえば、フル バックアップは 6 時間ごとに、トランザクション バックアップは 10 分ごとに行いました。昨夜、何らかの理由で 00:00 にバックアップを取ることができず、その spid はサスペンド状態で待機していました。朝の08:30にそのspidを殺したとき、00:00から08:30までのすべてのテーブルからすべてのデータを失いました..
完全復旧モデルがあり、MSqlServer2012 を使用しています。
本番データベースのデータを失うことは、非常に大きなリスクです。私の質問は; spid を強制終了する前に SQL が本当にデータを保存したかどうか、どうすれば確認できますか?
sql - SQL Server クエリ タイムアウト
SQL Server 2012 データベースにアクセスするサード パーティ製アプリケーション[Microsoft][ODBC SQL Server Driver]Query timeout expired
を約 20 分間実行すると、エラーが発生します。
これは、アプリケーションがエラーを受け取り始めた後にデータベースに表示されるものです。
SPID 102 は、上記のクエリには表示されません。同じプロセスの同じアプリケーションからの別の接続です。以下のスクリーンショットで、この詳細をキャプチャすることができました。このスクリーンショットの一番上の行にあるものです。スクリーンショットを撮るときにスクロールバーが右に移動したことをお詫びします。
AutoShrink
TRUE
これが発生したとき、このデータベースでは に設定されていました。
次のようになります。
後で開始されたサード パーティ製アプリケーションからの複数の接続が SPID 27 で待機しています。これは AUTOSHIRNK コマンドです。
SPID 27 は、同じサードパーティ アプリケーションからの別の接続である SPID 102 を待機しています。
質問:
SPID 27 との接続がデータベース
AutoShirnk
に設定されてから作成されたかどうかを確認する方法はありますか?TRUE
その場合、なぜ SPID 102 で待機し、他の接続 (83、85、86、88、および 90) が 27 で待機しているのはなぜですか?
以下のリンクにある TechNet の記事によると、AutoShrink はデータベース上のアクティビティに影響を与えるべきではありません。
データベースの AUTO_SHRINK オプションが ON に設定されている場合、データベース エンジンはデータベース内のファイルのサイズを縮小します。このアクティビティはバックグラウンドで発生し、データベース内のユーザー アクティビティには影響しません。
ノート:
これは現在、この問題が発生する SQL Server 2012 SP1 で実行されています。
アプリケーションのこのプロセスは、アプリケーションが SQL Server 2008 SP3 上のデータベースから実行されている場合に正常に機能します。
sql - C# マルチスレッド SQL 呼び出しが同じ SPID を使用しないようにする
背景として、SQL 2008 サーバーを実行しているローカル サービスがあり、1 晩あたり約 1600 個の小さな csv ファイルをインポートします。昨日の午後 11 時 30 分頃、問題なく実行され、1 分間に 5 ~ 10 個のファイルがプッシュされていましたが、今朝調べてみると、まだ 400 個以上のファイルがキューにあることに気付きました。
ファイルを 15 のバッチ (サービス中の 15 の個別のスレッド) でプッシュし、99% の時間で問題はありません。今朝、読み込み中としてマークされたファイルが 15 個あり、アクティブな SPID が 1 つしかないことに気付きました。プロファイラーを確認し、サービスをコンソール アプリとして実行した後、何らかの理由で SQL がすべての呼び出しを同じ SPID にメッシュ化することを決定したことに気付きました。
昨夜は更新やメンテナンスは行われませんでした。エラーは報告されず、通常の実行でした。
SQL がこれらすべての呼び出しを突然 1 つの SPID にパッケージ化する原因を知っている人はいますか?
ファイルをプッシュするサービスは 18 か月以上変更されていないため、SQL 側の問題であると確信しています。
私たちは SaaS 企業なので、今夜の午前 2 時から 3 時まで SQL サービスをバウンスできませんが、そうする予定です。
sql - ストアド プロシージャの実行ごとに一意の SPID
WebApi2 と SQL Server 2008 を使用して angularjs .net アプリケーションを構築しています。ページが読み込まれると、複数の ajax 呼び出しが WebApi に送信されます。次に、WebApi はこれらの呼び出しを Sql サーバーに渡しますが、SQL プロファイラーを調べると、db へのすべての呼び出しが同じ SPID で実行されます。これは、ストアド プロシージャの並列実行ではなく順次実行であると考えられます。Firefox ブラウザーのネットワーク モニター タブを見た後でも、これらの呼び出しはすべて、同時にではなく次々に返されます。angular は並列要求を webapi に送信しますが、SQL サーバーは各要求を順番に実行するため、システムにボトルネックが生じる可能性があります。平行ではなく。私はデータ アクセス アプリケーション ブロック v6.0 を使用し、接続オブジェクトとコマンド オブジェクトを "Using" スコープに配置しました。それでも、同じSPIDですべてのstoredprocを起動します。
linq - Entity Framework で LINQ の後に SPID を削除する
Entity Framework を使用して MS SQL データベースと対話するアプリケーションがあります。その中で、ブロックを使用して内部の Dbcontext を呼び出します。私が抱えている問題は、Dbcontext が破棄された後でも、アプリケーションが終了するまで SPID がスリープ状態のままになることです。これらのハングしている SPID を削除するにはどうすればよいですか?
sql-server - プロセス/SPID 自体がブロックされています。Sql Server を再起動せずにクリア/強制終了する方法
4 時間実行されていたプロセスがあります。非常に長時間実行されていたため、データベースで他の問題が発生していたため、プロセスを強制終了することにしました。
現在、プロセスは中断状態にあります。また、sp_who2 を照会した後、それ自体がブロックされていることも示しています。
アクティビティ モニターでは、waitresource 情報は次のとおりです。
objectlock lockPartition=0 objid=xxx subresource=FULL dbid=2 id=lockyyyy mode=X associatedObjectid=xxx
objid と associatedObjectId が同じ値であることがわかります。
sys.objects テーブルを照会しても、そのオブジェクト ID の結果は表示されません。
Sql Server は、もう存在しないオブジェクトのロックを待っていますか? Sql Server を再起動せずにこのプロセスを取り除くにはどうすればよいですか? (DBA はヘルプ リクエストに応答していません)。
これはテスト環境ですが、変更の 1 つがプロセスがアクセスしていたオブジェクトの 1 つに影響を与えているため、データベースに変更をデプロイできないため、すべての開発/テストが停止していることに注意してください。
編集: アクティビティ モニターからの詳細情報: Command = 'KILLED/ROLLBACK' TASK STATE = 'SUSPENDED'
sql-server - SQL Server ログ - ソース (SPID)
Log File Viewer で注目すべきイベントをチェックしていると、調査したいログが見つかりました。
ログにソースが SPID1234 として記録されているとします。
私の質問: この SPID は、ログを生成した実際の接続に関連付けられていますか、それとも、これをログに書き込んでいるプロセスに関連付けられた SPID ですか?
sql-server - SPID で最も多くのメモリを使用しているプロセスを見つけるにはどうすればよいですか?
SPID で最も多くのメモリを使用しているプロセスを見つけたいのですが、SQL Server でも可能ですか? もしそうなら、クエリは何になりますか?