2016-10-07 9 views
-1

概要: - 以下の主要コンポーネントを備えたSAASソリューションがあります。 1.管理者がデータを編集できるWebポータルのバックエンドがあります。 2.モバイルデバイスから呼び出されるWeb APIがあります。モバイルデバイスは、進捗状況を読んでいる生徒を追跡または報告します。AzureはデータベースCPUの制限をあまりにも過ぎます

これまでのソリューションは仮想サーバーでホストされていました。 ここでは、ソリューションをAzureフレームワークに移行して、弾性データベースプールのスケーラビリティを利用できるようにします。 ポストを非同期的に処理できるときにモバイルデバイスから大量のポストを処理するためにイベントトピックを使用していますが、 がありますが、同期処理が必要なポストがいくつかあり、Azureのファブリックは複数同時接続。

問題の例: -

だから、Azureのは、次のようなクエリを実行します: -

SELECT q.Category, COUNT(*) 
FROM Question q 
JOIN Answer a 
ON a.QuestionId = q.QuestionId 
GROUP BY q.Category 
ORDER BY q.Category 

すべての次のシナリオで97%以上のSQLのCPUピーク: -
1. DTUは50であり、複数の同時呼び出しがあります。
2. DTUは1500で、同時コール数は5以上です。
3. DTUは4000で、同時コール数は20以上です。

Microsoftとのサポート呼び出しを開始しました。 SQLの統計情報とインデックスからWeb APIのプライシング層までを調査するのに1週間以上を費やしました。 上記のシナリオでは、CPUがSQLデータベースのピークを迎えているという証拠が残っています。

これは、必然的に「システムの大きなチャンクを書き直す」という議論につながります。

したがって、根本的な問題は、弾性データベースプールが標準SQLデータベースの能力の近くで実行できないように見えることです。 また、スタンドアロンデータベースのパフォーマンスは、仮想サーバーのパフォーマンスと競合していないようです。

パフォーマンスを維持し、スケーラビリティを追加する理由から、Elasticデータベースプールが推奨されたため、これは非常に不満です。 現在、1つの仮想サーバーで700以上の顧客を実行しています。顧客ごとに1つのシャード・データベースを作成する予定です。 これは、何百人もの顧客から数万人の顧客に拡大することができるという考えです。 現実には、Azureファブリックを仮想サーバー上のパフォーマンスに近い場所で実行するために戦っています。 この質問は、Azureが妥当なペースで重要ではない作業を実行する上で重要な経験を持つ人がいるかどうかを尋ねることです。 (システムの大きなチャンクを書き換える必要はありません)

+0

ありませんか?あなたに質問してください。それをきれいにすると、閉じます。 – Paparazzi

+1

単一のデータベース・インスタンスからプールに移行することは、常にリフト・アンド・シフトではありません。現在、データ依存型ルーティングをどのように処理しているかを考慮する必要があります。次に、データベース接続を接続の範囲(マスタとテナントの両方の接続)の両方で考慮する必要があります。 MSがあなたのアプリケーションの大きな断片を書き直すよう提案している場合、あなたは弾力的なスケールのために準備ができていないかもしれないいくつかの領域を見つけたかもしれません。質問を単位に分解したいのであれば、あるインスタンスから多くのインスタンスに移行する方法には満足しています。 –

+0

ありがとう@ShannonLowder、私はあなたが正しいことを認識しています。 私はリファクタリングが必要ではないことを望んでいましたが、今は不可避だと私は受け入れました。 –

答えて

0

したがって、一言で言えば、 SQLのデータプールの仕組みがより最適化されたクエリを必要とすることが判明しました。

DTUの測定方法は、実際にはるかに軽いSQL作業がSQLデータプールの外側で処理されることを意味します。データプール内のデータ操作は可能な限り滑らかでなければなりません(索引付き、統計情報の更新、結合で可能なフィールドの最小値)。

これはAzureが動作する方法です。

0

SQLデータベースをクラウドに移行する際には、考え方が変わります。

オンプレミスの世界では、強力なワークロードを処理するのに十分なほど強力なマシンに慣れています。これは、物理マシンが、処理量の多い大きなワークロード(最小のタスクではなく、処理する必要がある最大のタスク用に構築されている)を処理するために必要なリソースで構築されているためです。リソースの可用性が過剰になるため、非効率性がクエリおよび基本スキーマに作用することがしばしばあります。過剰なリソースの可用性により、影響は最小限に抑えられます。

しかし、これらのデータベースをAzureに移行しようとすると、やはりうまく動作しません。 Azureは、ペイ・パー・ユースのモデルです。あなたはYのリソースにXを支払うが、さらに必要なときにはXをもっと多く支払う。このモデルのために、あなたのデータベースで行うすべてのことが効果的にお金を要すると考える必要がある。すべてのクエリはお金を必要とします。あらゆる非効率性は、ますます多くのお金を必要とします。その他1ヶ月ごとに明示的にリソースを支払うときは、別の方法で金銭を無駄にしているように感じるため、購入する傾向があります(通常は最小の仕事です)。これは、ときどき大きなタスクを実行する必要がある場合、そのリソースを処理するのに十分なリソースがなく、パフォーマンスが低下することを意味します。これは、Azureの方がコストはかかるものの、パフォーマンスが悪いと考えるようになります。

あなたの状況を改善するために、あなたがそれを支払うつもりなら、いつでもAzureであなたのリソースを増やすことができます。または、他の人がクエリや基礎となるスキーマを提案して最適化し、そのたびにコストを節約することができます。

関連する問題