1

我一直在尝试使用 Microsoft Sync framework v2.1 来同步两个 MS SQL Server 数据库,但是只同步 35 个表大约需要 2 个小时,并且记录总数少于 500,000 条记录,这根本不被接受。

所以我是否遗漏了任何可以优化性能的方法,因为这只是一个测试数据,而生产数据要大得多。我还发现 MS Sync Framework 正在比较源跟踪表和目标跟踪表中的每条记录——基表中的每条记录在跟踪表中都有相应的记录——而更新和插入仅在两个数据库之一中完成。或者我应该把 Sync 框架扔掉并使用其他东西。

这是我用于配置和同步的代码。

任何帮助表示赞赏。

提前致谢。

public void Initialize(string SourceConnStr, string DestConnStr)
    {
        SqlConnection src = null;
        SqlConnection dest = null;
        try
        {
            src = new SqlConnection(SourceConnStr);
            dest = new SqlConnection(DestConnStr);
            DbSyncScopeDescription scope = new DbSyncScopeDescription("SyncScopeDB");
            foreach (string tableName in tablesNames)
            {
                DbSyncTableDescription table = SqlSyncDescriptionBuilder.GetDescriptionForTable(tableName, dest);
                scope.Tables.Add(table);
            }
            SqlSyncScopeProvisioning srcProv = new SqlSyncScopeProvisioning(src, scope);
            srcProv.ObjectSchema = "SyncDB1";
            srcProv.Apply();

            SqlSyncScopeProvisioning destProv = new SqlSyncScopeProvisioning(dest, scope);
            destProv.ObjectSchema = "SyncDB2";
            destProv.Apply();
        }
        catch (Exception ex) { Console.Write(ex.Message); }
    }

public string Sync(string SourceConnStr, string DestConnStr)
    {
        SqlConnection src = null;
        SqlConnection dest = null;
        SampleSyncOrchestrator Orch = null;
        try
        {
            src = new SqlConnection(SourceConnStr);
            dest = new SqlConnection(DestConnStr);

            Orch = new SampleSyncOrchestrator(
                new SqlSyncProvider("SyncScopeDB", src, null, "SyncDB1"),
                new SqlSyncProvider("SyncScopeDB", dest, null, "SyncDB2"));
            var syncStats = Orch.Synchronize();
            Console.Write(syncStats.ToString());
        }
        catch (Exception ex) { return ex.Message; }
        return "Success";
    }

public class SampleSyncOrchestrator : SyncOrchestrator
{
    public SampleSyncOrchestrator(RelationalSyncProvider local, RelationalSyncProvider remote)
    {
        this.LocalProvider = local;
        this.RemoteProvider = remote;
        this.Direction = SyncDirectionOrder.Upload;
    }
}
4

1 回答 1

0

所涉及的数据库是否已经包含数据?

不,Sync Fx 不比较源行和目标行。_tracking 表用于跟踪更改。

于 2013-11-15T00:13:31.067 回答