自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sunashe的个人随笔

学,以致用!

  • 博客(143)
  • 资源 (5)
  • 问答 (2)
  • 收藏
  • 关注

原创 MySQL Query Profiling源码深度剖析

4.1 Query Profiling用法详解Query Profiling是MySQL数据库提供的一种SQL性能诊断工具, 本节通过对Profiling的简介,原理,使用方法以及案例的介绍,让读者学会如何在SQL优化的过程中,合理的去使用它。4.1.1 Query Profiling简介Query Profiling是MySQL数据库中提供的一种SQL性能诊断方法,用户可以在开启pro...

2019-07-08 12:21:46 336 1

原创 MySQL中的委托回调机制

MySQL的插件功能通过委托回调机制来实现。拿Binlog_relay_IO_delegate(委托者的一种)来讲,它有很多委托方法,比如说after_read_event,是在读取一个binlog event之后进行回调,MySQL半同步插件就跟这个委托者相关。下面来看Binlog_relay_IO_delegate中的after_read_event委托函数是如何进行回调的,详细过程如下...

2019-02-22 22:32:32 948

原创 InnoDB死锁分析-案例4-行锁升级next key lock

文章目录一、死锁日志二、表结构三、死锁分析四、解决办法一、死锁日志LATEST DETECTED DEADLOCK------------------------2018-12-21 13:34:32 0x7fc92c3be700*** (1) TRANSACTION:TRANSACTION 1862, ACTIVE 6 sec starting index readmysql ta...

2018-12-23 09:49:41 396

原创 MySQL源码调试入门

这篇文章可以作为MySQL源码初学者的入门指导,如有雷同,纯属意外。第一步,获取MySQL源代码有如下几种方法获取MySQL源代码 官方下载,以5.7.23为例,见如下链接https://dev.mysql.com/downloads/mysql/ 或者直接执行wget https://cdn.mysql.com//Downloads/MySQL-5.7/mys......

2018-08-05 18:27:21 4943

原创 MySQL错误码去重校验bug

给MySQL官方提bug的那些年

2022-10-20 21:37:32 350 1

原创 InnoDB undo truncate流程

文章目录参数核心数据结构class Truncate成员函数成员变量核心逻辑梳理truncate标记truncate过程MySQL 8.0引入了undo truncate机制, 允许对独立的undo tablespace进行清理操作.参数innodb_undo_log_truncatetruncate开关, 控制是否开启undo truncate功能函数trx_purge_mark_undo_for_truncate/** Iterate over all the UNDO tablesp

2021-04-24 09:02:05 460

原创 gnuplot 使用示例

安装部署:#centos/redhatyum install gnuplot#macosbrew install gnuplot#ubuntusudo apt install gnuplot数据文件ashe@macos:~/data/test/test_gnuplott $ cat t1.txt1 1 2.12 4 4.53 900 64 16 85 25 106 36 117 49 128

2020-07-21 22:53:00 590

原创 MySQL-8.0 RESTART命令远程重启mysqld

MySQL在8.0版本中引入restart命令,实现远程重启mysqld进程的功能。好处不言而喻,可以在不登陆操作系统的情况下,执行重启操作,对于运管上来说也是一个很棒的功能。执行restart命令需要数据库账号具备SHUTDOWN权限,并且mysqld是在systemd/mysqld_safe守护进程下启动的。原理是mysqld_safe检测mysqld退出时的返回值,如果是16,则进行重启。bash shell如下:#!/bin/bashexport MYSQLD_PARENT_PID=$$

2020-06-20 20:03:12 2321

原创 多目标文件引起Clion出现某些符号无法正确被索引的问题

问题如下:调试mysqld发现,这部分代码为灰色,并且相关符号无法被索引,但是调试时又进入了灰色区域的代码。原因是因为MySQL项目中的另外一个可执行文件innochecksum利用UNIV_INNOCHECKSUM宏来使用innodb中的源代码,生成自己的可执行文件,而clion调试mysqld时,其实没有定义这个宏的,但是clion并没有正确识别这种场景,导致相关的符号索引失败。临时的解决办法时,在调试时,在相应的Cmakelist中注释掉了innochecksum的配置问题解决..

2020-06-15 19:57:08 1253

原创 数据导入引发slave实例异常crash的bug定位与修复

文章目录故障表象故障复现根因挖掘bug修复/解决方案DB最近在搞迁移的事情,逻辑迁移过程中发现将数据从A集群迁移到B集群时,偶发B集群slave实例的crash。整个问题的处理过程查看故障表象故障复现直接问题分析真正的问题定位问题修复故障表象错误日志中记录了crash时的线程堆栈信息,如下:As this is a crash and something is definitely wrong, the informationcollection process might fai

2020-05-10 20:18:33 272

原创 深度解析InnoDB事务中的MVCC原理

文章目录1. 事务相关的数据结构1.1 trx_t 事务结构体1.2 TrxFactory-事务工厂1.3 trx_pool_t 事务缓存池1.4 trx_pools_t 事务缓存池管理器2. MVCC相关的数据结构2.1 ReadView-事务的可见视图2.2 ReadView管理器-MVCC3. 事务/MVCC/ReadView的关系4. 事务和MVCC相关的操作4.1 开启事务并不一定需要...

2020-04-22 22:06:54 438

原创 MySQL中的互斥锁包装器

我们习惯性的使用互斥锁来保护某个临界区,它可能是一个变量,或者一段代码,比如在进入某个函数后,需要对mutex加锁,而无论任何情况下,只要函数退出,就要把锁释放掉,而函数可能会因为各种情况而退出,包括遇到各种异常,错误,不同的结果等等,一个可行的方案是在所有可能退出函数的地方进行锁的释放,亦或者通过goto/break等语法来控制函数在特定的位置退出,并且退出前进行锁的释放,但这些实现方式相比较今...

2020-04-06 20:27:56 280

原创 before_dml hook 引发的drop table阻塞事件

before_dml_hook 引发的drop table阻塞事件现象:一条drop命令后,几乎所有写入操作都阻塞在Opening tables对于Drop table操作,历来会出现一些问题,比如:https://www.cnblogs.com/CtripDBA/p/11465315.htmlhttps://blog.csdn.net/zyz511919766/article/deta...

2020-04-02 20:50:48 275

原创 深度解析Binlog组提交过程

MySQL引入binlog来实现主从实例之间的数据同步,提高数据库系统的可用性,但同时也增加了事务整体的资源消耗,需要额外的磁盘空间和IO处理能力。尤其是为了保证本地事务的持久性,必须将binlog刷盘控制参数sync_binlog设置为1,设想如果每一次事务提交,都强制进行一次刷盘操作,数据库整体的性能会受到极大的影响。由此也引出了本节的主要内容:binlog组提交。大多数MySQL DBA对...

2020-03-01 20:21:27 999

原创 详解MySQL processlist id增长机制,最大多少?会不会溢出?

之前就有这样的疑惑,只是一直没有真正遇到过这个问题,所以也没有去动手翻阅代码去一探究竟,而最近在写SQL洞察组件时遇到了点问题,今晚就来看一下。其实定位这个标题中的问题也非常简单,直接定位到线程初始化阶段,函数调用过程如下:::pfs_spawn_thread(void *) ::handle_connection(void *) init_new_thd(Chann...

2020-02-29 00:03:33 610

原创 Cmake add_test

通过在项目根目录下的CMakeLists.txt配置文件中添加enable_testing()可以开启项目的测试功能。一定要在根目录下的CMakeLists.txt中开启,不然执行make test时会报错。随后项目的cmake配置文件中可以添加add_test指令add_test(NAME <name> [CONFIGURATIONS [Debug|Release|....

2020-02-26 23:19:53 6685 2

原创 cmake利用git tag生成内部的版本号

项目中使用git进行代码的版本控制,每次发版都会生成新的tag。而可执行文件往往都喜欢使用-V或者–version的命令行参数来获取当前可执行文件的版本,这可以在代码中通过宏定义来实现,如下:#define AUDIT_VERSION "1.1.1"cout << AUDIT_VERSION << endl;如果像上面的代码一样,直接在代码中写死,每次打tag时...

2020-02-19 20:06:16 1787

原创 MySQL Debug sync功能使用简介

debug sync是MySQL提供的一种代码调试,问题分析工具, 它集成在MySQL的内部。具体作用是:让代码执行到某个特殊的位置(同步点)时触发暂停,等待指定的某个或者多个signal在激活同步点,并且被触发时,可以向别的线程发送signal,唤醒其他线程在激活同步点,并且被触发时,可以被别的线程通过signal唤醒继续执行可以设置同步点的等待超时时间要求:只能在debug版本中...

2020-02-07 09:36:01 1311

原创 MySQL Server层的原子操作

看如下代码#test.ccint i=0;void* funcA(void* arg){ for(int i=0;i<10;i++) { ++i; } }void* funcB(void* arg){ for(inti=0;i<10;i--) { --i; }}int ma...

2020-02-04 17:54:28 383

原创 events_transactions_history_long表的内存占用

events_transactions_history_long表用于存储历史的事务信息。通过参数performance_schema_events_transactions_history_long_size来控制最多保留多少条事务记录(包含所有session)通过操作系统直接查看内存占用来判断events_transactions_history_long表的内存占用不太可行,通过table...

2019-12-23 21:54:42 531

原创 events_transactions_current表的写入读取和存储方式

events_transactions_current是performance_schema中记录事务状态信息的表,它除了可以记录普通事务以外,还可以记录MySQL中的XA事务。表结构如下:mysql> show create table performance_schema.events_transactions_current\G*************************...

2019-12-23 21:52:51 604

原创 数据库审计方案简介和功能对比

文章目录数据库审计方案简介和功能对比1. MySQL自带日志功能1.1 普通日志1.2 通过慢日志2. 数据库插件形式2.1 Oracle MySQL 企业版审计插件2.2 Percona插件2.3 MariaDB插件3. 旁路机制3.1 vc-mysql-sniffer3.2 奇虎360开源产品mysql-sniffer4. 功能对比数据库审计方案简介和功能对比通过数据库审计的功能,用户可以...

2019-12-16 23:22:31 1375 4

原创 InnoDB缓冲池初始化

InnoDB作为MySQL的一个存储引擎插件,在启动MySQL数据库实例时,会调用插件提供的初始化函数,InnoDB启动时的入口函数是innobase_initmysql_declare_plugin(innobase){ MYSQL_STORAGE_ENGINE_PLUGIN, &innobase_storage_engine, innobase_hton_name, ...

2019-12-16 23:18:24 411

原创 详解InnoDB内存堆

文章目录1. 内存堆的类型2. 内存堆的内部结构3. 内存堆的创建与内存块的分配过程4. 内存堆的使用5. 内存堆的释放6. 内存堆总结内存管理一直是C语言程序的一个难题。在Innodb中,并没有直接使用系统提供的malloc/free来进行动态内存的申请和释放,而是采用内存堆的形式来管理。虽然目前Innodb大部分代码都是.cc结尾,但是还是有很多代码风格是C类型的,只是某些地方对这些C代...

2019-12-16 23:15:38 493

原创 malloc分配超过128kb内存-实验记录

默认情况下,当malloc或者new操作一次性分配大于等于128KB的内存时,会使用mmap来进行,而在小于128KB时,使用的是brk的方式小于128KB时的测试截图如下:大于128KB时的测试截图如下:128KB是可以调节的,如下,重新使用brk的方式进行内存分配。测试代码如下:#include <iostream>#include <unistd.h&gt...

2019-09-16 23:38:50 1292

原创 InnoDB-行锁分类

2019-09-03 22:50:57 412

原创 TDengine源码解析-启动

用户通过如下命令启动tdengine服务端程序taosd -c /etc/taos/taos.cfg本文主要分析taosd的启动过程,感谢作者开源这个还算不错的时序数据库产品。首先检测是否通过-c指定了配置文件,如下:for (int i = 1; i < argc; ++i) { if (strcmp(argv[i], "-c") == 0) { if (i ...

2019-08-28 22:03:23 2043

原创 TDengine 记录微秒

默认情况下,TDengine的timestamp字段只支持到毫秒,完全不够使用,官方文档说明可以通过配置文件指定enableMicrosecond来开启微秒,但是实验证明是不行的。翻了github的issues记录,开发者给出了新的解决方案,在创建数据库时指定precision "us"即可,如下:taos> create database d1 precision "us";08/2...

2019-08-28 16:59:36 1634

转载 MySQL-5.7XA事务的改进与缺陷

2019-08-18 22:56:26 467

原创 MySQL-XA事务(二)源码实现

2019-08-14 20:07:31 198

原创 MySQL-XA事务(一)简介

欢迎关注我的微信公众号:

2019-08-14 20:02:21 291

原创 cmake判断当前操作系统类型

CMake是为了解决美国国家医学图书馆出资的Visible Human Project专案下的Insight Segmentation and Registration Toolkit (ITK) 软件的跨平台建构的需求而创造出来的。我们在编写CmakeList.txt文件时,可以通过if判断当前所处的系统环境IF (WIN32) MESSAGE(STATUS "Now is windows"...

2019-07-09 13:42:46 4864

原创 macos调节docker内存限制

在macos平台上,通过docker命令调节docker运行内存限制时,发现不生效,如下:#docker启动命令docker run -m 8192M --privileged -it -p 7979:22 -v /data/docker/centos:/data --net staticnet --ip 192.168.0.2 ashe /usr/sbin/init#进入docker ...

2019-06-20 22:33:01 4327

原创 optimizer特性之derived_merge

文章目录MySQL optimizer特性之derived_merge1. 什么是derived table ?2. 什么是derived_merge ?3. derived_merge开启和关闭的区别4. 无法利用derived_merge的情况5. derived_merge引发的问题6. 学以致用MySQL optimizer特性之derived_merge本文主要介绍如下内容 什么......

2019-04-25 18:44:04 4017 1

原创 MySQL查询优化器源码分析-1

文章目录MySQL查询优化器源码分析handle_query(THD*, LEX*, Query_result*, unsigned long long, unsigned long long)st_select_lex::prepare(THD*)st_select_lex::setup_tables(THD*, TABLE_LIST*, bool)st_select_lex::resolve_...

2019-04-18 22:11:34 699

原创 clion在调试时在代码处自动显示变量值

clion在调试时自动显示变量的值不知道动了哪里,导致调试时无法在相应的代码位置显示变量的值,如下红框处没有显示任何信息,之前默认会显示参数的值。可以通过左下角的设置按钮,勾选show values inline,就会显示了,效果如下...

2019-04-18 22:05:50 9758 1

原创 MySQL事务提交流程(2pc)时序图

文章目录MySQL事务提交流程简介一、简化版的事务处理时序图时序图说明二、时序图说明用户下发begin操作用户进行dml操作用户下发commitMySQL事务提交流程简介最近组内在进行进阶学习培训,发现组员对于MySQL-5.7事务提交整体的流程不是特别熟悉,而网上的资料众说纷纭,所以特画此图,从上帝视角,来看事务操作的主要流程,此图为事务处理的简化时序图,在处理细节上省略了和多线程复制相关的...

2019-03-29 21:01:57 929

原创 Innodb死锁日志分段解读-如何阅读死锁日志

死锁分析是DBA日常工作之一,一般死锁分析的步骤如下阅读死锁日志查看表机构,甚至不需要定位事务场景,进行分析而正确的理解死锁日志,是进行死锁分析的重点,下面就是对死锁日志的分段解读。一般的死锁日志如下------------------------LATEST DETECTED DEADLOCK------------------------2019-01-09 15:11:...

2019-03-10 18:13:15 1135

原创 如何查看当前Innodb的并发

文章目录如何查看当前Innodb的并发线程数?如何查看当前Innodb的并发线程数?在MySQL中:用Threads_connected表示当前数据库server层的链接数,对应参数max_connections;使用Threads_running表示已经连接的线程中,正在执行SQL的线程并发数我们还知道在Innodb中还存在一个并发数的限制,可以参照参数innodb_thr...

2019-03-09 18:35:27 484

原创 mysql中的select @@version

有些朋友问过的问题,mysql中查询版本号,有的是5.7.18,有的是 5.7.18-log ,有的是5.7.18-debug,如下mysql&gt; select @@version;+------------------+| @@version |+------------------+| 5.7.18-debug-log |+------------------+...

2019-03-04 20:05:48 8516

MySQL-8.0.13源码包,包含boost库

MySQL-8.0.13源码包,包含boost库 到MySQL官网比较慢的可以看过来

2018-11-07

MySQL-5.7.24源码包,包含boost库

MySQL-5.7.24源码包,包含boost库,generic linux版本

2018-11-07

MySQL源码mysql-5.7.22

MySQL最新GA源码;mysql-5.7.23 zip包;使用zip 命令解压缩

2018-08-21

MySQL源码mysql-5.7.23

MySQL最新GA源码;mysql-5.7.23 zip包;使用zip 命令解压缩

2018-08-21

MySQL内核-innodb存储引擎(卷1)

带部分个人目录,即开即用,非常方便,2分真的不多啊,真的不多。

2018-05-10

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除