• ベストアンサー

SQLServerのロック?について

お世話になっております。 早速ですが、質問させていただきます。 ASP+SQLServer2000で社内システムの作成などを行っております。 ASP上から社員がデータを打ち込んでいるシステムがあるのですが、同時にSELECT、UPDATE、INSERT、DELETEを一つのテーブルで行っております。 その際、SELECTとUPDATE、INSERT、DELETEの処理がかぶると画面が固まったように処理が長くなります。 自分でわかる限りの原因としては検索レコードは10万件くらいからやっているのですが、SELECTで検索中にINSER、UPDATE、DELETE処理がくるとウエイト状態になり、異常に時間がかかってしまい、タイムアウトしてしまっています。 INSERTやUPDATEが処理かぶっても特に処理はとまらないのですが、先にSELECT処理していてINSERTやUPDATE処理がくるとまったく動かなくなってしまうのです。 こちらの原因とか少しでもわかる方いらっしゃれば、お知恵をお貸しください。

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

  • ベストアンサー
  • nfushi
  • ベストアンサー率31% (39/122)
回答No.2

現在使われているSelect文を以下のように変更して下さい。 SELECT * FROM [テーブル名] WITH (UPDLOCK,NOWAIT) WITH句を書くことにより更新クエリを防ぐことができます。 詳しくは「更新ロック SQL Server」で検索下さい。

Takayan198
質問者

お礼

大変遅くなり申し訳ありません。 お教えいただいたとおり、WITH句をつけることにより、この問題は回避できました。 ありがとうございました。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

リンクをご参考までに。 ブロッキングの回避は具体的なクエリなしにはコメントしづらいものです。

参考URL:
http://technet.microsoft.com/ja-jp/library/aa178087(SQL.80).aspx
Takayan198
質問者

お礼

大変遅くなり申し訳ありません。 ブロッキングに関して今回勉強させていただきました。 なお上でご回答いただいています、WITH句で問題回避できました。 ありがとうございました。

関連するQ&A