10年ORACLE/MYSQL DBA,有一定C/C++基础
作者:大明白链接:https://www.jianshu.com/p/2684613a300f来源:简书 这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器。这个指令的写法为:__builtin_expect(EXP, N)。
这是一个我的随笔记录,这些过程非常有用,也非常明显。 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 语句如下: mysql> desc select id,count(*) from t110 group by id; +----+-------------+-------+...
欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 水平有限,有误请谅解 注意:本文很多输出格式是16进制格式。使用版本:MySQL 5.7.22 经常有朋友问我一些如何查看Innodb数据文件的问题比如: 如果我是UTF8字符集,如果插入字符‘a’到底占用几个字节 ? 主键和普通...
整个问题提出和测试由 @gc @甘露寺的姑子@乙酉 完成,文档记录由@gc @乙酉完成。 我只是进行了问题分析和文档整理 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 一、案例描述 MGR在遇到表不存在的情况下,节点没有退出节点而是爆出一个警告,并且节点状态也正常,警告如下: 2019-10-17T21:16:11.
我的测试记录 一、概述 这个参数会影响到执行计划在评估的时候到底使用统计数据还是进行实际的所以你访问,那么很显然如下: 使用统计数据生成执行计划的效率更高。 使用索引实际访问,及索引下探会代价更高但是更加准确。
能力有限有误请谅解,源码版本5.7.22 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 一、案例来源和现象 这个案例是朋友@peaceful遇到的线上问题,最终线索也是他自己找到的。
转载记录一篇关于ROWNUM伪列的文章来自Tom Kyte大师 https://blogs.oracle.com/oraclemagazine/on-rownum-and-limiting-results This issue's Ask Tom column is a little different from the typical column.
修复版本5.7.18,下面是commit,记录一下后面详细学习。 故障 下面是commit $ git show a43f7d5a6130550619afad3fb513c98e00dc505e commit a43f7d5a6130550619afad3fb513c98e00dc505e Author: Daogang Qu <bill.
源码版本:5.7.22 一、问题来源 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 这是一个朋友问我的典型案例。整个故障现象表现为,MySQL数据库频繁的出现大量的请求不能响应。
简单记录如下: 双主情况下跳过相同server id Event的方式: IO线程 通过对比SERVER_ID 进行跳过操作 { mi->set_master_log_pos(mi->get_master_log_pos() + inc_pos); memcpy(r...
从库Seconds_Behind_Master延迟总结 到这里本系列已经接近尾声了,是时候对常见引起主从延迟的情形进行一个总结了。我想如果我一开始就把这些情形拿出来也许大家对具体的原因不是那么清楚,但是经过本系列的学习,我相信当我说起这些情形的时候大家都很清楚它的原因了。
转载 自 https://www.jianshu.com/p/d19fc8447eaa c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。 左值、右值 C++中所有的值都必然属于左值、右值二者之一。
本案例由徐晨亮提供,并且一起探讨。 本文中FTWRL = “flush table with read lock” 关于常用操作加MDL LOCK锁类型参考文章:http://blog.itpub.net/7728585/viewspace-2143093/ 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 一、两个不同的现象 首先建立一张有几条数据的表就可以了,我这里是baguait1表了。
简单记录栈帧以备后用 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 一、转换案例 最近有朋友讨论字符串转换double丢失精度的问题案例如下: 本案例来自朋友徐晨亮 root@mysqldb 22:12: [xucl]> show create table t1\G *************************** 1.
参考官方文档,记录了部分我关注的新特性。本文仅仅是大概记录而已,准确描述参考官方文档: MySQL 8.0 Reference Manual 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 数据字典使用事务性存储引擎。
今天一个朋友想查看一下的MySQL层事务提交状态经历的过程,比如我们常说的prapare flush sync commit 几个阶段,但是找了一下发现视乎没有视图可以看到一共看了3个地方: information_schema.
欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 1、限制条件 一般不能是唯一键和主键,也不能是全表,代码如下: if (used_index != MAX_KEY) //不能是唯一键(主键) 和 全表 { // Check if we are modifying a key ...
欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 一、问题 是什么 二、找到影响位置 整个寻找过程应该找到key_BINLOG_COND_done这个取值,然后去看他是在那里被定义到相应的mutex/cond上,然后查找mutex/cond的作用即可。
函数接口: trx_lists_init_at_db_start trx_resurrect_insert trx_resurrect_update 事物状态: /*-------------------------------------------------------------*/ #d...
本文主要解释一下下面两个语句的相应接口和时间计算方式。 select * from information_schema.processlist; show processlist 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 一、show processlist 函数接...
考虑一个问题如下: A----B \ / VIP | C 这种构架A B 切换了,如果VIP漂移了,C从库是否有问题。结论就是POS一定不行,GTID却一定可以。证明如下: 《深入理解MySQL主从原理 32讲》中的17和22节详细描述了下文提到的IO和DUMP线程流程,有兴趣可以关注一下: IO thread如果遇到主库IP断开操作会进入重连流程。
这是一个朋友遇到的问题,他的现象大概如下(MySQL5.6): 某个binlog实际大小3g左右,实际设置大小应该是1g 其中包含一个大事务,但是最后一个事务是小事务 查看大事务的XID_EVENT(‘commit’)时间和最后一个小事务XID_EVENT(‘commit’)时间差值近15分钟...
注意:本文分为正文和附件两部分,都是图片格式,如果正文有图片不清晰可以将附件的图片保存到本地查看。 基于COMMIT_ORDER的并行复制只有在有压力的情况下才可能会形成一组,压力不大的情况下在从库的并行度并不会高。
更多主从同步相关可以参考我的《深入理解MySQL主从原理》专栏: 本文是一个朋友问我问题。从库使用mysqlbinlog --stop-datetime 的时候没有想要的记录。本文简单记录这个问题:如果从库log_slave_updates开启,那么从库需要记录从库应用的Event,有如下特点: 从库binlog记录的应用主库的Event,其Event header timestamp是主库的时间。
一、问题由来 这是我同事问我的一个问题,在网上看到了如下案例,本案例RC RR都可以出现,其实这个死锁原因也比较简单,我们来具体看看: 构造数据 CREATE database deadlock_test; use deadlock_test; CREATE TABLE `push_token`...
一、级联时间计算方式 比如A->B->C那么C的延迟是计算B还是A的。因为Event的中timestamp没变,但是C计算时间差值却是以B为准。如果时钟同步的情况下,其实基本可以考虑为A的。计算方法可以参考我的《深入理解MySQL主从原理》专栏 逻辑如下: 级联中的Event依然是主库的时间,因此其延迟还是相对主库而言。
本节包含一个笔记如下:https://www.jianshu.com/writer#/notebooks/37013486/notes/50142567 本节将来解释一下MySQL层详细的提交流程,但是由于能力有限,这里不可能包含全部的步骤,只是包含了一些重要的并且我学习过的步骤。
最后我想简单说一下我的MySQL调试环境的搭建,但是在此之前不得不简单说一下什么是线程,因为如果不解释一下什么是线程,简单的调试可能都会有阻碍,同时了解线程对我们普通DBA诊断性能问题也有极大的帮助。
今天顺便测试了一下 他们三者是不同的,简单的说就是 null :nullbits 位图上的区别。 '':可变字节多一个字节。 ' ':可变字节多一个字节且实际数据区域为0X20多一个字节。 如下语句: mysql> show create table testnull1 \G *************************** 1.
一、ONGOING_ANONYMOUS_TRANSACTION_COUNT 主库 生成GTID: 这下面可以调用匿名+1 (gdb) bt #0 Gtid_state::generate_automatic_gtid (this=0x308ab20, thd=0x7ffe7c000b70, sp...
部分栈帧: 2、prepare栈帧 (gdb) bt #0 binlog_prepare (hton=0x346f260, thd=0x7fff2c000b70, all=false) at /root/mysql5.
一、stop slave流程 用户线程: stop_slave -> terminate_slave_threads ->带入参数rpl_stop_slave_timeout设置,作为等待SQL线程退出的超时时间。
一、索引操找和定位栈帧 slave_rows_search_algorithms默认。 一些debug的断点: ha_innobase::index_read:这个函数是访问索引的时候定位到值所在的位置用到的函数,因为必须要知道读取索引的开始位置才能向下访问。
一、调用流程大概如下 handle_slave_sql ->是否开启了slave_preserve_commit_order和log_slave_updates参数,开启的话需要设置提交顺序管理器 if (opt_slave_preserve_commit_order && rli->op...
一、流程解析 start_slave ->start_slave_threads -> if (!mi->inited || !mi->rli->inited)//如果没有初始化 { int error= (!mi->inited ? ER_SLAVE_MI_INI...
一、工作线程执行Event 外部循环 slave_worker_exec_job_group ->pop_jobs_item 出队 获取event 但是不删除 如果队列为空则等待 stage_slave_waiting_event_from_coordinator Wa...
一、工作线程执行Event 外部循环 slave_worker_exec_job_group ->pop_jobs_item 出队 获取event 但是不删除 如果队列为空则等待 stage_slave_waiting_event_from_coordinator Wa...
一、分发调用流程 ->ev->apply_event(rli); Log_event::apply_event 这里如果是非MTS进行应用 如果MTS 如果是GTID event 进行WORKER线程的分配 ,如果不是则获取WORKER线程 -> 是否是进行 MTS r...
DUMP 线程启动函数调用流程 1、多次select 交互,从库需要保存主库的信息 2、注册从库信息 3、读取从库发送的各种信息 com_binlog_dump_gtid 读取从库的信息包括 - server id - 需要读取的binlog为名字 - 读取的位点 ...
一、栈帧 #0 my_delete (name=0x7ffff0fa0490 "./binlog.000005", MyFlags=0) at /root/softm/percona-server-5.
关于各个Event的生成时机直接debug前面讲Event的时候给出的各个接口即可。 一、Query_log_event栈帧: 初始化 #0 Query_log_event::Query_log_event (this=0x7fffec0f30d0, thd_arg=0x7ffe7c000b70...
一、设置过程 插入前先调用TABLE::mark_columns_per_binlog_row_image函数函数中有image的详细设置 /* Mark columns according the binlog row image option.
GLOBAL 级别继承 /* Set collactions that depends on the default collation */ global_system_variables.collation_server= default_charset_info; global_system_variables.
Waiting for global read lock:由于flush table with read lock调用函数lock_global_read_lock导致DML操作堵塞。 Waiting for commit lock :由于flush table with read lock 调...
今天有个朋友问源码处哪里控制了sql_safe_updates的逻辑,源码如下: bool multi_delete_precheck(THD *thd, TABLE_LIST *tables) { SELECT_LEX *select_lex= thd->lex->select_lex; ...
相信作为一名DBA来讲MySQL主从一直都是一个绕不开的话题,我们在很多高可用构架中都能看到它的身影。在我们心中一定都或多或少的产生过一些疑问,比如: 主从延迟为什么会高? 主从延迟为什么一直不动? 主从延迟为什么瞬间跳动? 延迟为0就一定代表没有延迟吗? 从库异常重启为什么会报错? 从库能和主库一样利用索引吗? MTS是如何提高从库应用效率的? 为什么会有那么多和从库相关的sync参数,我该怎么配置? mysql.gtid_executed表有什么用?...... 这个系列就是想通过描述主从原理,抽丝剥茧解开大家对这些问题的疑惑。
今天顺便看了一下,主要流程就是跟踪为什么begin后事物不会提交,最后发现在:MYSQL_BIN_LOG::commit 函数中包含这个判断 if (!cache_mngr->trx_cache.is_binlog_empty() && ending_trans(thd, all) && !trx_stuff_logged) 如果begin的话ending_trans(thd, all) 将会返回为false,也就不会调用 order_commit流程了。
一、问题来源 有一个朋友@水米田 问我,基于POSITION的主从。他做了如下的操作 将备份的一些binlog文件加入到了目录中 修改index文件,加入了这些binlog文件 flush binary logs 然后整个主从环境大量延迟。
简单记录 如下线面3种ID到底什么意思,这个问题我一直没去看: (root@localhost)[05:47:31] [performance_schema ;]> select THREAD_ID,PROCESSLIST_ID,THREAD_OS_ID from performance_schema.
这个问题是一个朋友问我的@刘加奇 一、问题描述 为什么我的err日志里面有大量的show engine innodb status的记录,我自己并没有开启innodb_status_output参数。