3

Microsoft.AnalysisServices.Tabular を使用して、Azure 分析サービスへのデータの更新/読み込みをテストしています。コードは非常に簡単です

while (true)
{
    var server = new Microsoft.AnalysisServices.Tabular.Server();
    server.Connect(
            "Provider=MSOLAP;Data Source=asazure://[...];Persist Security Info=True; Impersonation Level=Impersonate;");
    var m = server.Databases[0].Model;
    var tabs = m.Tables;
    tabs["Viewer"].RequestRefresh(RefreshType.DataOnly);
    tabs["EventClick"].RequestRefresh(RefreshType.DataOnly);
    [...]
    m.SaveChanges();
    server.Disconnect();
    Thread.Sleep(new TimeSpan(0,0,0,1));
}

モデルは最初は約 300MB で、アクティブな関係や複雑な測定はありません。基本的には、非常にゆっくりと成長するデータです (すべてのテーブルを合わせて 1 秒あたり 10 レコード未満)。

メモリ使用率が少し増加し、ある程度安定すると予想していましたが、何らかの理由で、Azure AS 開発計画の Azure メモリ制限 (約 3 GB) に達するまで、データベースに必要なメモリが更新のたびに (一定の速度で) 増加します。その時点で、アプリケーションは例外を受け取ります

Unhandled Exception: Microsoft.AnalysisServices.OperationException: Failed to save modifications to the server. Error returned: 'Memory error: Allocation failure : The paging file is too small for this operation to complete.

メモリ使用率

テーブル/パーティションの更新を停止しても、メモリ使用率は一定のままです。Azure portal で Azure AS を一時停止して再起動すると、元の値が ~300MB まで低下することに気付きました

DMV の結果は何も教えてくれませんが、とにかく投稿します (スナップショット、db は約 1.5GB です)。異変に気付く人もいるかもしれません

DMV:SELECT top 10 * FROM $SYSTEM.DISCOVER_OBJECT_MEMORY_USAGE ORDER BY OBJECT_MEMORY_NONSHRINKABLE DESC

OBJECT_PARENT_PATH OBJECT_ID   OBJECT_MEMORY_SHRINKABLE OBJECT_MEMORY_NONSHRINKABLE OBJECT_VERSION OBJECT_DATA_VERSION OBJECT_TYPE_ID OBJECT_TIME_CREATED OBJECT_MEMORY_CHILD_SHRINKABLE OBJECT_MEMORY_CHILD_NONSHRINKABLE   OBJECT_GROUP
"Global"    "Big"   0   11026432    "-1"    "-1"    "2" 2016-12-13 12:01:26.000 0   0   "$System"
""  "Global"    0   5055222 "-1"    "-1"    "100011"    2016-12-13 12:01:26.000 0   15903456    "$System"
"Global"    "SystemHeap"    0   1396488 "-1"    "-1"    "2" 2016-12-13 12:01:26.000 0   0   "$System"
"ardev.Databases.mytestdb_90db7154-080a-4094-bd4b-cc6b35422d42.Dimensions.ProductImpression (28).In-Memory Table.Columns"   "ProductId (73)"    0   1068088 "0" "-1"    "703003"    2016-12-13 04:00:52.000 0   528 ""
"ardev.Databases.mytestdb_90db7154-080a-4094-bd4b-cc6b35422d42.Dimensions.Website Product Sale (31).In-Memory Table.Columns"    "ProductId (78)"    0   1066288 "-1"    "-1"    "703003"    2016-12-13 04:00:52.000 0   136 ""
"Global"    "IMBIData"  0   880640  "-1"    "-1"    "2001"  2016-12-13 12:01:26.000 0   0   "$System"
"Global"    "Aligned Global Heap"   0   619488  "0" "-1"    "2" 2016-12-13 12:01:26.000 0   0   "$System"
"ardev.Databases.mytestdb_90db7154-080a-4094-bd4b-cc6b35422d42.Dimensions.Visit (16).In-Memory Table.Columns"   "Url (56)"  0   508404  "-1"    "-1"    "703003"    2016-12-13 04:00:52.000 0   22040   ""
"Global"    "GeneralPurpose"    0   413480  "-1"    "-1"    "2" 2016-12-13 12:01:26.000 0   0   "$System"
"Global"    "Allocators"    0   404176  "-1"    "-1"    "2" 2016-12-13 12:01:26.000 0   0   "$System"

この「メモリ リーク」の原因と回避方法を教えてください。私が知っておくべき落とし穴はありますか?

// 編集

更新頻度を下げるとどうなりますか? 現在、5 分ごとにデータを更新し、3 時間ごとにインスタンスを再起動しています。

メモリ メトリックは次のようになります。

過去1時間の記憶

x分ごとに更新すると、基本的に問題はまだ表示されます。x 日ごとにデータを更新するほとんどの人は、何かがおかしいことに気付かないでしょう。

4

0 に答える 0