Sql Sync приводит к тому, что исходный сервер исчерпывает память, вызывая ошибку во время синхронизации с клиентским сервером

Я синхронизирую свое производство SQL Server 2008 R2 db с моим сервером SQL Server 2008 R2 Express с отказоустойчивостью с использованием Microsoft Sync Framework 2.1, и он отлично работал некоторое время, а затем через несколько дней синхронизации источника (производственного SQL Server) запускается нехватка памяти (ОЗУ) из-за синхронизации.

Это не прекратило работать или что-то еще, или привести к сбою транзакций веб-сайта, но Sync Framework начинает бросать нижеприведенную ошибку, если на рабочем поле имеется небольшой барабан.

Кто-нибудь видел это или имеет представление, почему он это делает, и если есть исправление?

Вот ошибка.

Microsoft.Synchronization.Data.DbSyncException: An unexpected exception occurred in a background thread that is enumerating changes. See the inner exception for more details.

System.Data.SqlClient.SqlException: There is insufficient system memory in resource pool 'internal' to run this query.

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 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 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at System.Data.SqlClient.SqlCommand.DeriveParameters()
at System.Data.SqlClient.SqlCommandBuilder.DeriveParameters(SqlCommand command)
at Microsoft.Synchronization.Data.ManagementUtils.DeriveParameters(SqlCommand command, IEnumerable`1 columns)
at Microsoft.Synchronization.Data.SqlServer.SqlSyncAdapter.SetCommandSessionParameters(IDbCommand command, String commandName)
at Microsoft.Synchronization.Data.RelationalSyncProvider.EnumerateChangesInBatchesInternal(Object batchProducer)
--- End of inner exception stack trace ---

at Microsoft.Synchronization.Data.DbSyncBatchProducer.DequeueBatch()
at Microsoft.Synchronization.Data.RelationalSyncProvider.ConsumeBatchFromProducer(DbSyncScopeMetadata scopeMetadata)
at Microsoft.Synchronization.Data.RelationalSyncProvider.GetChanges(DbSyncScopeMetadata scopeMetadata, DbSyncSession DbSyncSession, UInt32 memoryBatchSize)
at Microsoft.Synchronization.Data.RelationalSyncProvider.GetChangeBatch(UInt32 batchSize, SyncKnowledge destinationKnowledge, Object& changeDataRetriever)
at Microsoft.Synchronization.KnowledgeProviderProxy.GetChangeBatch(UInt32 dwBatchSize, ISyncKnowledge pSyncKnowledge, ISyncChangeBatch& ppChangeBatch, Object& ppUnkDataRetriever)
at Microsoft.Synchronization.CoreInterop.ISyncSession.Start(CONFLICT_RESOLUTION_POLICY resolutionPolicy, _SYNC_SESSION_STATISTICS& pSyncSessionStatistics)
at Microsoft.Synchronization.KnowledgeSyncOrchestrator.DoOneWaySyncHelper(SyncIdFormatGroup sourceIdFormats, SyncIdFormatGroup destinationIdFormats, KnowledgeSyncProviderConfiguration destinationConfiguration, SyncCallbacks DestinationCallbacks, ISyncProvider sourceProxy, ISyncProvider destinationProxy, ChangeDataAdapter callbackChangeDataAdapter, SyncDataConverter conflictDataConverter, Int32& changesApplied, Int32& changesFailed)
at Microsoft.Synchronization.KnowledgeSyncOrchestrator.DoOneWayKnowledgeSync(SyncDataConverter sourceConverter, SyncDataConverter destinationConverter, SyncProvider sourceProvider, SyncProvider destinationProvider, Int32& changesApplied, Int32& changesFailed)
at Microsoft.Synchronization.KnowledgeSyncOrchestrator.Synchronize()
at Microsoft.Synchronization.SyncOrchestrator.Synchronize()

1
nl ja de
Примечание. Если я перезапущу производственный блок SQL, он снова начнет работать. Но я хочу знать, почему это происходит, и если есть исправление (исправление или настройки)
добавлено автор kyleb, источник

1 ответы

попробуйте включить пакетную обработку, установив свойство MemoryDataCacheSize.

1
добавлено
и сколько памяти у вас на вашем сервере SQL Server и каков параметр для максимальной памяти SQL Server? насколько велика ваша база данных и сколько данных вы фактически синхронизируете?
добавлено автор JuneT, источник
Я думаю, что сделал, но я проверю позже
добавлено автор kyleb, источник
Я делаю это уже uint memoryDataCacheSize = 524288; _SyncOrchestrator.LocalProvider = новый SqlSyncProvider (область действия, ClientConn) {MemoryDataCacheSize = memoryDataCacheSize};//устанавливаем основной поставщик sql-сервера orchestrator поставщику синхронизации сервера, связанному с//областью в базе данных основного сервера _SyncOrchestrator.RemoteProvider = новый SqlSyncProvider (область действия, ServerConn) {MemoryDataCacheSize = memoryDataCacheSize};
добавлено автор kyleb, источник
4G RAM. Максимальная память: 2147483647 МБ (по умолчанию). Размер БД = файл данных - 492 МБ, файл журнала = 14,1 ГБ. Насколько я фактически синхронизирую данные ... Я только синхронизирую таблицы с изменяющимися данными, а не статические таблицы, которые никогда не меняются. Моя синхронизация занимает всего 5-20 секунд каждые 30 минут. Начальная синхронизация заняла 15-20 минут.
добавлено автор kyleb, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)