問題タブ [geo-replication]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
azure - Azure SQL での外部データ ソースの処理と geo レプリケーション
以下は私の紺碧のセットアップです
- エラスティック プール プライマリ (30 データベース) - アクティブ
- エラスティック プール セカンダリ (30 データベース) - 読み取り専用 geo レプリケート。
プライマリ プールは、読み取りと書き込みのために WebApp によって使用されます。すべてのレポートはセカンダリで実行されます。
最近、プライマリのデータベースの 1 つに外部データ ソースを追加する必要がありましたが、クロス データベース クエリはうまく機能します。
良いことは、この外部データ ソース構成もレプリケートされ、セカンダリで適切に機能することです。
問題 :
セカンダリからクエリを実行すると、問題なく実行されます。私の懸念は、プライマリ db1 の外部データ ソースを使用していることです。
db1 の独自のコピーを使用できるように、セカンダリ プールに外部データ ソースを追加するより良い方法はありますか? または、Azure SQL はこれを単独で処理しますか?
フィードバックやヘルプをいただければ幸いです。
ありがとうございました
.net - .NET NHibernate sp_wait_for_database_copy_sync を使用した Azure SQL ジオレプリケーションの問題
アプリケーションの開発中に、Azure SQL Geo レプリケーションを導入して、さまざまな地理的な場所でのユーザー エクスペリエンスと応答性を向上させました。
現在、テスト中の 2 つのインスタンスがあります。プライマリとセカンダリ*で、1 つは米国にあり、もう 1 つはヨーロッパにあります。
問題
sp_wait_for_database_copy_sync が呼び出されたにもかかわらず、プライマリデータベースから新しく更新されたデータがセカンダリデータベースで使用できるようには見えません。
問題を再現する手順
- ユーザーがセカンダリインスタンスに接続する
- ユーザーがデータを更新します (プライマリデータベースに移動する「UPDATE」または「INSERT」 )。
- トランザクションがコミットされました
- sp_wait_for_database_copy_syncプロシージャは、適切なパラメーターを使用して呼び出され、更新呼び出しのブロックが解除されたときにデータがセカンダリ インスタンスにレプリケートされるようにします。
- update 呼び出しのブロックが解除されると、データ (新しく更新または挿入されたデータを含む) をプルしようとする試みがセカンダリデータベースで行われます。
- 新しく更新または挿入されたデータが結果セットに含まれていない - データベース コピーの同期手順では、更新呼び出しのブロック解除時にデータがレプリケートされることが保証されていませんでしたが、結果セットに表示されます。
技術的な実装の詳細
エンティティが更新され、トランザクションがコミットされ、データの同期が確保されると、次の 3 行のコードが順番に呼び出されます。
ISession.Save(object obj)
新しいエンティティを保存するために使用されますISession.Flush()
トランザクションをコミットするために使用されますISession.CreateSQLQuery("EXEC sys.sp_wait_for_database_copy_sync @target_server = N\'secondary-server\', @target_database = N\'database\';").ExecuteUpdate()
コールブロッキング同期手順を実行するために使用されます
質問
上記の 3 行のコードのどこが間違っているのでしょうか? 私が見る可能性のある犯人は次のとおりです。
ISession.Flush
同期的に実行されないため、ブロッキング ストアド プロシージャが実行されるとき、トランザクションはまだ実際にはコミットされていません。ISession.CreateSQLQuery("EXEC sys.sp_wait_for_database_copy_sync @target_server = N\'secondary-server\', @target_database = N\'database\';").ExecuteUpdate()
実際にはブロックされていません。
上記の 2 つまたはその他の問題をトラブルシューティングする方法についてのアイデアをいただければ幸いです。
- この場合のプライマリとセカンダリは、geo レプリケーションの設定に関するものです。
database - Azure データベースのフェールオーバー後に Azure Web アプリケーションにログインできない
アプリケーション接続文字列を構成しました。
最初は Web アプリケーションにログインできますが、フェイルオーバーを実行すると webapp にログインできません。
データベースには、ユーザー名とパスワードのテーブルがあります。Web アプリはデータベース テーブルから認証されます。
azure-sql-database - 大きなテーブルを使用した Azure SQL データベースの geo レプリケーション
Azure 以外のデータベースを Azure Sql データベースに移動する準備をしており、Geo レプリケーションをフェールオーバーとして使用したいと考えています。
私たちの監査テーブルには 1 億 3000 万行以上のデータがあり、シード処理にどれくらいの時間がかかるのでしょうか?
また、本番アプリを開く前に、シード処理が完了するのを待つ必要がありますか? シーディング プロセスが完了せず、プライマリ データベースでトランザクションの作成を開始した場合、セカンダリ DB のそれらのトランザクションはどうなりますか?