2

パフォーマンスに関する考慮事項SQL Azureアプリケーションを計画する際に留意すべき点はどれですか? Azureストレージ、ワーカーとWebの役割は非常にスケーラブルに見えますが、最終的に1つのデータベースを使用しているとボトルネックに似ています。SQL Azureのパフォーマンスに関する考慮事項

  1. どのように多くの同時接続し SQL Azureのサポート:

    私は約番号を検索しようとしていましたか?

  2. 帯域幅はどれですか?

運がない。

たとえば、非常に高いレベルの挿入を使用する計画とアプリケーションですが、毎回集約関数の結果を返す必要があります(たとえば、列内の同じキーを持つすべてのレコードの合計)。私はテーブルの収納に行くことができません。

バッチ処理もオプションですが、時間応答も重要です。データベースが大量に接続されて膨らむのではないかと心配しています。

シャーディングは別のオプションですが、挿入量が大量であっても、データ量は非常に少なく、PKが1つでFKがない場合は4〜6列です。ですから、1GbのDBでさえも、パーティションの過剰な過負荷(と過払い:D)になります。

私がこれらの種類のアプリケーションに直面しているときに覚えておく必要があるパフォーマンスキーはどれですか?

乾杯。

答えて

3

スケーラビリティとパフォーマンスの両方を達成することは、クラウドであっても非常に困難です。あなたの質問は主にスケーラビリティーに関するものでした。そのため、例えばキューを使用してデータが「最終的に」整合するようにアプリケーションを設計することができます。ワーカー・ロールは、受信した挿入要求をリッスンし、挿入を非同期に実行します。

データベースへのラウンドトリップ回数を最小限に抑えて、接続プーリングを最適化するには、インサートも必ずバッチしてください。 1回のショットで100枚のインサートを送ることができます。また、SQL AzureはMARS(複数のアクティブなレコードセット)をサポートしているため、複数のSELECTを1回のバッチで呼び出しコードに戻すことができます。バッチ処理とMARSを使用すると、データベース接続数を最小限に抑えることができます。

通常、シャーディングは読み取り操作に役立ちます。 (私は決してシャーディングのインサートをベンチマークしていませんでしたが)。だから、シャーディングがあなたの要求にそんなに役立つでしょうか?

Azureは、同じサーバー上の他のユーザーとデータベースを共有するマルチテナント環境で、スケーラビリティと妥当なパフォーマンスを実現するために設計されています。したがって、応答時間が保証された強力なパフォーマンスが必要な場合は、ホスティングの選択肢を再評価するか、tijmenvdkが提案したようにAzureのパフォーマンスの境界を実際にテストする必要があります。

3

SQL Azureは、任意の形式のリソース競合が発生すると接続を抑制します(負荷がかかるが、データベースが物理的に移動したときにも発生する可能性があります)。スロットリングは非決定論的なものであり、これが発生するかどうか、またいつ発生するかを予測することはできません。調整すると、SQL Azureによって接続が切断され、再試行が必要になります。サポートされている接続数および帯域幅は、基盤となるインフラストラクチャの柔軟性に起因して「設計によって」公開されていません。つまり、高スループットではなく高可用性のために設定が最適化されています。

既知の時刻にバーストが発生した場合は、バースト中にシャーディングを行い、バーストが発生した後にデータを統合することが考えられます。これを処理する別の方法は、スロットルが発生した場合にのみ、キューイング/バッチ書き込みを開始することです。 Azure Queueを使用すると、後でキューを空にすることができます。この「オーバーフロー機構」は、スロットリングが発生すると自動的に係合するという利点があります。

代替として、Azureテーブルストレージを使用し、データ全体にわたって集計を実行する代わりに、すべてのレコードの必要な合計を返す代わりにレポートすることができる別々の実行合計テーブルを保持することができます(これは、テーブルにロックされていません)。

明白ですが、最初のステップでは、シナリオでスロットリングが実行されているかどうかをテストすることになります。私はオーバーフローソリューションを試してみましょう。

関連する問題