質問のタイトルが明確であることを願っています。私は職務の1つとしてDB開発者です。最近 インデックス統計に関する質問 を尋ねましたが、それ以来、統計、カーディナリティの見積もり、SQL Serverのメモリ管理について多くの時間を費やしてきました。
私はチームリーダーおよびシニアチームリードと私の調査結果について話し、特定のインデックスでより大きなサンプルサイズが使用された場合にクエリがより適切に実行されたテストのデータを示しました。私たちの主な役割はソフトウェア開発であり、私のチームの誰もデータベース管理についてあまり知らないので、非常に啓発的な議論でした。彼らは調査結果をCIOに提出し、CIOは私にDBAチーム全体と自分自身、およびすべてのITシニアチームリーダーとのミーティングをスケジュールするように依頼しました。
会議をスケジュールしてから5分以内に、DBAチームのチームリーダーが私のデスクにいて、機嫌が悪かった。彼は半敵対的だったので、これは単なる話し合いであり、つま先を踏みたくなかったと説明しました。この会話の過程で、メモリグラントのサイズは、キャッシュされたプランに従った実行のために、ある実行から次の実行に再利用されるとコメントしました。私はそれについて何も読んでいませんでした。
それが実際に本当かどうか疑問に思い、同じ会話でさらに2つのコメントをした後、このTLの能力に疑問を持ち始めています。彼の最初のコメントは、彼の前任者がしきい値とサンプルサイズを処理するための複雑なスクリプトを作成しており、それらに変更を加えたことはなかったということです。彼はTLになり、2.5年になります。彼が3回行った2番目のコメントは、サンプルサイズが5または10%のIX_myTableを設定すると、「実行に時間がかかる」ことです。私はそれをテストしたことをようやく答えました、そしてそれはたった2秒しかかかりませんでした。彼は私の返答に取り戻され、私はそれに続いて、はるかに大きなテーブルのインデックスが5%のサンプルサイズを実行するのに25秒しかかからなかったと言いました(このテーブルは現在0.2%のサンプルサイズを持っています)。文書化されたテストでパフォーマンスが向上し、メモリ使用量が少ないことを彼に示し、特定のサンプルサイズの特定のインデックスでは、カーディナリティの推定値が改善されないことを完全に明らかにしました。
私は彼のメモリ許可サイズに関する主張を検索してみましたが、何も見つかりませんでした。誰でも詳しく説明できますか?
チームリーダーは、使用しているSQL Serverのバージョンを指定したメモリの付与に関する声明で正しい(SQL Server 2014、ここのタグに基づく) 。これらはキャッシュされた実行プランの一部であり、キャッシュされたプランが配置されている限り、値は実行全体で再利用されます。
SQL Serverの新しいバージョンでは、この領域が改善されています。
これらの改善により、キャッシュされたプランをランタイムフィードバック(前回の実行で使用されたメモリ許可の量)に基づいて更新できます。
キャッシュされたプランの一部としてメモリ許可が再利用されることを確認する特定のソースをドキュメントで見つけることはできませんが、新しいバージョンで導入されたメモリ許可フィードバックの改善から十分に示唆されていると思います。