备库由于表无主键导致延迟
由于ROW模式的复制已经广泛使用,但对于没有主键的表而言,如果发生大更新,在备库上会表现出极大的延迟,因为在binlog中产生的大量行记录将无法根据主键快速查找,最差的情况,需要对每条修改的记录进行全表扫描。
5.6已经解决了这个问题,可以只扫描一次表;5.5最新的版本只是在错误日志里输出了一些信息。
Port 5.6的实现不太现实,因为改动太大。因此我做了些小改动,对于无主键表上的DELETE/UPDATE,转换为STATEMENT模式的binlog记录。
以下是一个改动非常简单的patch,基于Percona5.5.18
Index: /PS5518/branches/PS-r3633-nopk-logstmt/sql/sys_vars.cc
===================================================================
--- /PS5518/branches/PS-r3633-nopk-logstmt/sql/sys_vars.cc (revision 3639)
+++ /PS5518/branches/PS-r3633-nopk-logstmt/sql/sys_vars.cc (revision 3641)
@@ -396,6 +396,13 @@CMD_LINE(OPT_ARG), DEFAULT(FALSE),NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(binlog_direct_check));+static Sys_var_mybool Sys_binlog_use_stmt_for_non_pk(
+ "binlog_use_stmt_for_non_pk",
+ "if a table doesn't have primary key ,then log the changes (SQLCOM_DELETE"
+ "and SQLCOM_UPDATE) using STATEMENT.",
+ SESSION_VAR(binlog_use_stmt_for_non_pk),
+ CMD_LINE(OPT_ARG), DEFAULT(FALSE));
+static Sys_var_ulong Sys_bulk_insert_buff_size("bulk_insert_buffer_size", "Size of tree cache used in bulk ""insert optimisation. Note that this is a limit per thread!",
Index: /PS5518/branches/PS-r3633-nopk-logstmt/sql/sql_class.h
===================================================================
--- /PS5518/branches/PS-r3633-nopk-logstmt/sql/sql_class.h (revision 3639)
+++ /PS5518/branches/PS-r3633-nopk-logstmt/sql/sql_class.h (revision 3641)
@@ -492,6 +492,7 @@ulong binlog_format; ///< binlog format for this thd (see enum_binlog_format)my_bool binlog_direct_non_trans_update;
+ my_bool binlog_use_stmt_for_non_pk;my_bool sql_log_bin;ulong completion_type;ulong query_cache_type;
Index: /PS5518/branches/PS-r3633-nopk-logstmt/sql/sql_class.cc
===================================================================
--- /PS5518/branches/PS-r3633-nopk-logstmt/sql/sql_class.cc (revision 3639)
+++ /PS5518/branches/PS-r3633-nopk-logstmt/sql/sql_class.cc (revision 3641)
@@ -4495,10 +4495,14 @@Get the capabilities vector for all involved storage engines andmask out the flags for the binary log.*/
+ my_bool table_no_key= false;for (TABLE_LIST *table= tables; table; table= table->next_global){if (table->placeholder())continue;
+
+ if (table->table->s->primary_key >= MAX_KEY)
+ table_no_key= true;if (table->table->s->table_category == TABLE_CATEGORY_PERFORMANCE ||table->table->s->table_category == TABLE_CATEGORY_LOG)
@@ -4680,6 +4684,13 @@/* log in row format! */set_current_stmt_binlog_format_row_if_mixed();}
+ /*if there is a table without any primary key,log in stmt format*/
+ else if (table_no_key &&
+ (variables.binlog_use_stmt_for_non_pk) &&
+ (variables.binlog_format == BINLOG_FORMAT_ROW ) &&
+ (lex->sql_command == SQLCOM_DELETE ||
+ lex->sql_command == SQLCOM_UPDATE))
+ clear_current_stmt_binlog_format_row();}}
备库由于表无主键导致延迟相关推荐
- oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110
2019独角兽企业重金招聘Python工程师标准>>> 查看trace 文件: MRP0: Background Managed Standby Recovery process s ...
- mysql大数据表无主键_oracle转mysql 表没有主键
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- PostgreSQL 备库apply延迟原理分析与诊断
标签 PostgreSQL , 物理流复制 , IO不对称 背景 开车的同学都喜欢一马平川,最好是车道很多,车很少,开起来爽. 大家想象一下,同样的车速,6车道每秒可以通过6辆车,而1车道每秒就只能通 ...
- [MySQL Bug]DDL操作导致备库复制中断
----------------- 在MySQL5.1及之前的版本中,如果有未提交的事务trx,当执行DROP/RENAME/ALTER TABLE RENAME操作时,不会被其他事务阻塞住.这会导致 ...
- 频发:记ADG备库日志应用延迟的一次故障处理-云和恩墨技术通讯精选
各位亲爱的用户/读者朋友们: 为了及时共享行业案例,通告共性问题,达成知识共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>(7月刊),通过对过去一段时间的知识回顾和故障归纳,以期提供有 ...
- Xtrabackup在线搭建备库与并行复制延迟
mysql在线搭建备库&并行复制&备库延迟 1 读写环境准备 主库模拟压力环境 准备一个干净的主库(开undo表空间回收顺便测下) sysbench oltp_common --mys ...
- 备库批量查询失败的原因分析
目前线上有一套环境是10gR2的,采用了一主两备的架构.在其中一个备库上每天凌晨会开放一个窗口运行一些批量的查询,目前使用dg broker会在指定的时间把备库置为read-only,查询完毕之后修改 ...
- postgresql中patroni集群备库手动还原后,hac启动日志比主库多1
主库创建好自定义表空间 备库创好对应路径进行还原 ...
- oracle主备库sync模式,Oracle 探索DG备库undo工作模式
模拟备库出现 ORA-01555 分析备库 undo 工作模式 一: 修改主库 备库 undo 表空间 1.在主库创建undo表空间(会自动同步到备库) SYS@prod>create undo ...
最新文章
- LINUX 下 WEBlogic集群的搭建-01
- ros 消息队列与缓冲区_[ROS] [笔记(1)] 一个最简单的例子:Hello Robot(消息、发布者与订阅者)...
- python 如何将虚拟环境的项目的所有.py文件的import导包汇总到requirements.txt文件 (pipreqs)
- 洛谷P2955题解(Java语言描述)
- mysql大项目:新闻管理系统
- 使用篇-基于Laravel开发博客应用系列 —— 联系我们 发送邮件 队列使用(基于数据库)...
- ArchSummit微课堂|蘑菇街DevOps实践及心路历程分享
- 服务注册中心---服务发现nacos
- 【数据治理】数据元、元数据、主数据、参考数据概述
- 《python算法教程》个人学习心得之(一):归纳、递归与归简
- Linux删除账号及主目录,linux 删除用户账号和主目录
- 重新注册所有dll文件
- oracle sql 取中位数,Oracle / PLSQL MEDIAN函数
- Excel如何对合并单元格数据进行排序
- Cadence 16.6 Allegro中如何设置多层板的每一层的单端信号的线宽以保证50Ω阻抗?
- 服务器该不该选SSD硬盘储存?
- 前端开发规范和开发文档的书写规范
- 全国计算机一级考级考纲,全国计算机等级考试一级MSOffice考试大纲
- 工具nmap常用命令总结
- $STRM 空投和 Strategy Stakers 代币分配