SQLServer 使用sp_repldone标识所有未分发的事务为已分发
原文:SQLServer 使用sp_repldone标识所有未分发的事务为已分发
对于发布数据库的数据大量操作时,会使日志扫描并读取太多,会导致分发堵塞很久。也有一些解决方法,参考 《SqlServer 复制中将大事务分成小事务分发》 , 《SqlServer大量更新引起同步链延时问题》
。当然也可以使这些数据不分发,尤其是新表,数据尚未让用户使用,可以在日志读取器跳过扫描标识为 “复制” 的事务。
注: 以下模拟操作,操作都在发布数据库执行!
1. 将队列读取器代理 -Continuous 去掉,使日志读取器不连续扫描事务日志
2. 更新数据
3. 启用日志读取器,数据正常同步到订阅中
4. 再次更新数据,执行以下操作
将队列读取器代理 -Continuous 去掉的操作如下:
过程脚本如下,不详细说明:
-- 因为日志读取器停止,分发表还没有刚才更新的记录
SELECT * FROM distribution.dbo.MSrepl_commands
SELECT * FROM distribution.dbo.MSrepl_transactions -- 但是事务日志中标识为复制(REPLICATE) 的日志增多了
SELECT count(*) FROM ::fn_dblog(NULL, NULL) WHERE Description='REPLICATE' -- 查看最早的分布式和非分布式复制事务
-- https://msdn.microsoft.com/zh-cn/library/ms182792.aspx
DBCC OPENTRAN() WITH TABLERESULTS; REPL_DIST_OLD_LSN (535:23:10)
REPL_NONDIST_OLD_LSN (535:26:1) -- 转换上面的整数为16进制
SELECT cast(cast(535 as int) as binary(4)) + cast(cast(23 as int) as binary(4)) + cast(cast(10 as int) as binary(2))
SELECT cast(cast(535 as int) as binary(4)) + cast(cast(26 as int) as binary(4)) + cast(cast(1 as int) as binary(2)) (534:2536:18) >>> 0x00000217:00000017:000A
(534:2552:1) >>> 0x00000217:0000001A:0001 -- 在事务日志中的记录
select [Current LSN],[Operation],[Transaction ID],Left([Description],20)
from::fn_dblog('0x00000217:00000017:000A','0x00000217:0000001A:0001') -- 将事务日志中标识为复制的记录全部标记为已分发,之后日志读取器将不扫描这些记录
-- ( 只有当 xactid 和 xact_seqno 都为 NULL 时,reset 才有效。)
-- https://msdn.microsoft.com/zh-cn/library/ms173775.aspx
exec sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1 @reset = 1 则日志中所有复制的事务将标记为已分发;
@reset = 0 则事务日志将重置为第一个复制的事务,事务将重新读取和发布; -- 查看当前没有分发的事务(保留在事务日志中尚未发送到分发服务器的事务)
-- https://msdn.microsoft.com/zh-cn/library/ms175114.aspx
exec sp_replshowcmds -- 再查看打开的事务,事务也不存在了
dbcc opentran () with tableresults; -- 刷新项目缓存(为提高效率,项目定义存储在缓存中)
-- https://msdn.microsoft.com/zh-cn/library/ms174992(v=sql.120).aspx
exec sp_replflush -- 此时再次更新其他行数据,启用日志读取器代理,该行数据能正常同步到订阅;之前未同步的,则不会同步.
最后把 -Continuous 添加会日志读取器中!完成!(或者停止日志读取器代理也可以)
参考:Using sp_repldone to mark all pending transactions as having
been Replicated
SQLServer 使用sp_repldone标识所有未分发的事务为已分发的更多相关文章
- sqlserver中查找长时间未提交事务
无论是有意无意,如果事务在数据库中保持打开,则它会阻塞其他进程对修改后的数据进行操作.同样,对事务日志进行备份也只会截断不活动事务的那部分事务日志,所以打开的事务会导致日志变多(甚至达到物理限制),直 ...
- sqlserver 事务日志已满解决方案
sqlserver 事务日志已满解决方案 可参考这篇博客: https://www.cnblogs.com/strayromeo/p/6961758.html 一.删除日志文件:(不建议) 二.手动收 ...
- Android事件分发机制三:事件分发工作流程
前言 很高兴遇见你~ 本文是事件分发系列的第三篇. 在前两篇文章中,Android事件分发机制一:事件是如何到达activity的? 分析了事件分发的真正起点:viewRootImpl,Activit ...
- 检查点(Checkpoint)过程如何处理未提交的事务
每次我讲解SQL Server之前,我都会先简单谈下当我们执行查询时,在SQL Server内部发生了什么.执行一个SELECT语句非常简单,但是执行DML语句更加复杂,因为SQL Server要修改 ...
- sql 查看 锁定的表 或者 未提交 的事务
--查看锁定的 表select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sy ...
- RabbitMQ学习第二记:工作队列的两种分发方式,轮询分发(Round-robin)和 公平分发(Fair dispatch)
1.什么是RabbitMQ工作队列 我们在应用程序使用消息系统时,一般情况下生产者往队列里插入数据时速度是比较快的,但是消费者消费数据往往涉及到一些业务逻辑处理导致速度跟不上生产者生产数据.因此如果一 ...
- SQLserver提示事务日志已满无法重建索引,前台提示日志已满处理方案
1.数据库--属性--选项--恢复模式:简单. 2.数据库--任务--文件类型:日志 在释放未使用的空间潜重新组织页:1M 3.数据库--属性-- ...
- 【JavaScript】如何判断一个对象是未定义的?(已解决)
JavaScript中,如果使用了一个未定义的变量,会有这样的错误提示:XXX未定义. 代码中,怎样才能判定一个对象是否定义了呢? 使用 typeof 示例: if("undefined& ...
- 如何找出长时间未提交的事务session ID
收到报警某台mysql数据库慢查询数量超过5,登录上去看,发现阻塞的SQL全部是update,处于Updating状态 +---------+------+-----------+------+--- ...
随机推荐
- Android 让文本输入框默认不获取焦点
项目中有个检索功能,页面上有个EditText输入框,打开页面后,焦点默认在EditText上,这样的话软键盘默认就会显示出来,占据大半个屏幕. 后来想办法将这个给去掉了,原先考虑着将焦点赋给页面上的 ...
- dbvisualizer 使用笔记
快捷键:CTRL+SHIFT+F 格式化选中的sql语句 导入导出数据操作 导入: 1.将Exel文件另存为csv文件 2.在dbvisualizer中点击开发数据库,如test_dev,然后在te ...
- STS开发环境搭建与配置
STS开发环境搭建与配置 (2012-04-11 07:24:51) 转载▼ 1. 环境准备 安装JDK.MAVEN 1.1. 下载 下载sprdfingsource-tool-su ...
- js进阶-9-3/4 form对象有哪些常用属性
js进阶-9-3/4 form对象有哪些常用属性 一.总结 一句话总结: 1.一般html标签有哪些常用属性:name id value 2.form对象有哪些常用属性(特有):action meth ...
- js中 慎用for(var o in arrays) 遍历数组,for(var i,i< objects.length;i++)与for(var i,n = objects.length;i<n;i++) 的性能区别
原文:js中 慎用for(var o in arrays) 遍历数组,for(var i,i< objects.length;i++)与for(var i,n = objects.length; ...
- AR Drone系列之:使用ROS catkin创建package并使用cv_bridge实现对ar drone摄像头数据的处理
1 开发环境 Ubuntu 12.04 ROS Hydro 2 前提 可參考这篇blog:http://blog.csdn.net/yake827/article/details/44564057 b ...
- python request 代理/超时/证书
import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) A ...
- leetcode先刷_Valid Sudoku
我没有看到这个问题,这使其在现货需求数独,害怕一直没敢做.后来我发现原来的标题就是这么简单.推断现在只有数字全不符合的就可以了棋盘上的形势的要求. 是不是正确的三个周期..人是不能满意地看到每一行.每 ...
- 静态资源命名的注意点以及document.write与innerHTML的区别
今天拿出了去年刚开始学前端的那本书来看,发现好多新东西. 使用下划线和混合大小写不利于SEO! document.write与innerHTML的区别 这个问题大概是初学前端的人才会问的吧,业务代码中 ...
- SQLite从Excel文件中导入数据
元数据 另存为.csv格式 用记事本打开 打开后的数据 Android客户端开发的时候使用了SQLite数据库,为了测试,需要将一些excel文件中的数据导入到数据库的表中,下面是几个步骤: 数据库表 ...