阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

slave_rows_search_algorithms参数hash_scan的实现方法

464次阅读
没有评论

共计 1880 个字符,预计需要花费 5 分钟才能阅读完成。

slave_rows_search_algorithms 由三个值的组合组成:TABLE_SCAN,INDEX_SCAN,HASH_SCAN。

TABLE_SCAN,INDEX_SCAN  (默认配置,表示如果有索引就用索引,否则使用全表扫描) 

HASH_SCAN 可以部分解决无主键表导致的复制延迟问题。

当表上无主键或唯一键时,那么对于在该表上做的 DML,如果是以 ROW 模式复制,则每一个行记录前镜像在备库都可能 

产生一次全表扫描(或者二级索引扫描),大多数情况下,这种开销都是非常不可接受的,并且会产生大量的延迟。

hash_scan 的实现方法 

 简单的讲,在 apply rows_log_event 时,会将 log_event 中对行的更新缓存在两个结构中,分别 

 是:m_hash, m_distinct_key_list。m_hash:主要用来缓存更新的行记录的起始位置,

 是一个 hash 表;m_distinct_key_list:如果有索引,则将索引的值 push 到 m_distinct_key_list,如果表没有索引,

 则不使用这个 List 结构;其中预扫描整个调用过程如下:Log_event::apply_event 

 Rows_log_event::do_apply_event 

    Rows_log_event::do_hash_scan_and_update 

      Rows_log_event::do_hash_row  (add entry info of changed records) 

        if (m_key_index < MAX_KEY) (index used instead of table scan) 

          Rows_log_event::add_key_to_distinct_keyset () 

当一个 event 中包含多个行的更改时,会首先扫描所有的更改,将结果缓存到 m_hash 中,如果该表有索引,则将索引的值 

 缓存至 m_distinct_key_list List 中,如果没有,则不使用这个缓存结构,

 而直接进行全表扫描。

执行 stack 如下: 

#0 handler::ha_delete_row 

 #1 0x0000000000a4192b in Delete_rows_log_event::do_exec_row 

 #2 0x0000000000a3a9c8 in Rows_log_event::do_apply_row 

 #3 0x0000000000a3c1f4 in Rows_log_event::do_scan_and_update 

 #4 0x0000000000a3c5ef in Rows_log_event::do_hash_scan_and_update 

 #5 0x0000000000a3d7f7 in Rows_log_event::do_apply_event 

 #6 0x0000000000a28e3a in Log_event::apply_event 

 #7 0x0000000000a8365f in apply_event_and_update_pos 

 #8 0x0000000000a84764 in exec_relay_log_event 

 #9 0x0000000000a89e97 in handle_slave_sql 

 #10 0x0000000000e341c3 in pfs_spawn_thread 

 #11 0x0000003a00a07851 in start_thread () 

 #12 0x0000003a006e767d in clone () 

执行过程说明:

Rows_log_event::do_scan_and_update 

 open_record_scan() 

    do 

      next_record_scan() 

        if (m_key_index > MAX_KEY) 

            ha_rnd_next(); 

        else 

            ha_index_read_map(m_key from m_distinct_key_list)       

        entry= m_hash->get() 

        m_hash->del(entry); 

        do_apply_row() 

    while (m_hash->size > 0); 

从执行过程上可以看出,当使用 hash_scan 时,只会全表扫描一次,虽然会多次遍历 m_hash 这个 hash 表,但是这个扫描 

 是 O(1), 所以,代价很小,因此可以降低扫描次数,提高执行效率。

 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1880字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7992631
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...