問題タブ [database-locking]

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.

0 投票する
3 に答える
146 参照

sql - データベースのロックを使用して、まだ使用されていない単一のレコードをランダムに返す正しい方法

レコードがテーブルから削除されないことを除いて、キューのように機能するテーブルがあります。私が試みているのは、現在フロント エンド アプリケーションから処理されていない単一のレコードをストアド プロシージャに返させることです。これを示すために設定した「ロック済み」列があります。これを行っている理由は、一度に 1 人のコール センター エージェントだけがレコードを処理できるようにするためです。これが私のSQLがこれまでにどのように見えるかです。問題は、このクエリを 2 つの別々のセッションから実行した場合 (2 番目のセッションが waitfor ステートメントをコメントアウトした場合)、2 番目のセッションが 10 秒間レコードを返さないことです。レコードを選択する際の order by 句に絞り込みました。オーダーバイを削除すると返されますが、オーダーバイが必要です。

それとも、私のクエリが完全に間違っているのでしょうか? トランザクション分離レベル (シリアル化可能、スナップショット) を使用する必要がありますか?? どんなガイダンスも素晴らしいでしょう!

0 投票する
2 に答える
1462 参照

sql-server - SQL Server のストアド プロシージャへの同時アクセスを防止する

私は3つの列で構成されるシーケンステーブルを持っています:

番号、年、種類

そして、新しい年ごとに 3 つの新しいレコードが作成され、今年を通して更新されます。

シーケンスを生成するためのストアド プロシージャは、他のストアド プロシージャ内で使用されます。私の問題は、このストアド プロシージャへの同時アクセスをブロックし、アクセスをキューとして作成することです。したがって、同時アクセスが発生した場合は、別のストアド プロシージャが終了するまで待機する必要があります。 2 人のユーザーが同じシーケンス番号を取得しない場合、コードは次のようになります。

分離レベルをシリアライズ可能に設定すると解決する可能性があることを読みましたが、それで十分ですか、それともストアドプロシージャでトランザクションの開始と終了を使用し、ロールバックとコミットを手動で処理する必要がありますか?

0 投票する
0 に答える
3507 参照

spring - 2 ノード クラスタでの Quartz スケジューラの db ロック取得の問題

Spring 4.0.5 を使用して Quartz Scheduler 2.2.1 を実装しました。アプリケーションは単一ノードで正常に起動しますが、2 ノード クラスターにデプロイしようとすると、DB に接続しようとしてハングアップし、サーバーはデプロイを両方のノードにロールバックします。

興味深いことに、Quartz データベースに接続する最初のノードは正常に起動し、2 番目のノードはハングするだけで、2 番目のデプロイのタイムアウトにより、両方がロールバックされます。

トレース スニペットが機能するノード:

作業インスタンス:

2 番目のノード トレース スニペットは次の場所で停止します。

次にタイムアウトします。

ロックの問題なしに Quartz Scheduler を 2 ノード クラスタにデプロイしたことがある場合は、この問題についての洞察をいただければ幸いです。

石英の特性:

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.isClustered=true org.quartz.jobStore.clusterCheckinInterval=10000 org.quartz.jobStore.tablePrefix=WHSE12_ org.quartz.jobStore. driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount=10 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true org.quartz. scheduler.userTransactionURL=java:jboss/UserTransaction org.quartz.scheduler.wrapJobExecutionInUserTransaction = false org.quartz.jobStore.dontSetAutoCommitFalse=false org.quartz.scheduler.instanceId=AUTO org.quartz.jobStore.misfireThreshold=10000 org.quartz.jobStore .useProperties=true org.quartz.scheduler.interruptJobsOnShutdown=true org.quartz.scheduler.skipUpdateCheck=真 org.quartz.jobStore.txIsolationLevelSerializable=偽 org.quartz.jobStore.acquireTriggersWithinLock=偽triggerFiredMessage=トリガー {1}.{0} がジョブ {6}.{5} を {4, date,yyyy-MM-dd HH:mm:ss} に起動しました org.quartz.plugin.triggHistory.triggerCompleteMessage=トリガー {1} .{0} がジョブ {6}.{5} の起動を {4,date, yyyy-MM-dd HH:mm:ss} で完了し、トリガー命令コードが生成されました{5} at {4, date,yyyy-MM-dd HH:mm:ss} org.quartz.plugin.triggHistory.triggerCompleteMessage=トリガー {1}.{0} がジョブ {6}.{5} の起動を完了しました { 4,date, yyyy-MM-dd HH:mm:ss} と結果のトリガー命令コード{5} at {4, date,yyyy-MM-dd HH:mm:ss} org.quartz.plugin.triggHistory.triggerCompleteMessage=トリガー {1}.{0} がジョブ {6}.{5} の起動を完了しました { 4,date, yyyy-MM-dd HH:mm:ss} と結果のトリガー命令コード

Quartz DataSource は、ローカル トランザクション用の JNDI ベースであり、JBOSS EAP 6.3.0 で JTA =false、CCM=false を使用します。

タイムアウトすると、次のようになります。


0 投票する
1 に答える
1667 参照

java - 複数のJVMが同じデータベースにアクセスするときに、Javaで行レベルのロックを取得する方法は?

異なる JVM で実行されている同じアプリケーションの 3 つのインスタンスがあります。データベース内の特定の値が異なるアプリケーションによって同時に変更されることは望ましくありません。Javaでこの制限を適用するにはどうすればよいですか?

0 投票する
1 に答える
294 参照

node.js - Node.js での非同期データベースの問題

要素がデータベース内にあるかどうかを確認するために、sqlite3 を使用して Express なしでノード サーバー上で実行されているデータベースにクエリを実行しようとしています。この要素が存在するかどうかを確認すると、この情報を使用して別のテーブルにアクセスします。

1) checkSessionID を実行して、sessionID がデータベースの sessionIDs テーブルにあるかどうかを確認します。2) 次に、コールバック関数を呼び出して、セッション ID に関連付けられたユーザー名を保存します。

ただし、コールバックが非同期であるため、「ユーザー名」が更新される前にデータベースにアクセスしています。

これを解決するために、データベース クエリをコールバック関数内に移動することはできません。データベースがロックされているため、エラーが発生するためです。

助けてくれてありがとう。

編集

db をグローバル変数として宣言し、すべてのプロセスが完了した後に閉じることで、なんとか解決しました。

0 投票する
1 に答える
5069 参照

multithreading - エラスティックサーチのロック

私はグーグルで見つけようとしましたが、成功しませんでした。

マルチスレッド環境またはマルチプロセス環境を処理するためにエラスティック検索がロックを取得するレベルを誰か説明できますか?

インデックスまたは doctype にあるか、doc-type 内の特定のドキュメントにあるか?

0 投票する
1 に答える
221 参照

c# - データベースはロックされています C# の SQLite dll

私は以下のコードを持っています:

この行: _id = (long)ClonedSimulationDbCommand.ExecuteScalar(); データベース ロックの例外を受け取る

接続が開いており、データベースへのパスが存在し、有効です。同じデータベースへの接続を開いているという事実が問題かもしれないと思います。

SQL ステートメントは次のとおりです。

ありがとうございました!