В настоящее время мы используем SQL Server CE 3.5 со многими различными двунаправленными синхронизациями (Syncframework 2.1) с серверными БД и. Но в результате производительность приложения ухудшается, и мы регулярно нуждаемся в обновлении нового локального SDF для пользователей. И таким образом мы видим, что наблюдается заметное улучшение производительности, и через 60 дней или около того происходит то же самое.SQL Server CE 3.5 Ошибка производительности
Когда мы включили трассировку в конфигурации, мы заметили, что ниже исключение непрерывно регистрируется в файле трассировки. В нашем коде мы видим только вызов метода «SetTableSentAnchor», как последуют другие методы? Как мы можем справиться с этим исключением.
__sysTxCommitSequence: System.InvalidOperationException: последовательность очистки хранения недействительна. Для указанного диапазона ввода очистите таблицу надгробий перед очисткой истории таблицы транзакций.
в System.Data.SqlServerCe.SqlCeChangeTracking.ProcessResults (Int32 час)
в System.Data.SqlServerCe.SqlCeChangeTracking.CheckIfDataIsPresentInTombstone (Int64 retentionValue, PurgeType PTYPE)
на System.Data.SqlServerCe.SqlCeChangeTracking.PurgeTransactionSequenceData (PurgeType PTYPE , Int64 retentionValue)
на Microsoft.Synchronization.Data.SqlServerCe.SqlCeClientSyncProvider.SetTableSentAnchor (String TABLENAME, SyncAnchor якорь)
Кроме того, мы видели установку для RetentionInDays, установленных в 60, как показано ниже. Есть ли последствия этого?
[ConfigurationProperty("clientRetentionInDays", DefaultValue = 60, IsRequired = false)]**
В настоящее время код не используется в коде. Поэтому мы попытались использовать метод PurgeTombstoneTableData
класса SqlCeChangeTracking
для очистки данных Tombstonetable
в системной таблице (_sysOCSDeletedRows
). Но мы оказались безуспешными, так как получаем исключение.
Операции отслеживания изменений не разрешены на системных таблицах. [Таблица имя = __sysOCSDeletedRows]
В дополнение к сказанному выше, мы также пытались SqlSyncStoreMetadataCleanup.PerformCleanup
метод, аналогичный фрагмент кода ниже. Но все же мы получаем ошибку. Операции отслеживания изменений не разрешены в системных таблицах.
https://msdn.microsoft.com/en-us/library/ee617373(v=SQL.110).aspx
SqlSyncStoreMetadataCleanup metadataCleanup = new SqlSyncStoreMetadataCleanup(serverConn);
bool cleanupSuccessful;
metadataCleanup.RetentionInDays = 7;
cleanupSuccessful = metadataCleanup.PerformCleanup();
Вопросы:
Как мы можем обработать это исключение во время чистки записей Tombstonetable?
Каковы другие таблицы, в которых хранятся Tombstonetable?
Как преодолеть эту проблему с производительностью SDF после 60 дней регенерации?
Каковы могут быть другие лучшие практики?
Любой намек на то, как успешно очистить метаданные (PerformCleanup), и каковы таблицы, подлежащие проверке после очистки?
Заранее благодарен.
С уважением, Сундар.
Какую точную версию SQL CE вы используете? – ErikEJ
Спасибо ErikEJ, Мы используем SQL CE 3.5 SP2. Версия продукта - 3.5.8080.0. – Sundar
Привет, ErikEJ, Обогащение для ваших входов. – Sundar