• ベストアンサー

SQLServerロックについて

お世話になります。 SQLServer7.0をつかっております。 プログラムやハード環境は何にも変わらないのですが、急にロックが頻発するようになりました。 複数ユーザーが同時に使用しているので、ロックがかかるのは普通の事なんですが、SQL EnterPrise Manager で確認すると、ブロッキングがなく、お互いがお互いをブロックしているという形になっており、手動で強制終了するしかない状況です。 お互いがの場合はデッドロックになり、自動で強制終了されると思うのですが、それも起こりません。 何故、デッドロックにならないのか分からず悩んでおります。 何かの設定なのでしょうか?サーバーの再起動をしてみた方が良いでしょうか?アドバイスお願いします。

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

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

>お互いがの場合はデッドロックになり、自動で強制終了されると思うのですが、それも起こりません。 ご質問の趣旨は、デッドロックを再現させる環境を作ってみたいということで宜しいのでしょうか? それともデッドロックをできるだけ回避したいということなのでしょうか? 「何故、デッドロックにならないのか分からず悩んでおります」という質問を拝見すると、どちらとも受け取れたので・・・ まずは一度、sp_lock というストアドがありますので、それでロック状況を確認してみては如何でしょうか? sp_lock の内容が若干見ずらい点があるので、 http://www.atmarkit.co.jp/fnetwork/rensai/sql28/sql1.html に掲載されているやり方で確認して頂いてもOKなので・・・ いずれにしてもデッドロックになりうる状況下にあるのか?がわからないと、欲しい回答が得られないような気がします。 ご確認ください。

sawajyu
質問者

お礼

お返事ありがとうございます。 分かりずらくてすいません。 今までは、ブロッキングとブロックしているが存在して、 ブロッキングのユーザーが原因でロックをかけているんだなと分かったんですが、お互いがブロックしている状態になってしまい、どれが原因かが分からない状況です。 このように、手動で強制終了するしかなくなってしまう現象は 普通に存在するのかが知りたいです。 ロックが起こるのはクエリの作り方や、データベース環境によって いろいろあると思うのですが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

とりあえず、根本的な原因究明とかは ロックの詳細情報で確認してどうにかするしかないと思うので、 で、根拠なしなことを言うと、 7.0では、デッドロックの判断が甘くて、DB側で「デッドロック」と認識できていないのかも知れないですね。

sawajyu
質問者

お礼

おはようございます。 お返事ありがとうございます。 そういうこともあるんでしょうか。 ロックの現象で統計をとってみると、 やはりサーバーの動きが悪いみたいで、 再起動をしようと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQLserverについて

    SQLの勉強を兼ねて、SQLserver を インストールして使ってみたいのですが、 特にサーバーなど立てずに、 スタンドアローンの環境で SQLserverをインストールして ローカルのACCESS のmdbに接続して SQL文など実行出来るのでしょうか? (Enterprise Manager は 使えるのでしょうか?) よろしくお願いします。

  • SQL Server2000:排他的ロックの強制削除方法

    SAP R/3を使っているのですが、SQL Server2000については素人なので、質問します。 R/3でテスト中に、排他的ロックが掛かります。次の処理をしたいため、排他的ロックを強制的に終了したいのですが、方法がわかりません。おそらくEnterprise Managerを使って削除する方法があると思うのでうすが・・・・。ご存知の方、方法を教えてください。 よろしくお願いします。

  • SQLserver2000でプライマリーキーの設定でのエラー

    こんばんわ。 現在SQLの勉強をSQLserver2000でしているのですが、 SQL Enterprise Managerを使って、ある列に主キーを定義しようとして、鍵マークをつけて、保存しようとすると 以下のようなエラーがでて設定できません。 テーブル 'xxxxx' - インデックス 'PK_xxxxx' を作成できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server]インデックス ID 1 で重複したキーが見つかったので、CREATE UNIQUE INDEX は終了しました。もっとも重要な主キーは 'yyyyy ' です。 [Microsoft][ODBC SQL Server Driver][SQL Server]制約を作成できませんでした。以前のエラーを調べてください。 [Microsoft][ODBC SQL Server Driver][SQL Server]ステートメントは終了されました。 初心者なので、このエラーの意味するところが理解できません。 なにが間違っているのでしょうか。 よろしくお願いします。

  • SQLServer2000:テーブルの先頭に列を追加したい

    いつもお世話になっております SQLServer2000を使用しております。 あるテーブルに a,b,c,dという4つの項目が存在している状態で aの前にzというフィールドを追加したいと考えております。 Enterprise Managerを使えば簡単に行うことが出来ますが、 これをクエリアナライザで行いたい場合に どのようにSQL文を記述すればよいのか、見つけることが出来ませんでした。 このようなことは可能なのでしょうか。 ご存知の方がいらっしゃいましたら、ご教示のほど、何卒よろしくお願いいたします。

  • SQLServerの同時接続

    質問させていただきます。 SQLSerever2000でSELECTの結果を返すだけのストアドプロシージャがあるのですが、複数のユーザーが同時に実行すると、単独で実行した場合に比べて処理速度が低下するという現象が起こっています。 このSELECT(のみ)同士で処理が遅くなることについて原因がわからずに困っています。 今わかっていることは (1)SQL文が非常に複雑(サブクエリの結合も多い)で対象データの件数も多い。 (2)実行時はUPDATEなどの更新処理は一切入っていない(トランザクションも張っていない)。 (3)SELECT時にWITH(NOLOCK)を使用しても結果は変わらない。 (4)分離レベルをUNCOMMITEDにしてみたが結果は変わらない。 (5)プロファイラ上で実行時デッドロックが発生していないことは確認済み (6)ほぼ同時に実行するとやたら遅く、少しタイミングをずらして実行すると、あまり影響し合わない。 (7)処理速度の遅延は同時実行ユーザーのお互いについて発生する(※片方だけが待つわけではなく、ほぼ同時に開始した処理は単独の場合と比べて長い時間をかけて同時に終了する) 以上の事から、ストアドプロシージャの実行処理そのものは並列処理となっているが、SELECT内でのサブクエリ単位の情報取得→結果を返す・・・の処理まわりは並列実行できず、サブクエリごとにお互いを邪魔しあうような状態が発生しているように見えます。 このような想定はそもそも見当違いなのでしょうか? 実際にSELECTのみのSQL同士を複数ユーザーで実行するだけでお互いの処理に影響しあうようなことはあるのでしょうか? また、SELECT時の『共有ロック』について複数ユーザーの同時実行には何の影響もない(更新ロックではないので、ロックの取得は可能)の認識ですが、認識誤りはないでしょうか? DBにはあまり詳しくないのでおかしな事を質問しているかもしれませんが、宜しくお願いいたします。

  • EnterPrise ManagerでCreateTableのSQL出力

    SQLSERVERを使い始めた初心者で、調べてはいるのですが うまくいかないので質問させて頂きます。 SQLSERVER2000で既存のテーブルについて、 SQLのCREATE TABLE文をtextで出力したいのですが、 EnterPrise Managerを使用してどのように出力するれば よいかわかりません。 アドバイス頂けますと助かります。 よろしくお願いします。

  • 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に詳しい方、お力になっていただければ、光栄です。 よろしくお願いいたします。

  • SQLServer機のホスト名IPアドレスの変更

    初心者です。 おそらく初歩的な事だと思いますが、どなたか教えて下さい。 SQLServerが動作しているサーバ機のホスト名・IPアドレス・管理者のパスワード変更を行うことになりました。 サーバ機:Windows2000:SQL Server2000 ホスト名を修正したところ、SQLServerへの接続が出来なくなってしまいました。 現象: SQL Server Enterprise Managerにて コンソールルート  SQLServerグループ   旧ホスト名(DB名?)をクリックすると以下メッセージ ****(旧ホスト名)への接続を確立できませんでした。 理由:指定されたSQLServerが見つかりません。 ConnectionOpen(Connect0)。 SQLServerが実行されているか確認し、 ****(旧ホスト名)ノードをマウス右ボタンでクリックし、 SQLServerの登録プロパティを調べた後、再試行してください (右クリックできませんでした) ちなみに、SQLServerサービスマネージャでは サーバーの欄には新ホスト名が入っており、起動状態でした。 管理環境が悪く、マニュアルや環境設定書等無いので、非常に困っています。 また、今後IPアドレス・管理者のパスワード変更をした場合は別の設定作業があるものなのでしょうか? どうかよろしくお願い致します。

  • SQLServer2005 メモリ不足エラー

    SQLServer2005でメモリ不足エラーが発生しました。 WindowsServer2003 SP1 Xeon メモリ4GB SQLServer2005 WorkGroup SP2 クライアントからのアクセスは最大で80ほど という環境です。 SQLのログでは、 02/19/2011 10:10:24,spid51,不明,There is insufficient system memory to run this query. 02/19/2011 10:10:24,spid51,不明,エラー: 701、重大度: 17、状態: 123。 といったエラーが頻発しています。 クエリが集中し、メモリが不足したと考えています。 対応策などがあれば教えてください。 いろいろ調べて気になるところは自動終了がTrueであるところです。 よろしくお願いします。

  • SQLSERVER 2008 ODBC接続

    クライアントPCのデータソースの新規作成で、SQLSERVER 2008(評価版)への接続がエラーになってしまいます。 <環境> サーバー  OS:Windows Server 2008 Standard  SQLSERVER:SQL Server Enterprise Evaluation Edition (64-bit)  (評価版) クライアント  OS:Windows XP Professional SP3 <データソースの新規作成> 1.ODBC データソース アドミニストレータで、ファイルDSNを選択し、追加ボタンを押下。 2.データソースの新規作成で、SQL Serverを選択し次へ。 3.データソース名を入力し、次へ。 4.完了ボタンを押下。 5.接続するサーバーでSqlServer2008のを選択する。 6.ユーザーが入力するSQL Server用のログインIDとパスワードを使う を選択し、ログインID:sa パスワードを入力し次へ。 6.で、次へを押下すると以下のようなメッセージが表示されます。 ---------------以下、エラーダイアログのメッセージ----------- 接続できませんでした。 SQLState:'01000' SQL Server エラー:5 [Microsoft][ODBC SQL Server Driver][IDBNETLIB]ConnectionOpen(Connect()) 接続できませんでした。 SQLState:'08001' SQL Server エラー:17 [Microsoft][ODBC SQL Server Driver][IDBNETLIB]SQL Server が存在しないか、アクセスが拒否されました。 ---------------------------------------------------------------- その他、検証した内容として 1.SQLSERVERのサーバー認証は、混合モードに設定してあり、データソース作成時に、ログインIDでも試みましたが結果は同様でした。 2.同様の方法で、同クライアントから、Windows Server 2000 + SQLServer 2000 での接続は、問題無く出来ています。 3.サーバー上でのデータソースの作成で、同サーバーへの接続も試みてみましたが、同様の方法で、問題無く出来ました。 クライアントのMDACのバージョン等が関係しているのでしょうか? どなたか、ご存知の方がいらっしゃいましたら、ご教授の程、よろしくお願い致します。

WTC-X1800GB-WのSSID確認できず
このQ&Aのポイント
  • WTC-X1800GB-WのSSID確認できない状況について相談です。マニュアル設定に従い設定を行いましたが、再起動後にSSIDが表示されません。
  • WTC-X1800GB-Wの無線LAN設定において、起動後にSSID(elecom...)が確認できない問題が発生しています。
  • 購入直後のWTC-X1800GB-Wをマニュアル通り設定しましたが、再起動後にSSIDが表示されず困っています。
回答を見る