いつも勉強させて頂いております。どうぞよろしくお願いします。以下の環境で開発を行っています。sqlserver2005asp.net c#.netのソースで1つのクラスに2つのクエリ(2つともselect←複数テーブルを結合している)を呼び出す処理を書いてい SQL Serverで特定のテーブルだけでInsertやUpdateがタイムアウトになり、レコードの追加や編集ができない場合の対処法について紹介します。 原因 何らかのきっかけでテーブルがロックされたままになっている可能性があります。 ロックの待ち時間がタイムアウト値を超えると、エラーが返されます。When a wait for a loc… 断片化の解消をせずとも、断片化が発生していないかなど、OSやDBだけではなくテーブル単位などについて確認する方法について質問しているのではないでしょうか。 Set the lock timeout to wait forever for a lock to be released. OSやデータベース自体にパフォーマンスの問題が発生していなかったのであれば、排他制御によるロックが発生していたと考えるのが自然です。ロックは説明するまでもないかと思いますが、データベースの整合性を保つために他の処理を待たせることであり、「待つ」という行為そのものはデータベースにとって正常な動作です。30秒以上待たされたことによりタイムアウトが発生したとしても、これもデータベースとしては指示された通りに正常動作したと言えます。, 30秒以上待たせたことによりタイムアウトが発生したというのが不本意な動作だとすればそれは指示ミス、アプリケーション側の問題です。データベースへの指示、つまりクエリ内容を見直す必要があります。まずはSQL Server Profilerにてどのようなロックが発生していたのか(もしくは発生していなかったのか)を確認してください。, 個人的な経験から回答したいと思います。  それこそ、佐祐理様のおっしゃるロックの話やログ周りの話であれば性能面としては異常がない(異常な変化に見えない)事もあるでしょう。 また実行計画以外では、キャッシュヒット率などを確認するくらいです。, 疑問なのですが、挙げられたような問題が発生した場合、CPU / Memory / Disk IOなど何らかのパフォーマンス指標値に現れませんか? 例えば、データの取り出し方が非効率になり大量のデータを読み込んでしまった場合はDisk IOなど。 いつも勉強させて頂いております。どうぞよろしくお願いします。 性能劣化に対する一時対応として「断片化を解消」するのが「バッドノウハウ」であると認識されているのであればSQL Serverに限らずOracleDBやDB2でも性能劣化に対する対応として「バッドノウハウ」が出回っている状況なので他のフォーラムでも啓蒙すべきではないでしょうか。(何も断片化については私だけが回答しているわけでもありません), また、断片化の解消が「バッドノウハウ」であり「根本原因を解消するためにアプリを改修する」が正解であれば非現実的なシステムも多いのではないでしょうか。(そもそも改修する権利もない可能性もある) むしろ、「異常が無いように見える」から困っているのであって、他の確認方法を探されているような質問に見受けられます。 //--> The READPAST locking hint provides an alternative to this SET option. ASP.NET C# CREATE DATABASE, ALTER DATABASE, and DROP DATABASE statements do not honor the SET LOCK_TIMEOUT setting. 私もjamshid6さんと同じように、ブロッキングやデッドロックが発生するとは思っていなくて、前述したようにSELECTでlockがかかるというサイトを見た、と言うだけです。多数のユーザがアクセスするシステムのため、2ユーザの処理だけでリソースのせいとは考えにくく、安易にそのサイトを受け入れたと言うところです。 インデックスの有無や抽出するデータ量によって、データの取り出し方に効率・非効率があるためです。 ョンの代わりに READPAST ロック ヒントを使用できます。. google_ad_width = 336; CREATE DATABASE、ALTER DATABASE、および DROP DATABASE ステートメントでは、SET LOCK_TIMEOUT の設定は無視されます。. google_ad_slot = "0204055842"; 参考: VB2008、SQL Server 2008 でアプリケーション開発を行っています。 下記のような列を持つテーブル(TestTable1)があり、それに対する数千件のINSERT、UPDATEを 1つのトランザクションでまとめてコミットする処理があります。. >NOLOCKをつけたらタイムアウトしなくなるか試してみるのがいいと思います。 接続のタイムアウト ADO  SqlConnection.ConnectionTimeout プロパティー (ADO.Net)  規定値15秒  0は制限無し., このプロパティーはReadOnlyなので設定はできない.  設定はConnectionStringで接続時におこなう., 例:  ConnectionString = "Data Source=(local);Database=test;Integrated Security=SSPI;Connection Timeout=30;", 参考:SqlConnection.ConnectionString プロパティ (MSDN), このConnectionTimeoutは接続のタイムアウトなので,コマンド実行のタイムアウトとは関係ない.コマンド実行のタイムアウトは↓., 2. 断片化の解消はDBメンテナンスの基本です。 トランザクション分離レベルは規定値です。 明示的に返信先を記載されていないので、誰に対しての返信か不明ですが「断片化」に関して書かれているので私だと判断して返信致します。 遅くなりましたが、アドバイスありがとうございました。, 「処理 トランザクション」に関するQ&A: Excelブックの共有をしているのに読み取り専用になる。, 「データ トランザクション」に関するQ&A: 社内Excel共有ブックでの保存トラブル, 「文 select」に関するQ&A: SELECT 文 GROUP での1件目を取得, ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!, ※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。 SQL Server Management Studio のテーブル デザイナを使用して大きなサイズのテーブルを変更しようとしたときにエラー メッセージが表示される現象について説明します。この問題を解決するには、SQL Server Management Studio でいくつかの設定を調整する必要があります。 参考: 実行計画に問題がある場合に、チューニング出来る事もあれば出来ない事もあります。, またInsert・Delete・Updateに関してもインデックスなどが断片化していれば、インデックスの再構築で解消する事もあります。, ■インデックスの再構成と再構築 jamshid6さん、ありがとうございました。分離レベルでもちょっと分からないところがあるのですが、ロックが原因だと判明したら質問させていただきます。, jamshid6さん、tomo197608さん  具体的な原因ですと、守秘義務に抵触する可能性があるのですが、そもそもデータベースの種類が異なるので参考にはならないでしょう。   このConnectionTimeoutは接続のタイムアウトなので,コマンド実行のタイムアウトとは関係ない., http://support.microsoft.com/kb/915849/ja, Windows8/8.1 + SQL Server での不具合(高速スタートアップ), VB2005 プロジェクトを開いて閉じると変更していないのに保存しますか?と聞いてくる場合. SQL Server 2008 でテーブルを保存しようとするときに、エラー メッセージが表示される問題について説明します。SSMS ツールで、"テーブルの再作成を必要とする変更を保存できないようにする] オプションが設定されている場合、この問題が発生します。 お客様の許可なしに外部サービスに投稿することはございませんのでご安心ください。. >良いのでしょうか。 エラーテーブルを修正できません。タイムアウトの時間切れです。操作が完了する前にタイムアウト期間を過ぎたか、またはサーバが応答していません。解決方法SQL Server Management Studioを開いて、「ツール」→「オプション」を いつも勉強させて頂いております。どうぞよろしくお願いします。以下の環境で開発を行っています。sqlserver2005asp.net c#.netのソースで1つのクラスに2つのクエリ(2つともselect←複数テーブルを結合している)を呼び出す処理を書いてい This is the default behavior that is already set at the beginning of each connection. SQL ServerのSQL Server Management Studioでテーブルの変更を保存しようとすると 変更の保存が許可されていません。 行った変更には、次のテーブルを削除して再作成することが必要になります。 そもそも、目の前にないシステムに対して「絶対〇〇である」と私は言い切れませんので他の観点で調査するための情報を回答しています。 「不要かつ混乱を招く情報である」のであれば「不適切な発言として報告」して頂ければと思います。 3. google_ad_height = 280; SQL Server に対してクエリを実行する際に発生するのは、クエリタイムアウトだけでなく、様々なエラーがあります。 本投稿では、クエリタイムアウト以外のエラーを SQL Server 側で取得する方法の一例について紹介したいと思います。 次の例では、ロック タイムアウトを無期限に待機して期限切れにならないように設定します。. そうですね、NOLOCKをつけて同じ現象が発生しなければ、ロックが原因だったと言え、対処法としてはスナップショット分離レベルに設定すればよいと言うことになりますね。 SQL Server Management Studio でテーブルのデザインを変更したときのタイムアウト [ツール]-[オプション]-[デザイナ]-[テーブルおよびデーターベースデザイナ]-[トランザクションがタイムアウトするまでの時間] で設定する. 規定値30秒. >タイムアウトがハードウェアのリソースやコネクションの競合などではなくて、テーブルロックにより発生しているという結論はどうやって導き出しましたか? 「ある日突然SQLの結果が遅くなった」というケースでは、テーブルのデータが増減・更新されたことや統計情報が更新された影響である事があります。   明らかに私の回答が技術的に間違っており、不利益に直結する原因になるのであれば指摘頂く事が正しい在り方であるのは間違いないです。, 今回は質問者様の「テーブル」に関する質問に対して、影響が出ている可能性のある事項を書いたまでで、これ以上蛇足である情報を長々と書くつもりもありません。, >質問者さんも同じ問題にあたっている可能性もありますし、参考までにお聞かせいただけたら幸いです。 是非、どなたかご教授ください。よろしくお願いします。, 「文 select」に関するQ&A: PHP+SQLite でSELECT文のWHEREの後に変数を使いたい。, 「処理 トランザクション」に関するQ&A: トランザクション処理について教えてください, 「データ トランザクション」に関するQ&A: トランザクションログを出力せずにデータを削除する方法, >2ユーザともタイムアウトになるのですか?