The READPAST locking hint provides an alternative to this SET option.  具体的な原因ですと、守秘義務に抵触する可能性があるのですが、そもそもデータベースの種類が異なるので参考にはならないでしょう。 次の例では、ロック タイムアウトを無期限に待機して期限切れにならないように設定します。. トランザクション分離レベルは規定値です。 ョンの代わりに READPAST ロック ヒントを使用できます。. SQL Server Management Studio でテーブルのデザインを変更したときのタイムアウト [ツール]-[オプション]-[デザイナ]-[テーブルおよびデーターベースデザイナ]-[トランザクションがタイムアウトするまでの時間] で設定する. 規定値30秒. クエリタイムアウトはselectなど参照系でしょうか?, 基礎的な回答となってしまいますが、SQL Serverに限らずデータベース製品では実行計画という、クエリを実行するために最適なプランを算出してSQLを実行しています。  それこそ、佐祐理様のおっしゃるロックの話やログ周りの話であれば性能面としては異常がない(異常な変化に見えない)事もあるでしょう。 遅くなりましたが、アドバイスありがとうございました。, 「処理 トランザクション」に関するQ&A: Excelブックの共有をしているのに読み取り専用になる。, 「データ トランザクション」に関するQ&A: 社内Excel共有ブックでの保存トラブル, 「文 select」に関するQ&A: SELECT 文 GROUP での1件目を取得, ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!, ※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。 実行計画に問題がある場合に、チューニング出来る事もあれば出来ない事もあります。, またInsert・Delete・Updateに関してもインデックスなどが断片化していれば、インデックスの再構築で解消する事もあります。, ■インデックスの再構成と再構築 私の経験則では、異常や変化を100%ログや性能情報から全て把握する事が可能であるとは思っていません。 出来ないケースとして、データ件数が単純に増加していてselect count(*)などを実施している場合です。(キャッシュに乗れば2回目以降は早いことも) インデックスの有無や抽出するデータ量によって、データの取り出し方に効率・非効率があるためです。 クエリー(コマンド実行)のタイムアウト ADO  SqlCommand.CommandTimeout プロパティー (ADO.Net)  規定値30秒  0は制限無し., Excel VBAでは,ADODB.CommandのCommandTimeoutプロパティー, 3. そうですね、NOLOCKをつけて同じ現象が発生しなければ、ロックが原因だったと言え、対処法としてはスナップショット分離レベルに設定すればよいと言うことになりますね。 google_ad_height = 280; SQL ServerのSQL Server Management Studioでテーブルの変更を保存しようとすると 変更の保存が許可されていません。 行った変更には、次のテーブルを削除して再作成することが必要になります。 断片化の解消はDBメンテナンスの基本です。 もし私を含めた他者の回答に疑問を持つのであれば、質問者様へ間違いのない「グッドノウハウ」を回答して頂ければと思います。, 質問者さんが問題ないと判断されている以上、それを前提に回答するしかないと思います。「サポート」がどういう立場の方なのかも気になるところですが…。, なるほどパフォーマンスの指標値には現れなくても30秒タイムアウトするような経験がおありということで理解しました。ちなみにその際の原因はどのようなものだったのでしょうか? 質問者さんも同じ問題にあたっている可能性もありますし、参考までにお聞かせいただけたら幸いです。, 改修する権利がないのであれば悩む必要はなく受け入れるだけのことかと思います。以降、改修する権利がある前提で。, 盲目的な断片化解消(ALTER INDEX REORGANIZEやALTER INDEX REBUILDの実行)を危惧してのコメントでした。断片化が原因であれば断片化を引き起こすクエリを改善すべきですし、それを変更できないのであれば断片化を緩和させるFILL FACTORを設定したり手立てはあると思います。そこまで含めての断片化解消という意味でしたら誤解していました、すみません。, いくつか質問を頂いておりますので1つだけ回答しますが、まず私が回答をする前提を書かせて頂きます。, 先ほども記載しましたが「質問者様が原因を突き止めるために必要な情報が見つかることが最優先事項」としているだけで、あえて不毛なやり取りを開始する必要性に疑問があります。(せめて質問者様も含めるなどすべき) 3. google_ad_slot = "0204055842"; >タイムアウトがハードウェアのリソースやコネクションの競合などではなくて、テーブルロックにより発生しているという結論はどうやって導き出しましたか? https://docs.microsoft.com/ja-jp/sql/relational-databases/indexes/reorganize-and-rebuild-indexes エラーテーブルを修正できません。タイムアウトの時間切れです。操作が完了する前にタイムアウト期間を過ぎたか、またはサーバが応答していません。解決方法SQL Server Management Studioを開いて、「ツール」→「オプション」を google_ad_client = "ca-pub-3570359755541478"; SQL Server Management Studio でテーブルのデザインを変更したときのタイムアウト [ツール]-[オプション]-[デザイナ]-[テーブルおよびデーターベースデザイナ]-[トランザクションがタイムアウトするまでの時間] で設定する. 規定値30秒. >そしてその点について質問文では「OSやデータベース自体のパフォーマンスに問題がでていた事は確認できていない」と言及されているわけですが、どうお考えでしょうか? 以下の環境で開発を行っています。 はい。ほぼ同じタイミング、かつ10秒程度、タイムアウトになります。 「不要かつ混乱を招く情報である」のであれば「不適切な発言として報告」して頂ければと思います。 こんにちは。ZOZOテクノロジーズの廣瀬です。 弊社ではサービスの一部にSQL Serverを使用しています。先日、「普段は数10ミリ秒で実行完了するクエリが、たまに5秒間実行され続けて最終的にタイムアウトするので調査して欲しい」という依頼を受けました。 SQL Server Management Studioの[新しいインデックスの作成]で開かれるダイアログでインデックスを作成するとエラーが発生しますが、インデックス作成のクエリをSQL Server Management Studioから実行した場合は先のタイムアウトエラーは発生しません。 これは、各接続の開始時に既に設定されている既定の動作です。. 明らかに私の回答が技術的に間違っており、不利益に直結する原因になるのであれば指摘頂く事が正しい在り方であるのは間違いないです。, 今回は質問者様の「テーブル」に関する質問に対して、影響が出ている可能性のある事項を書いたまでで、これ以上蛇足である情報を長々と書くつもりもありません。, >質問者さんも同じ問題にあたっている可能性もありますし、参考までにお聞かせいただけたら幸いです。 参考: >でしょうか。また、ログに情報がない場合、テーブル(DB?)のパフォーマンスはどのように確認すれば 値が -1 (既定値) の場合は、タイムアウトはなく、無期限に待機します。A value of -1 (default) indicates no time-out period (that is, wait forever). The following example sets the lock timeout to wait forever and never expire. ASP.NET C# こういったタイムアウト問題では、私の場合は対象のSQL文を特定して実行計画を確認します。 お客様の許可なしに外部サービスに投稿することはございませんのでご安心ください。. 参考: 私もjamshid6さんと同じように、ブロッキングやデッドロックが発生するとは思っていなくて、前述したようにSELECTでlockがかかるというサイトを見た、と言うだけです。多数のユーザがアクセスするシステムのため、2ユーザの処理だけでリソースのせいとは考えにくく、安易にそのサイトを受け入れたと言うところです。 断片化の解消をせずとも、断片化が発生していないかなど、OSやDBだけではなくテーブル単位などについて確認する方法について質問しているのではないでしょうか。 1つのクラスに2つのクエリ(2つともSELECT←複数テーブルを結合している)を呼び出す処理を書いています。(トランザクション処理は付けていません)2クエリとも検索対象テーブルは60万件程度のデータを保持しています。検索条件によって処理速度は違うのですが、1ユーザが最も遅い検索条件で検索をしてもタイムアウトにはなりません。しかし、2ユーザが同じタイミングで検索(どのような条件でも)処理を行うと、タイムアウトを起こしてしまいます。まれにデッドロックも起こります。 そもそも、目の前にないシステムに対して「絶対〇〇である」と私は言い切れませんので他の観点で調査するための情報を回答しています。 是非、どなたかご教授ください。よろしくお願いします。, 「文 select」に関するQ&A: PHP+SQLite でSELECT文のWHEREの後に変数を使いたい。, 「処理 トランザクション」に関するQ&A: トランザクション処理について教えてください, 「データ トランザクション」に関するQ&A: トランザクションログを出力せずにデータを削除する方法, >2ユーザともタイムアウトになるのですか? 環境 ・Windows Server 2012 R2 64bit CPU:12core メモリ:48GB ・SQLServer2014 Enterprise 上記環境で、テーブルに対するクエリがタイムアウト(タイムアウト値30秒)が散見して、 処理が滞留してしまう問題が発生しました。 サポートと連携して調査しておりますが、いかんせん私の知識が足りず、理解 … >根本の原因を特定せず、断片化解消で一時的に回復できたとしても、完治しておらず再発するだけであり、また「断片化を解消するとなぜか回復する」というバッドノウハウが出回ってしまうことも危惧しています。 明示的に返信先を記載されていないので、誰に対しての返信か不明ですが「断片化」に関して書かれているので私だと判断して返信致します。 SQL Serverで特定のテーブルだけでInsertやUpdateがタイムアウトになり、レコードの追加や編集ができない場合の対処法について紹介します。 原因 何らかのきっかけでテーブルがロックされたままになっている可能性があります。 佐祐理様の回答が正解であろうが、私の回答が不正解であろうが、質問者様が原因を突き止めるために必要な情報が見つかることが最優先事項だと思っています。 いつも勉強させて頂いております。どうぞよろしくお願いします。以下の環境で開発を行っています。sqlserver2005asp.net c#.netのソースで1つのクラスに2つのクエリ(2つともselect←複数テーブルを結合している)を呼び出す処理を書いてい This is the default behavior that is already set at the beginning of each connection. 接続のタイムアウト 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. また実行計画以外では、キャッシュヒット率などを確認するくらいです。, 疑問なのですが、挙げられたような問題が発生した場合、CPU / Memory / Disk IOなど何らかのパフォーマンス指標値に現れませんか? 例えば、データの取り出し方が非効率になり大量のデータを読み込んでしまった場合はDisk IOなど。   このConnectionTimeoutは接続のタイムアウトなので,コマンド実行のタイムアウトとは関係ない., http://support.microsoft.com/kb/915849/ja, Windows8/8.1 + SQL Server での不具合(高速スタートアップ), VB2005 プロジェクトを開いて閉じると変更していないのに保存しますか?と聞いてくる場合. col1・・・char(10),PK col2・・・char(2),PK col3・・・char(2),PK col4・・ … CREATE DATABASE、ALTER DATABASE、および DROP DATABASE ステートメントでは、SET LOCK_TIMEOUT の設定は無視されます。. SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿, これらの投稿では、「アプリケーションからのクエリタイムアウト (コマンドタイムアウト)」を SQL Server 側 (DB サーバーサイド) で取得する方法について記載を行いました。 (本ブログでも何回か書いていますが、クエリのタイムアウトは「アプリケーションから発行された Attention のメッセージにより、SQL Server がクエリをキャンセルする処理」ですので、クエリをタイムアウトさせているのは、SQL Server ではなく、クエリを発行したアプリケーション側の処理となります), SQL Server に対してクエリを実行する際に発生するのは、クエリタイムアウトだけでなく、様々なエラーがあります。, 本投稿では、クエリタイムアウト以外のエラーを SQL Server 側で取得する方法の一例について紹介したいと思います。, クエリのタイムアウトや、クエリの実行の失敗については、クエリ実行側 (アプリケーション側) で取得した方が正確かと思いますので、SQL Server で全てをキャッチするのではなくアプリケーション (または、APM のような仕組み) でエラーを把握した方が良いと思います。 (DB に対してのクエリ実行でエラーが発生すると、SQL Server 側の調査のみで原因を特定してくれという依頼が多いのですよね…。), SQL Server 側でエラーを検知するためには次のような方法を用いることができます。, SQL Server:SQL Errors オブジェクトはパフォーマンスモニターの情報となります。, ドキュメントに記載されていますが、次のような情報を時系列データとして取得することができます。, SQL Server のエラーについては、重大度 (Sevirity) が設定されており、重大度については、データベース エンジン エラーの重大度 に記載されています。, SQL Server:SQL Errors オブジェクト では、いくつかのカテゴリでエラーを確認することができますが、, SQL Server で明示的にエラーを発生させる際には、RAISERROR を使用することができます。, 上記の場合は、重大度レベル : 10 で実行をしていますので、このようなエラーの場合は「Info Erros」となります。, 数値を 11 以上に変更すると「User Erros」として計上されることが確認できるかと。, 基本的には「重大度レベル 11 以上の User Erros」に注視して、SQL Server のエラーの発生状況を確認することになります。, SQL Server:SQL Errors オブジェクト でエラーの発生状況を取得することができました。, 次に確認したくなるのは「実際にどのようなエラーが発生したのか?」の情報ではないでしょうか。, エラーの詳細な情報を取得する場合には、拡張イベントの User Error Message イベント クラス となります。, 拡張イベントの「error_reported」が上記のイベント相当となりますので、この情報の取得を行います。, 全てのエラーを取得するとノイズが混じってしまいますので、重大度 (Sevirity) については 11 以上でフィルターしておいた方が良いです。, 接続文字列や、エラーの内容によっては、「どのアプリケーションの、どのクエリなのか?」が取得できる可能性がありますので、グローバル フィールド (アクション) としては、「client_app_name」と「sql_text」は追加で取得しておいた方が良いかと。, このような拡張イベントを設定しておくことで、エラーが発生した際には、次のようなログを取得することができますので、どのようなエラーが発生していたかの詳細を確認することができます。, 今回、重大度レベル 11 以上を重点的に取得していますが、SQL Server に発生するエラーにどのようなものが存在するかについては、メッセージ (エラー用) のカタログ ビュー – sys.messages から確認することができます。, 各言語用のメッセージが登録されていますので、日本語メッセージであれば、次のようなクエリで取得できます。, スキーマに変更を行った場合、どのようなエラーが発生する可能性があるのかを登録されているメッセージから取得しています。, スキーマ変更に関してはいくつかのメッセージが登録されているのですが、次のようなメッセージの存在を確認することができます。, エラーメッセージから、スキーマを変更することにより影響を受ける可能性のある操作を把握することができますね。, SQL Server に対してクエリを実行した際の失敗の情報を「SQL Server 観点ですべて調査を行う」のは現実的ではないので、発行元のアプリケーションの観点でも情報を取得するのが一番良いのですが、SQL Server 側でエラーを確認するための仕組みとしては、これらの方法を覚えておくと役に立つのではないでしょうか。, SQL Server の技術支援、現状調査、チューニング等をメインにしていますが、本ブログで情報発信している内容に関することでしたら対応できます。お仕事のご相談がありましたら, 2011年7月にMicrosoft MVP for SQL Server を受賞させていただきました。, Microsoft MVP for Data Platform (July 2011 – June 2021), 本ブログの内容は個人的に検証したものとなり、検証結果を含め記載している内容を保証するものではありません。 SQLServerではSelectのたびにlockがかかるのでSQL文中に「WITH(NOLOCK)」を記述するように書かれているサイトを見つけたのですが、他ユーザからの更新もあり得るテーブルなので、他の方法を探しております。 SQLServer2005  また、ネットワークの問題であればDBサーバは正常に処理をしていてもAPがデータを受け取るまでに遅延が発生するケースもあります。, くどいようですが、私は質問者ではないのですし指摘が済んだのであれば、有益な情報は「質問者」様へ回答して下さい。, 申し訳ありません。リクエストされたコンテンツは削除されています。すぐに自動的にリダイレクトされます。, https://docs.microsoft.com/ja-jp/sql/relational-databases/indexes/reorganize-and-rebuild-indexes. 「ある日突然SQLの結果が遅くなった」というケースでは、テーブルのデータが増減・更新されたことや統計情報が更新された影響である事があります。 しかし、「問題ない」の基準は何になりますでしょうか。 >良いのでしょうか。 timeout_periodtimeout_period MicrosoftMicrosoft SQL ServerSQL Server がロック エラーを返すまでの経過時間をミリ秒単位で指定します。Is the number of milliseconds that will pass before MicrosoftMicrosoft SQL ServerSQL Server returns a locking error. 性能劣化に対する一時対応として「断片化を解消」するのが「バッドノウハウ」であると認識されているのであればSQL Serverに限らずOracleDBやDB2でも性能劣化に対する対応として「バッドノウハウ」が出回っている状況なので他のフォーラムでも啓蒙すべきではないでしょうか。(何も断片化については私だけが回答しているわけでもありません), また、断片化の解消が「バッドノウハウ」であり「根本原因を解消するためにアプリを改修する」が正解であれば非現実的なシステムも多いのではないでしょうか。(そもそも改修する権利もない可能性もある) そしてその点について質問文では「OSやデータベース自体のパフォーマンスに問題がでていた事は確認できていない」と言及されているわけですが、どうお考えでしょうか?, 根本の原因を特定せず、断片化解消で一時的に回復できたとしても、完治しておらず再発するだけであり、また「断片化を解消するとなぜか回復する」というバッドノウハウが出回ってしまうことも危惧しています。, 佐祐理様 >そこで教えて頂きたいのですが、テーブル(DB?)のパフォーマンス問題とはどのような事が考えられるの /* 20111009 */ いつも勉強させて頂いております。どうぞよろしくお願いします。 google_ad_width = 336; エラーテーブルを修正できません。タイムアウトの時間切れです。操作が完了する前にタイムアウト期間を過ぎたか、またはサーバが応答していません。解決方法SQL Server Management Studioを開いて、「ツール」→「オプション」を   アプリケーションから SQL Server / SQL Database にコマンド (クエリ) を実行する際には、「コマンドタイムアウト」(クエリタイムアウト) について考慮をしておく必要があります。 ADO.NET の SQL Server 向けのドライバーではデフォルトでは 30 秒に設定されています。 SQL Server に対してクエリを実行する際に発生するのは、クエリタイムアウトだけでなく、様々なエラーがあります。 本投稿では、クエリタイムアウト以外のエラーを SQL Server 側で取得する方法の一例について紹介したいと思います。 むしろ、「異常が無いように見える」から困っているのであって、他の確認方法を探されているような質問に見受けられます。 Set the lock timeout to wait forever for a lock to be released.