Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は「トレースフラグ1224の詳細と使い方」を解説します。Serverのトレースフラグ」の使いこなしTipsを紹介していきます。今回は「トレースフラグ1224」の詳細と使い方を解説します。トレースフラグ1224は、ロック数によるロックエスカレーションの発生を無効化する設定です。Serverの全バージョンに対応します。Serverは整合性や一貫性を保つために、ロックを使用してデータを保護しています。通常は粒度の細かい1行単位でロックし、同時実行性を高めています。更新対象などが膨大でロックの数が多くなると、オーバーヘッドやメモリ逼迫(ひっぱく)が発生する可能性があります。そのためロック数やメモリ使用量に応じて、取得済みのロックの粒度を粗くするロックエスカレーションを起こすことがあります。ロックエスカレーションが発生すると粒度の粗いロックが取得されるため、オーバーヘッドやメモリ逼迫が緩和されますが、広範囲にロックするために同時実行性が低下してしまいます。Profilerなどを使用して確認でき、EventSubClass列では発生理由も確認できます。MEMORY_THRESHOLD」はメモリサイズによってロックエスカレーションが発生したことを示しています(図1)。Profilerによるロックエスカレーション発生状況の確認トレースフラグ1224を有効にするとロック数によるロックエスカレーションの発生を無効化できます。トレースフラグ1211(関連記事)でもロックエスカレーションを無効化できますが、1224では、設定後もメモリサイズによるロックエスカレーションは発生します。そのため、ロックメモリ増大によるメモリ不足が発生しにくくなります。動作例Update文などでロックを多数取得する処理を実行すると、オーバーヘッドを避けるためにロックエスカレーションが発生します。ロックエスカレーションが発生すると、排他(X)ロックの粒度がKEYからOBJECTへと粗くなり、ロックの総数が少なくなっていきます(図2)。トレースフラグ1224を設定せずにロックを要求した場合、ロックエスカレーションが発生し、ロックの粒度が変化する。トレースフラグ1224を設定した状態で同じクエリを実行すると、ロックエスカレーションは発生しません(図3)。ロック数がさらに増加し、ロックメモリのサイズが増えると、ロックエスカレーションが発生します(図4)。トレースフラグ1224を設定してロックを要求した場合、ロックエスカレーションが発生しない。トレースフラグ1224を設定してロックを要求した場合、メモリサイズによってはロックエスカレーションが発生する。ロックエスカレーションが発生するロックメモリのサイズは、sp_configureのlocksによって変更できます。TABLEのLOCK_ESCALATIONオプションを変更することで、ロックエスカレーションの発生有無を設定できます。Corporation所属。Platform(2011〜)。Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を担当。2016年IoTビジネス開発の担当を経て、現在は米国シリコンバレーにて駐在員として活動中。目標は生きて日本に帰ること。たけし)ユニアデックス株式会社所属。Platform(2017〜)。Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。Serverで起こりがちなトラブル」を厳選して、具体的な対処方法を紹介していきます。第1回目は「トラブルを適切に対処するための考え方」を解説します。Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「あるタイミングで処理遅延が発生し、それが継続して発生するようになってしまった場合の対処例.2」を解説します。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。