web-dev-qa-db-ja.com

SSASモデルの更新-この操作を完了するのに十分なメモリがありませんエラー

表形式のSSASモデルの更新に関する問題が発生し始めました。

表形式のSSASモデルには、38のテーブルがあります。

このプロセスは1年以上問題なく実行されていますが、約1か月間、モデル内のテーブルを正常に処理することができませんでした。

SSASデータベースにアクセス>右クリック>データベースの処理>デフォルトを処理するモードを選択してから[OK]を選択すると、問題が発生します。

エラーメッセージで失敗する前に、約5分間待機します。

サーバーへの変更を保存できませんでした。エラーが返されました: 'この操作を完了するのに十分なメモリがありません。使用可能なメモリが増える可能性がある場合は、後でもう一度やり直してください。

enter image description here

enter image description here

テーブルを個別に「処理」しようとすると、同じエラーメッセージが表示されます。

詳細ウィンドウ内でSSASのメモリ設定を調べ、値をデフォルトにリセットしました。したがって、(気付いているように)キー値は現在次のとおりです。

enter image description here

サーバーが数回再起動されましたが、まだ同じ問題があります。

環境の詳細:

Windows Server 2016データセンター

SQL Server 2017(RTM-CU9-GDR)(KB4293805)-14.0.3035.2(X64)

SSASバージョン:14.0.223.1

サーバーモード:表形式

サーバーメモリ:64Gb

SQL Server割り当てメモリ:28Gb

この種の問題に関するオンラインの記事を複数用意しましたが、これまでのところ関連性/有用性のあるものはありません。

どんなガイダンス/援助もいただければ幸いです。

免責事項:私はBI/SSASの人ではありません。私はこの問題を与えられたDBAだけなので、これを正しく説明しなかったら許してください

3
grouchball

TL/DR:メモリを追加する、モデルのサイズを縮小する、SQL ServerサービスまたはSQL Server Analysis Servicesを移動する別のサーバー(スケールアウトなど)

長い説明:私たちは数か月前に表形式のSSASプロダクションサーバーを使用してこの演習を行い、実際にマイクロソフトに「正式な」推奨事項について連絡しました。インフラストラクチャチームはRAMでけちでした(正確には安いわけではないので理解できます)。わかりやすくするために、発生したエラーは次のとおりです。

アプリケーションに使用できる十分なメモリがないため、操作はキャンセルされました。 32ビットバージョンの製品を使用している場合は、64ビットバージョンにアップグレードするか、マシンで使用可能なメモリ容量を増やすことを検討してください。

私たちのサーバーは元々64 GBのメモリでセットアップされ、合計40 GBのサイズの2つのSSASモデルをホストしていました。このマシンでは他のSQL Serverサービスはホストされていません。モデルによっては問題なく処理される日もあれば、失敗する日もあります。私たちはサーバーを再起動し、多分それらは成功するでしょう...風がちょうどよく、星と惑星がすべて揃っていれば。

多次元(MOLAP/ROLAP/HOLAP)モデルとは異なり、デフォルトの表形式モデルはメモリに読み込まれます全体インメモリテクノロジー を活用するため。モデルをメモリに完全にロードできない場合、問題が発生します。

悲しいことに、サービスを実行するために必要な「最小」レベル以外の何かを提供する正式なドキュメントを見つけることができないため、Microsoftのドキュメントは「メモリの推奨事項」とは別のものです。マイクロソフトが提出したサポートチケットから、マイクロソフトの推奨事項は次のとおりです。

サイズXのモデルの場合、SSASサービスで使用されるSSASサーバーで2X〜10X RAMのプロビジョニングを行います。これは、さらに次の要因の影響を受けます。

  • キューブ処理では、組み込みメモリ内のモデルのシャドウコピーを含む完全な処理のために2X-3X RAMが必要です。
  • キューブに接続されたユーザー/レポートの数もRAM要件を増やします。ユーザー/レポートは計算またはメモリマテリアライゼーションを実行するDAXクエリを生成できるため、レポートの数、ボリュームなどによっては最大10倍になることがあります。 (これにより、エンジンは非圧縮の中間結果を構築し、メモリ消費が予想よりも高くなる可能性があります)。
  • 処理されるモデルの数も、必要なメモリフットプリントを増やす可能性があります。
  • 設定が無効になっている場合は、VertiPaqPagingPolicyを有効にします。これにより、SSASは、処理とクエリのパフォーマンスを犠牲にして、メモリを追加するためにOSページングファイルを利用できます。

最終的に行ったのは、サーバー上のRAMの量を増やすことでした。これにより、最終的に当面の問題が解決されました。他の唯一の実際の代替「ソリューション」は、モデルで必要なデータの量を制限するか、デプロイメントを他のサーバーにスケールアウト(たとえば、サービスを別のサーバーに移動)することです。

SQL Serverサービスも同じサーバーでホストされているため、SSASサービスのメモリが不足していると思います。基本的には、これらのサービスを互いに分離するか、サーバー上でそれらを並行して実行するのに十分なRAMを持っている必要があります。可能であればSSASサービスを別のサーバーに分離することを強くお勧めしますが、ライセンスの問題がこれに影響を与える可能性があるため、十分なRAMを確保してください。

その他にいじることができるものは、msmdsrv.iniファイルにある config settings ですが、今回のシナリオでは、これらがうまくいかなかったため、実行結果の最終的な結果に大きな違いがありました。メモリの。

3
John Eisbrener

同様の問題があり、Azure Analysis Servicesの使用を開始するまで、オンプレミスサーバーのメモリが64 GBかどうかに関係なく、16 GBのメモリしか割り当てられないSSASスタンダードエディションで回避策を見つける必要がありました。

Enterprise Editionを使用している場合は、データモデルのテーブルにパーティションを作成して、最近更新されたレコードのみを更新することを検討することをお勧めします。それ以外の場合、標準エディションを実行している場合は、モデルを2つ以上のパーツに更新します。たとえば、テーブルのサイズに応じて、1つのジョブに19のテーブルを配置します。バランスをとってください。

{  
  "refresh": {  
    "type": "full",  
    "objects": [  
      {  
                 "database":"AdventureWorks",
                "table":"A"
      }  
      , 
      {  
                 "database":"AdventureWorks",
                "table":"B"
      }  
      , 
      {  
                 "database":"AdventureWorks",
                "table":"C"
      }  
      ,     
      {  
                 "database":"AdventureWorks",
                "table":"D"
      }  
      ,
      {  
                 "database":"AdventureWorks",
                "table":"E"
      }  

      ,
      ....


    ]  
  }  

}

データモデルのサイズに応じて、AzureでこれらのS 'プランのいずれかを使用してから、テーブルパーティションを使用することをお勧めします。

2
Jerry Chuen