2016-01-01から1年間の記事一覧
SQLserver ラッチ待ちの解説と確認SQLserverには3種類のラッチが存在します。1.LACTH_[xx] (非バッファーラッチ) 2.PAGELATCH_[xx] (バッファーラッチ) 3.PAGEIOLATCH_[xx] (バッファーラッチ) ※[xx]にはSH(参照),UP(更新),EX(排他)などが入ります。これらに…
デッドロック発生に際し、分析時の確認の仕方について紹介します。エラーログやSQL Plofilerなどで調査可能ですが、個人的には拡張イベントがお勧めです。デフォルト設定であれば、拡張イベントの「system_health」でデッドロック情報は取得しているので、事…
悪者扱いされることの多いロックエスカレーションの発生する閾値と設定の確認方法についてです。・ロック上限が動的な場合(locks オプションが既定値)のロックエスカレーションの閾値 (1)1 つの Transact-SQL ステートメントが 1 つのテーブルまたはイン…
デッドロックを調査するにあたりロックの種類について調べた内容を記しておきます。 ロックの粒度 上から順にロックの粒度は細かくなります。 Lock Type 説明 DB データベース単位のロック TAB テーブル単位のロック PAGE ページ単位のロック ROW 行単位のロ…
SQL serverで設定できるトランザクション分離レベルについて整理しました。 ※デフォルトはREAD COMMITTEDになります。 トランザクション分離レベル ロックの種類 ダーティリード ノンリピータブルリード ファントムリード READ UNCOMMITTED 悲観的ロック ○ ○…
個人的にパフォーマンス障害時によく利用する「利用状況モニター」ですが、いまいち情報取得の方法や周期について理解が不足しておりましたので、ここで整理をしてみます。 (※プロファイラーの取得結果SQLをそのまま記載してありますので、内容問題がある場…
SQL Serverの性能情報を取得するうえで、簡単にいろいろな情報を収集できるシステムストアドプロシージャであるsp_who2について、改めて内部を確認してみました。 ※sp_who2はundocumentedなシステムストアドプロシージャであるため、変更されている恐れがあ…
ファイルグループへのテーブルを新規で追加する手順の理解があいまいだったため、簡単に確認してみました。 ファイルグループを分けた場合、違うディスクに配置することで、IO負荷の分散が期待できます。 ⓵DBに新規のファイルグループを追加します -- ======…
データコレクションの機能で、「クエリ統計の履歴」を実行し、レポート表示させる場合の元スクリプトとテーブルについて確認してみました。内容に誤りがある場合は、ご指摘いただけると幸いです。※変数の値はそれぞれの対象となるSQLによって異なります。レ…
SQL server では、キャッシュクリアしたい実行プランのプランハンドルがわかれば、特定の実行プランのみをクリアすることができます。 何らかの原因で実行プランが変わり、急激なパフォーマンス低下が発生してしまった際等に、他の処理への影響を減らしつつ…
◆クエリストアでできること SQL server の特定のクエリの実行プランは時間の経過とともに変化します。プロシージャキャッシュ(プランキャッシュ)には、最新の実行プランのみが格納され、メモリ負荷によるキャッシュアウトで実行プランがプランキャッシュか…
Buffer Manager Max server memoryで設定できる値は内訳は以下となっているのでしょうか。。。 Max server memory = Memory Manager\Total Server Memory (KB) = Memory Manager\Stolen Server Memory (KB) + Memory Manager\Free Memory (KB) + Memory Mana…
SQL server では、ストアドプロシージャ実行時に実行プランをハードパースする場合に、受け取ったパラメータに最適化する形で実行プランが作成されます。 パラメータスニッフィングにより不適切なパラメータで実行プランがハードパースされると効率の悪い実…