2012-12-28 166 views
1

我正在使用Microsoft Sync Framework 2.1将我的生产SQL Server 2008 R2数据库与我的故障转移SQL Server 2008 R2 Express服务器同步,并且它对于然后在同步几天后,由于同步,源(生产SQL Server)开始用尽内存(RAM)。Sql Sync导致源服务器在同步到客户端服务器期间导致错误导致错误

它并没有停止运行或任何事情或导致网站交易失败,但同步框架开始抛出下面的错误,如果生产框上的低RAM。

任何人看到这个或有任何想法为什么这样做,如果有修复?

以下是错误..

Microsoft.Synchronization.Data.DbSyncException:发生在所列举 变化的后台线程意外的异常。查看内部例外以获取更多详细信息。

System.Data.SqlClient.SqlException:资源池'internal'中的系统内存不足以运行此查询。

在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,行动1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource
1所完成的Int32超时,任务&任务, 布尔asyncWrite)
在System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,runBehavior runBehavior,布尔returnStream,字符串 方法)
在System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior 行为,字符串方法)
在System.Data.SqlClient.SqlCommand.ExecuteReader()
在System.Data.SqlClient.SqlCommand.DeriveParameters()
在System.Data.SqlClient.SqlCommandBuilder.DeriveParameters(SqlCommand的 命令)
在Microsoft.Synchronization.Data.ManagementUtils.DeriveParameters(SqlCommand的 命令,IEnumerable`1列)
在Microsoft.Synchronization.Data.SqlServer.SqlSyncAdapter.SetCommandSessionParameters(IDbCommand的 命令,字符串命令名)
在Microsoft.Synchronization.Data.RelationalSyncProvider.EnumerateChangesInBatchesInternal(对象 batchProducer)内部异常的
---完堆栈跟踪---

在Microsoft.Synchronization.Data.DbSyncBatchProducer.DequeueBatch()
在Microsoft.Synchronization.Data.RelationalSyncProvider.ConsumeBatchFromProducer(DbSyncScopeMetadata scopeMetadata)
在Microsoft.Synchronization.Data.RelationalSyncProvider.GetChanges(DbSyncScopeMetadata scopeMetadata,DbSyncSession DbSyncSession,UInt32的memoryBatchSize)
在Microsoft.Synchronization.Data.RelationalSyncProvider.GetChangeBatch(UInt32的 BATCHSIZE,SyncKnowledge destinationKnowledge,对象& changeDataRetriever)
在万分之一oft.Synchronization.KnowledgeProviderProxy。GetChangeBatch(UInt32的 dwBatchSize,ISyncKnowledge pSyncKnowledge,ISyncChangeBatch & ppChangeBatch,对象& ppUnkDataRetriever)
在Microsoft.Synchronization.CoreInterop.ISyncSession.Start(CONFLICT_RESOLUTION_POLICY resolutionPolicy,_SYNC_SESSION_STATISTICS & pSyncSessionStatistics)
在Microsoft.Synchronization.KnowledgeSyncOrchestrator.DoOneWaySyncHelper( SyncIdFormatGroup sourceIdFormats,SyncIdFormatGroup destinationIdFormats, KnowledgeSyncProviderConfiguration destinationConfiguration, SyncCallbacks DestinationCallbacks,ISyncProvider sourceProxy, ISy ncProvider destinationProxy,ChangeDataAdapter callbackChangeDataAdapter,SyncDataConverter conflictDataConverter, 的Int32 & changesApplied,的Int32 & changesFailed)
在Microsoft.Synchronization.KnowledgeSyncOrchestrator.DoOneWayKnowledgeSync(SyncDataConverter sourceConverter,SyncDataConverter destinationConverter,SyncProvider都 sourceProvider,SyncProvider都destinationProvider,的Int32 & changesApplied,的Int32 & changesFailed)
at Microsoft.Synchronization.KnowledgeSyncOrchestrator.Synchronize()
at Microsoft.Synchronization.SyncOrchest rator.Synchronize()

+0

注意:如果我重新启动生产SQL框,它将重新开始工作。但我想知道为什么会发生,如果有一个修复程序(补丁明智或设置明智) – kyleb

回答

1

尝试通过设置MemoryDataCacheSize属性来启用批处理。

+0

我想我没有,但我会在稍后检查 – kyleb

+0

我已经这样做了UINT memoryDataCacheSize = 524288; _SyncOrchestrator.LocalProvider =新的SqlSyncProvider(作用域,ClientConn){MemoryDataCacheSize = memoryDataCacheSize}; //将orchestrator的主sql提供程序设置为与 关联的服务器同步提供程序//主服务器数据库中的作用域 _SyncOrchestrator.RemoteProvider = new SqlSyncProvider(scope,ServerConn){MemoryDataCacheSize = memoryDataCacheSize}; – kyleb

+0

以及您在SQL Server框中拥有多少内存以及SQL Server最大内存的设置是什么?你的数据库有多大,以及你实际上同步了多少数据? – JuneT

相关问题