問題タブ [table-lock]
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.
oracle - Oracle インデックス - 全テーブル スキャン/ロック
ここでこれを見つけました:
一般に、次のいずれかの状況では、列にインデックスを作成することを検討してください。
- 1 つまたは複数のインデックス付きの列に参照整合性制約が存在します。インデックスは、親テーブルの主キーを更新したり、親テーブルにマージしたり、親テーブルから削除したりする場合に必要となる完全なテーブル ロックを回避する手段です。
このような状況でテーブル全体のロックが発生する理由がわかりません。親テーブルの主キーを削除/更新しようとすると、子テーブルで完全なテーブルスキャンが実行されると思いました。
ロックはどこから来るのですか?
mysql - mysql データベースのインポート中にエラーが発生しました
プロダクションからDBのダンプを取りました。ローカル データベースにインポートしたい
しかし、それはいくつかのエラーを示しています
25 行目の ERROR 1005 (HY000): テーブル 'table_account' を作成できません (errno:13)
また、テーブルをインポートできません。この問題は、特定のデータベースをインポートしようとすると発生します。他のデータベースをインポートしようとしました。それは正常に動作します。
誰でもこれを解決できますか。
前もって感謝します。
mysql - Web サーバー レベルでの MySQL テーブルのロック
Web アプリ (サーバー側で Django を使用) があり、ユーザーの 1 人 (管理者のようなユーザー"A" ) が特定のビュー (Web ページ) を読み込めるようにして、データベース テーブルを変更できるとします。ユーザーAが終了するまで(ページ上の特定のボタンを押すまで)、他のユーザーがデータベース(およびデータベースの変更に関連するビュー)にアクセスできないようにします。私はMySQLとSQLite(開発用)を使用しています。これが私の質問です。
テーブルをロックする MySQL メカニズムは、Web サーバー レベルではなく、MySQL サーバー レベルで機能します。アプリケーション サーバー (Django) 側には、MySQL サーバーに関連付けられた MySQL ユーザーが 1 つしかないため (つまり、すべてのアプリ ユーザーが MySQL 側で同じユーザーを持つことになります)、そのメカニズムはここでは関係ありません。私は正しいですか?
1. 上記が正しい場合、そのようなロックを作成する正しい方法は何ですか? まあ、単一のブールエントリを持つ別のテーブル「lock_table」を作成でき、すべてのビューがそれをポーリングし、設定されている場合は「一時的にロックされたデータベース」ビューにリダイレクトします。しかし、それが良い方法かどうかはわかりません。ご存知の方、実装方法を教えてください。
ありがとう。
php - 複数のプロセスから同じレコードを更新していないことを確認するにはどうすればよいですか? テーブルロックは必要ですか?
MySQL データベースをバックエンド (PHP からアクセス) として使用するプロジェクトに取り組んでいます。ときどき、行を選択して操作を行い、データベース内のレコードを更新します。
別のユーザーが最初の選択の直後に同じ行で同様のプロセスを開始した可能性があり、その変更によって最初のユーザーが行った変更の一部が上書きされる可能性があるのではないかと心配しています (2 番目のユーザーの選択にはまだそれらの変更が含まれていないため)。
これは実際の問題ですか?テーブルをロックする必要がありますか?これはアプリケーションのパフォーマンスに深刻な影響を与えませんか? 他の解決策はありますか?
私の情報を徹底するために、同じデータを変更している可能性のある CRON ジョブもいくつか実行しています。
ありがとう!
c# - SQL 接続/コマンドの適切な管理 (テーブルのロックを回避するため)?
.NET プロジェクト用の接続ファクトリを設定していますが、最適な方法を教えてください。以前の Log クラスがテーブルの LOCKS のためにログを適切に書き込めないという問題があります (または彼らが言うように)。そのため、(うまくいけば) 他のいくつかのマイナーに沿ってこれを解決する新しいデータ層をセットアップすることを任されています。問題。
今のところ、コード:
私はほとんどの手順を使用しますが、1 つまたは別の奇妙な要求がある可能性があり、必要に応じてクエリを入力するため、何らかの方法で SqlCommand を追加する必要があると思います。
しかし、このコマンドは静的である必要がありますか? または、新しいクエリが実行されるたびに新しいクエリを作成する必要がありますか? 主にロックを回避することを考えていますが、複数のコマンドまたは複数の接続のみが原因である可能性がありますか? どうすればこれを回避し、適切に対処できますか?
c# - asp.netを使用してsqlserverでテーブルをロックするための可能な解決策
複数の PC で共有されるデータベースを使用するソフトウェアに取り組んでいます。プロジェクトは、行方不明の手荷物情報を保存しようとしています。新しく挿入されたレコードをマスター DB にコピーする機能を提供しました。ここで何が起こるかというと、複数のユーザーが同時にデータベースを更新しようとすると、単一のアイテムがグローバル DB に複数回格納されます。
だから私はシリアル化可能なを使用して TableLock を使用しようとしましたが、ここでは何も得られませんでした。
編集
そして updateitem() は次のとおりです
PS: ASP.Net で実行したいです。
php - テーブル ロックを使用して並列実行を防止する (MySQL)
必要なすべての cronjob の全体を保持する cronjobs という MySQL テーブルがあります (たとえば、古い電子メールの削除、プロファイルの年齢の更新など)。すべての cronjob には、cronjob の期限が来た場合に実行される定義済みのコード ブロックがあります (異なる cronjobs に対して異なる間隔を取得しました)。
due cronjobs の実行のために、UNIX crontab によって毎分実行される PHP スクリプトを取得しました (「php -f /path/to/file/execute_cronjobs_due.php」を呼び出す execute_cronjobs_due.sh を呼び出します)。
execute_cronjobs_due.php を実行すると、すべての cronjobs が実行されることがマークされるため、execute_cronjobs_due.php の別の呼び出しによって、同じ cronjobs が既に実行されている並列実行が発生することはありません。
ここでの問題: 実行に 60 秒以上かかる場合がありますが、crontab プログラムは 60 秒後に execute_cronjobs_due.sh を呼び出しません。実際に起こることは、execute_cronjobs_due.sh が、前の crontab の実行の実行の直後に呼び出されることです。また、実行に 120 秒以上かかる場合は、次の 2 つの実行が同時に初期化されます。
タイムライン:
2015-06-15 10:00:00: execute_cronjobs_due.sh の実行 (140 秒かかります)
2015-06-15 10:02:20: execute_cronjobs_due.sh の 2 つの同時実行
正確に同時に実行されるため、selects(実際にはマークされた1回を除外する必要があります)がまったく同時に実行されるため、実行中のcronjobをマークする必要はありません。そのため、更新は、両方が予定されている cronjobs を既に選択した直後に行われます。
cron ジョブが同時に実行されないようにするには、どうすればこの問題を解決できますか? MySQL テーブルロックを使用できますか?
事前にご連絡いただき、誠にありがとうございました。
フレデリック
delete-row - DELETES を無効にするための明示的なテーブル ロック?
Oracle 11gR2 の使用:
特定のテーブルから、指定された保持日を過ぎたレコードを削除することで、特定のテーブルをクリーンアップするプロセスが既にあります (レコードの処理が終了したときのタイムスタンプと保持日の比較に基づきます)。現在、このプロセスが失敗した場合にチームに警告するコードを作成しています。このプロセスが失敗する可能性があることを確認できる唯一の方法は、クリーンアップしようとしている特定のテーブルで DELETE が無効になっている場合です。
アラートをテストして、プロセスを失敗させてアラートが機能し、正しく表示されることを確認したいと考えています。テーブルを一時的に排他的にロックすると、DELETE が無効になり、レコードを削除する手順が失敗しますか? それとも、DDL 操作を無効にするだけですか? これを行うより良い方法はありますか?