• ベストアンサー

本の検索後の文

本のサイトで本の検索後に出てきた文です。 内容分かる方説明してください。 トランザクション (プロセス ID #6) が、ほかのプロセスとデッドロックしました。トランザクションがデッドロックの対象として選択されています。トランザクションを再実行してください。"

質問者が選んだベストアンサー

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

このプログラムは、デバッグがちゃんとされてないため、排他的処理で 不具合が発生したということでしょう。

shouziki777
質問者

お礼

回答ありがとうございます。大変参考になりました。

関連するQ&A

  • デッドロックエラー

    C#からSQLSeverにトランザクションを実行する際に WITH(TABLOCK,XLOCK) を付加していますが、 System.Data.SqlClient.SqlException: トランザクション (プロセス ID 54) が、lock リソースでほかのプロセスとデッドロックしました。トランザクションがデッドロックの対象として選択されています。トランザクションを再実行してください。 というエラーが発生します。 ConnectOpen BeginTransaction SqlDataReader UPDATE or INSERT ExecuteNonQuery CommitCommand ConnectClose という順番で実行しています。 単純な文で単体だと問題ありませんが、 複数から実行すると、エラーが発生します。 なぜデッドロックが発生するのでしょうか?

  • デッドロック

    sqlserver2000に対してクライアントツール用に開発したAccess2000のadpファイルからデータの更新を行うと、以下のようなエラーが発生するのですが、どのような場合以下のエラーが発生するのかご意見を頂きたいと思います。 "トランザクション(プロセスID89)が、lockリソースでほかのプロセスとデッドロックしました。トランザクションがデッドロックの対象として選択されています。トランザクションを再実行してください。"

  • デッドロックでダウンします。どうして?

    お世話になります。教えてください。 Win2KサーバーにてSqlServer2000のデータベースを使い、Win2k・98SEのクライアントで同時10台が稼動するVB6で開発したシステムに於いて、時折以下のメッセージがでて異常終了するクライアントがアチコチで発生して困っています。 「トランザクション(プロセス ID 72)が、lock リソースでほかのプロセスとデッドロックしました。トランザクションがデッドロックの対象として選択されています。トランザクションを再実行してください。」 どうやらデータを更新しているときではないかと思います。 考えられる原因を教えてください。よろしくお願いします。

  • こんなのがでたんですが…

    次のような文章が出てきました。どういうことか簡単に素人にわかるようにお教えください。 『Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server]トランザクション (プロセス ID 461) が、lock | thread リソースでほかのプロセスとデッドロックしました。トランザクションがデッドロックの対象として選択されています。トランザクションを再実行してください。 /prdsearch/inc_detail.asp, 行 485 』 こういうのは放って置いても良いものでしょうか? 最近ネットを見ていてもページがひょう辞されませんというのが良く出て、結構調子が悪いんですが。 どなたかお教えください。,毎度申し訳御座いません。

  • UPDATE文で発生するデッドロックについて、教えてください。

    はじめまして。 SQL SERVER初心者の為、ご指導の程お願いいたします。 UPDATE文で発生するデッドロックについて教えてください。 現在、ストアドプロシージャ内で、 以下のUPDATE文を使用しています。 UPDATE テーブルA SET 更新済フラグ = '1' WHERE ロック時間 =パラメータ.ロック時間 AND ロックユーザー = パラメータ.ロックユーザー AND ID = パラメータ.ID ※Where句に使用する、ロック時間・ロックユーザー・IDは、  キー項目では無く、インデックスも使用しておりません。  ただし、対象データを一意に識別できる項目ではあります。   このストアドを含む処理を、ほぼ同時実行すると このUPDATE文で「LOCK TIMEOUT」が発生し、 デッドロックとなってしまいます。 UPDATEの対象となるデータ件数は、ともに500~600件です また、対策としましてロックのヒント文を下記のように設定し、 WHERE句に設定している、ロック時間・ロックユーザー・IDに 対して、インデックスを作成してみましたが、 同様に、デッドロックが発生してしまいます。 UPDATE テーブルA (with rowlock) SET 更新済フラグ = '1' WHERE ロック時間 = パラメータ.ロック時間 AND ロックユーザー = パラメータ.ロックユーザー AND ID = パラメータ.ID SQL Serverに詳しい方、お力になっていただければ、光栄です。 よろしくお願いいたします。

  • SELECT文でのデッドロックに対しての対処方

    先日よりデッドロックが発生するようになり、確認の為にトレースログを 抽出するように設定かけたのですが、UPDATE文とSELECT文がぶつかり デッドロックが発生している事がわかりました。 しかし、UPDATE文にはトランザクションをかけていますが SELECT文には特にロックかけていない為、どうして起こっているのか わかっていません。 SELECT文を読んでいる時にUPDATE文によって レコードに変更があった為、デッドロックが発生したのでしょうか? SELECT文にはUNLOCKをつけた方がいいのでしょうか? プログラムはDELPHI DBはSQLSERVER2000になります。 お忙しい所申し訳ありません。 宜しくお願い致します。

  • 一括テーブルロック デッドロック対策

    はじめまして。 ken7761227と申します。 SQL Server2008R2でデッドロックが発生しまして、本来であれば、テーブルの 参照、更新順を正しくする修正をすべきなのですが、今からその修正を行うのは 困難なために、更新する側が、使うテーブルをまずTABLOCKXでロックしておく という対策をとることになりました。 ここで、A,B二つのテーブルがあったとし、 SELECT XXX FROM dbo.TableA WITH( TABLOCKX ) UNION SELECT YYY FROM dbo.TableB WITH( TABLOCKX ) というSQLでロックしようとしています。 UNIONを用いたのは、2つのセレクトの間に違うプロセスからの割り込を 防止したかったためです。 (このSQLの実行時にトランザクションをかけて、更新後のコミットまで、 排他ロックをかけようとしています。) TableA,TableBを更新しようとしているプロセス1が、上記SQLを実行しオーナーになります。 プロセス2がTableBをSELECTしようとすると、排他ロックで待たされるはずですよね? 実際ここは待たされていました。 また、プロセス2も更新を行おうとし、上記のSQLを実行すれば、プロセス1のコミット までは、処理が待たされるはずだと思っていたのですが、ここでデッドロックしてしまいます。 原因が全く分からずに困っております。 最終的に、やりたいことは、テーブルの参照、更新の順番を変えずに、デッドロックを 回避することです。テーブルロックをかけかたが、間違っていますでしょうか? また、それ以外に何か良い回避方法がありますでしょうか? どなたか、有識者の方々のご助言頂けないでしょうか。 よろしくお願いいたします。

  • grep でパラレル検索するには

    あるディレクトリいかに置かれているソースコードの中で特定のパターン (文字列) を含むファイルの一覧を取得するのに grep を使って検索してい るのですが、もう少しよい方法がないかと試行錯誤しています。 [現行法] find . -type f | \ while read line; grep -qP pattern "$line" && echo $line; done そこで、使用しているサーバのCPU 数が8であることに目を付け、マルチ プロセスもしくはマルチスレッドの仕組みを用いて8多重でgrepを実行で きる仕組みを考えています。 最初に考えたのは以下のような方法です。 ・pthread を利用する。 ・各レッドで system 関数を使用して grep を実行する。 ・子プロセスは標準入力をパイプから受け取るようにする。 ・検索対象となるファイル一覧の読み込みは mutex を用いて制御する。 →system 関数はシェル経由で grep をコールするようで、オーバーヘッド が気になるなどの理由により却下。 次に考えたのは以下のような方法です。 ・pthread を利用する。 ・各スレッドで fork し、子プロセスで grep を実行する (exec)。 ・子プロセスは標準入力をパイプから受け取るようにする。 ・検索対象となるファイル一覧の読み込みは mutex を用いて制御する。 →デッドロックの問題が解決できずに断念。 pthread で fork を使う場合は直ぐに exec するようにしないとデッド ロックする可能性があるという記事をネット上で見つけました (標準入力 をパイプから受け取るようにする処理があるため直ぐには exec できな い)。で、実際にもそのようになってしまいました。 そして、最終的に考えているのが以下のような方法です。 ・fork を利用する。 ・各プロセスでさらに fork し、孫プロセスで grep を実行する (exec)。 ・孫プロセスは標準入力をパイプから受け取るようにする。 ・検索対象となるファイル一覧の読み込みはセマフォを用いて制御する。 でも、本当にこのようにマルチプロセス+セマフォを使う方法でしか 「grep でパラレル検索」を実現することはできないのでしょうか? pthread で実現することには失敗してしまいましたが、もう少し改良して 成功できないかと考えているのですが・・・。 (かと言って、あちこち mutex でロックしてしまうと、せっかくのスレッ ドが生かされない?)

  • Select文とデッドロックについて

    現在のような処理をしています。 SQL Server2008 R2 Expless プログラム1  select count(*) from TABLE_A プログラム2 BeginTrance SERIALIZABLE  select count(*) from TABLE_A Update TABLE_B set F1=123 Where P1=1 Commit ※ここで P1はTABLE_Bのプライマリキーとします。 この2つのプログラムを同時に実行している時に、プログラム1のSELECT文でデッドロックが発生した との連絡ありました。 プログラム2でもエラーが発生しているのかもしれませんが、現状調査不可能為不明です。 いろいろデッドロック、ロックヒントなどいろいろ調べてみた結果、なんとなく発生するかも?とは思われますが、このような場合、本当にデッドロックが発生するのでしょうか? また、発生する場合には、何と何がデッドロックになっているのでしょうか? (発生するはずがないとなると調査する視点を変えてみます。) よろしくお願いします。

  • SELECT文でタイムアウトが起こります。

    いつも勉強させて頂いております。どうぞよろしくお願いします。 以下の環境で開発を行っています。 SQLServer2005 ASP.NET C# .NETのソースで 1つのクラスに2つのクエリ(2つともSELECT←複数テーブルを結合している)を呼び出す処理を書いています。(トランザクション処理は付けていません)2クエリとも検索対象テーブルは60万件程度のデータを保持しています。検索条件によって処理速度は違うのですが、1ユーザが最も遅い検索条件で検索をしてもタイムアウトにはなりません。しかし、2ユーザが同じタイミングで検索(どのような条件でも)処理を行うと、タイムアウトを起こしてしまいます。まれにデッドロックも起こります。 SQLServerではSelectのたびにlockがかかるのでSQL文中に「WITH(NOLOCK)」を記述するように書かれているサイトを見つけたのですが、他ユーザからの更新もあり得るテーブルなので、他の方法を探しております。 トランザクション分離レベルは規定値です。 是非、どなたかご教授ください。よろしくお願いします。

専門家に質問してみよう