大量のデータの統計をレポートするためにSSASを使用しています。
最近、チューニングのベストプラクティスを学び始めましたが、SSASがデータをキャッシュする方法に興味があります。
私は調査を行い、直接ディスクIOヒットを回避するために、SSASが使用しているキャッシュには3つのタイプがあると結論付けました。
したがって、問題は、コールドクエリが実行されているときに、3つのレベルすべてにデータが格納されるかどうかです。それが起こっている場合、同じデータが異なるレベルでキャッシュされる可能性はありますか?もしそうなら、RAMのほぼ全体を消費する可能性があるので、なぜキャッシュの使用率が高いのですか?
たとえば、FEキャッシュがセルセットまたは行セットデータの一部を格納し、同時にSEキャッシュがセルセットまたは行セットデータのサブパートを格納し、OSキャッシュがデータを格納する可能性はありますか?
はい、3つのレイヤーすべてが同じデータをキャッシュしていることがあります。
SSASは使用されるため、すべてのメモリを消費することを心配する必要はありません。 SQLServerデータベースエンジンも同じことをします。
SSASがメモリ不足になると、SSASは独自のキャッシュを自動的に管理し、必要に応じてフロントエンドとストレージエンジンの両方のキャッシュからエントリを削除します。同じホスト上でメモリを競合する他のサービスを実行している場合は、 メモリプロパティ 設定を変更して、SSASからのメモリ使用量を制限することをお勧めします。
参照するオペレーティングシステムのキャッシュは、ファイルシステムのキャッシュです。 Windowsは、メモリ不足になったときにも自動的に管理します。タスクマネージャーでは、「キャッシュされた」数値のほとんどはファイルシステムのキャッシュによるものです。 SysinternalsのRAMMap ユーティリティとそのEmptyスタンバイリストオプションを使用して、ファイルシステムキャッシュを削除できます。
Chris Webbは、SSASキャッシュウォーミングの実行に関するブログ投稿をいくつか書いています。これは興味深いと思うかもしれません。投稿は2009年のものですが、詳細はSSAS多次元の新しいバージョンにも関連しています。