2016-08-11 3 views
0

В настоящее время мы используем 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), и каковы таблицы, подлежащие проверке после очистки?

Заранее благодарен.

С уважением, Сундар.

+0

Какую точную версию SQL CE вы используете? – ErikEJ

+0

Спасибо ErikEJ, Мы используем SQL CE 3.5 SP2. Версия продукта - 3.5.8080.0. – Sundar

+0

Привет, ErikEJ, Обогащение для ваших входов. – Sundar

ответ

0
  • Не используйте SqlCeEngines Cleanup, Repair или Compact. Это испортит вашу базу данных и производительность вашей базы данных.
  • Только открыть или сгенерировать базу данных в целевой операционной системе. Если вы открываете базу данных в Windows CE, сгенерированную в Windows 10 (здесь мы получили разные кодеки), ее нужно будет преобразовать в целевую платформу, которая занимает невероятное количество времени. Windows CE и Windows XP являются единственными платформами, на которых можно легко открыть генерализованную базу данных.
  • Рассмотрите возможность переключения на SQLite, чтобы избежать всего этого дерьма.
Смежные вопросы