SQL Compact 数据库中 __syncTransactions 表的功能是什么

发布于 2024-12-09 07:06:20 字数 1293 浏览 0 评论 0原文

有谁知道 __syncTransactions 表的用途是什么?这是我的场景:

大约一年以来,我们很少有客户端在 SQL Server Compact 数据库上运行,并使用 Sync Framework v3.5 与 SQL Server 2008 Express 服务器数据库同步。看来对于记录数量较多的表(即>20000条),同步时间大约需要一分多钟,CPU也达到100%。

启用同步跟踪日志记录后,我设法缩小了同步缓慢背后的查询范围。以下查询检查客户端数据库中是否有包含约 70,000 条记录的表之一的插入:

select 嗯。* 来自
( 选择 ut0.* 从 [tblPermissionGroupResourceRole] 作为 ut0 哪里
( ut0._sysTrackingContext <> 'a4e40127-4083-4b27-88d0-ef3aed4ae343' 或者 ut0._sysTrackingContext 为 NULL )
AND (ut0._sysChangeTxBsn >= 9486853)
AND (ut0.
_sysInsertTxBsn NOT IN (SELECT SyncBsn FROM __syncTransactions))

) as ut 左外连接
( 选择 txcs0.* 从 _sysTxCommitSequence 作为 txcs0 ) 作为 txcs ON (ut._sysInsertTxBsn = txcs._sysTxBsn) 哪里
COALESCE(txcs.
_sysTxCsn, ut._sysInsertTxBsn) > 9486853 和 COALESCE(txcs._sysTxCsn, ut.__sysInsertTxBsn) <= 9487480

我突出显示了大约需要 1 分钟才能执行的行。原因是 __syncTransaction 表包含大约 1200 条记录,并且由于与我的 tblPermissionGroupResourceRole 表中的 70,000 条记录的交叉引用,查询非常慢。

因此,我需要了解如何使用 __syncTransactions 表,以便我可以尝试清除该表中的记录,或者是否有其他方法来解决我的问题?

非常感谢任何帮助。

亲切的问候, 萨桑卡。

Does anyone know what __syncTransactions table is used for? Here's my scenario:

We have few clients running on SQL Server Compact database syncing with SQL Server 2008 Express server database using Sync Framework v3.5 for a about a year now. It seems that for tables with large number of records (i.e. > 20000), it roughly takes more than a minute to sync and CPU reaches 100% as well.

After enabling sync trace logging, I managed to narrow down the query that was behind the slow syncing. Following is the query that checks for inserts in the client database for one of the tables that contains ~70,000 records:

select
ut.*
from
(
select
ut0.*
from
[tblPermissionGroupResourceRole] as ut0
where
( ut0._sysTrackingContext <> 'a4e40127-4083-4b27-88d0-ef3aed4ae343'
OR
ut0.
_sysTrackingContext IS NULL
)
AND (ut0._sysChangeTxBsn >= 9486853)
AND (ut0.
_sysInsertTxBsn NOT IN (SELECT SyncBsn FROM __syncTransactions))

) as ut
LEFT OUTER JOIN
(
select
txcs0.*
from
_sysTxCommitSequence as txcs0
) as txcs ON (ut.
_sysInsertTxBsn = txcs._sysTxBsn)
WHERE
COALESCE(txcs.
_sysTxCsn, ut._sysInsertTxBsn) > 9486853
AND
COALESCE(txcs.
_sysTxCsn, ut.__sysInsertTxBsn) <= 9487480

I have highlighted line that takes roughly 1 minute to execute. The reason is that __syncTransaction table contains around 1200 records and due to the cross reference with 70,000 odd records in my tblPermissionGroupResourceRole table, the query is quite slow.

Therefore, I need to understand how __syncTransactions table is used so I can try and clear records from this table or whether there's any other way to sort out my problem?

Any help is much appreciated.

Kind regards,
Sasanka.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文