FIX: SQL Server でデータベースのロックの利用状況が増加するとパフォーマンス問題が発生する

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:2926217
Notice
既定では、2014 の SQL Server の Service Pack 1 および SQL Server 2012年の Service Pack 3 は、この修正プログラムと修正プログラムを有効にするトレース フラグを追加する必要はありません。解決方法」の累積的な更新プログラムのいずれかをインストールした後修正プログラムを有効にするには、1236年のトレース フラグを起動時のパラメーターに追加することによって Microsoft SQL Server を開始する必要です。
現象
多くのプロセッサを含むコンピューター上の Microsoft SQL Server、SQL Server 2012年、SQL Server 2008 を SQL Server 2008 R2 のインスタンスを実行することを想定しています。特定のデータベースに対してロックの数 (リソースの種類 = データベース) が一定のしきい値を超えた場合、次のパフォーマンスの問題が発生します。
  • 昇格された値は、 LOCK_HASHスピンロックのカウントが発生します。

    注: <b>このスピンロックを監視する方法の詳細については、「関連情報」を参照してください。
  • クエリまたはデータベースのロックを必要とする操作を完了するまでに時間がかかります。たとえば、次のパフォーマンスの遅延になる場合があります。
    • SQL Server ログイン
    • リンク サーバー クエリ
    • sp_reset_connection
    • トランザクション
指定されたデータベースのロックの一覧 (リソースの種類 = データベース) を検索するには 、「関連情報」セクションを参照してください。しきい値の値は、環境によって異なります。
解決方法

累積的な更新プログラムの情報

問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。

SQL Server 2008 R2 SP2 用の累積的な更新プログラム 13

SQL Server 2008 SP3 の累積的な更新 17

SQL Server 2014 用の累積的な更新プログラム 1

SQL Server 2012 SP1 用の累積的な更新プログラム 9

SQL Server 用の累積的な更新プログラムのバージョン情報

SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていた、すべての修正プログラムおよびすべてのセキュリティ更新プログラムが含まれています。以下で、SQL Server 用の最新の累積的な更新プログラムを確認してください。

修正プログラムの情報

サポートされている修正プログラムは、マイクロソフトから入手可能です。ただし、この修正プログラムは、ここで説明する問題のみを修正することを目的としたものです。この修正プログラムは、ここで説明する問題が発生しているコンピューターに対してのみ適用してください。

修正プログラムをダウンロードできる場合は、本サポート技術情報の資料の上部に「修正プログラムをダウンロードできます」というセクションがあります。このセクションが表示されていない場合は、マイクロソフト カスタマー サービス サポートにリクエストを送信し、修正プログラムを入手してください。

注: <b> その他の問題が発生した場合、または任意のトラブルシューティングが必要な場合は、別のサービス リクエストを作成する必要があります。追加の質問およびこの特定の修正プログラムの対象とならない問題は、通常のサポート料金が適用されます。マイクロソフト カスタマー サービス サポートの電話番号一覧または別のサービス リクエストの作成については、次のマイクロソフト Web サイトを参照してください。 注: <b> 「修正プログラムのダウンロード利用可能」フォームは、修正プログラムで利用可能な言語を表示します。お使いの言語が表示されない場合は、その言語の修正プログラムが利用できないためです。

状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。
詳細
アプリケーションは、SQL Server への接続を作成、ときに最初に、データベース コンテキストを確立します。既定では、接続しようと SH モードでデータベースのロックを取得します。接続が停止しているか、データベース コンテキストが接続の有効期間中に変更されたときに、SH-DATABASE ロックは解放されます。同じデータベース コンテキストを使用する多くのアクティブな接続があれば、そのデータベースのデータベースのリソースの種類の多くのロックを持つことができます。

16 以上の CPU を持つコンピューターではテーブル オブジェクトにのみ、ロックのパーティション分割スキームを使用します。ただし、データベースのロックは分割できません。このため、大きいデータベースのロック、データベースのロックを取得するのには SQL Server の時間がかかります。ほとんどのアプリケーションでは、この設計によって発生する問題は発生しません。ロックを取得する追加の作業と時間が必要な数が一定のしきい値を超えているとすぐにします。コストは、各追加のロックをマイクロ秒間だけですが、時間の合計をすばやく拡大できますロックのハッシュ バケットがスピンロックを使用して保護されているためです。これは、追加の CPU サイクルが発生し、ロックを取得する追加の作業者を待ちます。

この修正プログラムは、データベースの起動時にトレース フラグ T1236 が有効になっていると、ロックのパーティション分割について説明します。ローカル パーティションごとに管理しやすい、ロック ボックスの一覧の深さは、データベースのロックのパーティション分割します。これにより、データベースのロックを取得するために使用されるアクセス パスが大幅に最適化できます。

LOCK_HASHスピンロックを監視するには、次のクエリを使用できます。
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @counter < 100      BEGIN            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
診断して、SQL Server 上のスピン ロックの競合を解消する方法については、次のドキュメントを参照してください。

この文章は SQL Server 2008 R2 用に記載されていますが、情報は SQL Server 2012 にも適用できます。
関連情報
SQL Server 2012 のトレース フラグの詳細については、次の TechNet web サイトを参照してください。


データベースごとのユーザーにデータベースのロックの数を検索するのに方法の詳細については、この値を計算するのに次のクエリを使用します。
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


警告: この記事は自動翻訳されています

プロパティ

文書番号:2926217 - 最終更新日: 12/03/2015 16:05:00 - リビジョン: 8.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtja
フィードバック