- 博客(141)
- 资源 (5)
- 问答 (2)
- 收藏
- 关注
原创 perf+FlameGraph火焰图
在软件测试运行过程中,如果发现了一些性能问题,但是却无从下手的情况,可以通过perf+FlameGraph生成程序运行期间的火焰图,来定位耗时比较高的函数。使用命令如下# perf抓取数据sudo perf record -F 10000 -a -g -- sleep 60#用perf script工具对perf.data进行解析sudo perf script -i perf.data...
2019-02-28 22:19:29
1011
原创 MySQL max_execution_time参数原理解析
MySQL max_execution_time参数解析一、参数解释说明参数max_execution_time用来控制select语句的最大执行时间,单位是毫秒,可以动态修改,分为session和global两种级别,如果设置为0的话,则证明不设限制。二、使用示例mysql> set net_read_timeout=2;Query OK, 0 rows affected (0....
2019-02-27 20:17:29
24381
2
原创 表名最大长度限制ERROR 1059 (42000)Identifier name
在程序中创建表时,表名可能是通过程序拼接的,所有可能超长,报错ERROR 1059 (42000): Identifier name,如下mysql> create table aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbc (id int not null) charset=utf8;ERROR 105...
2019-02-19 09:32:53
7106
原创 使用ngrep抓取MySQL网络交互
命令如下ngrep -x -q -t -d lo '' 'port 13307'-x 以16进制显示-q 静默模式,如果没有此开关,未匹配的数据包都以“#”显示-t 显示包时间戳-d 设备名称其中lo为网卡设备,酌情修改,13307为端口,酌情修改如下为通过ngrep抓取客户端链接mysqld时的网络交互ashe@ubuntu:~$ sudo ngrep -t -x -q -d...
2019-02-13 18:46:36
436
原创 pt-osc报表不存在的问题解决
文章目录问题简介问题排查根本原因问题修复lower_case_table_names=0,区分大小写lower_case_table_names=1,不区分大小写问题简介在使用pt-osc进行在线表结构变更时,有时会报表不存在的错误,然而进入通过show create table发现表是存在的。问题排查pt-osc命令如下ashe@ubuntu:~$ pt-online-schema-c...
2019-02-13 14:10:40
696
原创 为什么数据库启动时,开始的几行错误日志时间戳是UTC时区,而非本地时间?
一、问题数据库参数log_timestamps=system这个参数控制写入错误日志/普通日志/满日志的时区,而当设置为system时,日志应该为本地系统时区。但是数据库启动时,前几行日志的时间可能跟系统时间不一致。二、错误日志2019-01-30T04:48:31.838813Z 0 [Warning] option 'table_open_cache_instances': un...
2019-01-31 09:39:01
862
原创 Iterm2关闭警告声音
Preferences -> Profiles -> Terminal -> silence bell
2018-12-30 15:42:40
10334
2
原创 InnoDB行锁机制(gap锁是如何阻塞插入操作的)
文章目录InnoDB行锁机制(gap锁是如何阻塞插入操作的)一、假设场景二、加锁过程分析InnoDB行锁机制(gap锁是如何阻塞插入操作的)InnoDB 在执行insert操作时,并不会显示加锁,如果是主键插入,只会设置对应记录上的trx id隐藏列,称为隐式加锁。一、假设场景比如说如下表结构mysql> show create table t7\G***************...
2018-12-30 15:32:32
1419
3
原创 Linux-ls相关的命令
Linux-ls相关的命令上周看SA敲了个lscpu的命令,才知道还可以这么简单的看和CPU相关的信息,以前只是知道 cat /proc/cpuinfolscpu如下ashe@ubuntu:~$ lscpuArchitecture: x86_64CPU 运行模式: 32-bit, 64-bitByte Order: Little Endia...
2018-12-02 21:19:53
739
原创 Replication进阶(九) MySQL如何自动清理过期binlog
文章目录Replication进阶(九) MySQL如何自动清理过期的binlogReplication进阶(九) MySQL如何自动清理过期的binlog可以通过expire_logs_days设置binlog的过期时间,超过此天数的binlog会被自动purge掉,这个purge的动作是怎么完成的呢?难道MySQL单独开辟了一个线程来不停的看binlog是不是过期了?如果是你,又会如何设计...
2018-11-21 18:37:55
558
原创 20亿数据Innodb表的OLTP测试报告
文章目录20亿数据Innodb表的测试报告一、软硬件信息硬件软件二、核心参数设置数据库操作系统三、机械硬盘下的标准OLTP测试四、SSD硬盘下的标准OLTP测试五、总结20亿数据Innodb表的测试报告Innodb表最大可以承载64TB的数据,按照sysbench的标准表结构,20亿数据大概在400多GB,所以这样的表,Innodb是可以处理的,只不过是性能的问题,那么这个性能到底会有多差呢?...
2018-11-21 10:39:23
1014
原创 Replication进阶(八) 半同步复制状态切换
文章目录半同步复制状态切换一、简介二、状态切换半同步切换异步状态异步切换到半同步半同步复制状态切换一、简介假设当前m-s处于半同步复制状态,这个状态在某些情况下可能会发生切换。通过status而不是variables去查看当前复制状态mysql> show global status like 'Rpl_semi_sync_master_status';+------------...
2018-11-19 15:51:21
649
原创 MySQL如何在不重启的情况下,修改不能动态修改的参数
文章目录如何在不重启的情况下,修改生效不能动态修改的参数一、简介二、如何解决如何在不重启的情况下,修改生效不能动态修改的参数一、简介问题来源于DBA内部,主从复制中提供了参数slave_skip_errors,去处理复制错误,其中包含了ddl_exist_errors,在升级MySQL5.6到5.7时,这个参数配置变成了slave_skip_errors=ddl_exist_errors,...
2018-11-19 14:42:47
1204
原创 clion运行卡顿问题的解决
macos环境下的C++ IDE最好的选择就是CLion,但是一开始使用的时候,做MySQL的二次开发,一卡一卡的(写小的程序还是没问题,但是MySQL的代码+索引太大了),我还以为自己买了个假电脑,后面想到这玩意儿是JAVA写的,应该是内存设置的问题,果然查了一下,顺利解决更改如下配置文件,如果不在这里的话,自行寻找。sudo vim /Applications/CLion.app/Cont...
2018-11-17 15:36:56
22207
5
原创 半同步复制中可能出现的异常情况以及应该如何应对?
文章目录半同步复制如何应对各种异常情况?一、准备知识事务提交会经历哪些阶段何为半同步复制二、可能出现哪些异常以及如何解决master 在flush binlog之前宕机master 在flush binlog 之后,send binlog之前宕机master 在send binlog之后,收到ack之前宕机半同步复制如何应对各种异常情况?全篇以MySQL-5.7 after_sync模式半同...
2018-11-15 19:03:07
1166
原创 close掉一个失效的MySQL连接导致的程序崩溃
这在没有链接池控制的应用中十分常见,而我正好在做和MySQL相关的开发工作,在一般的工具类应用中,并没有使用链接池进行连接的管理,而是直接使用MySQL提供的C API进行操作。而这给我的程序带来过很多麻烦比如代码如下int main() { MYSQL *conn = NULL; conn = mysql_init(0); MYSQL_RES *res; if (mysql...
2018-11-14 13:56:18
1816
原创 走索引+回表还是走主键扫描?
走索引+回表还是走主键扫描?一个非索引覆盖类型的查询,走主键还是走索引回表?MySQL可能会在这个问题上选择错误。比如说一张表t1,表结构如下mysql> show create table t1\G*************************** 1. row *************************** Table: t1Create Table:...
2018-11-12 14:29:55
1881
原创 Python连接MySQL获取当前链接的processlist id
文章目录Python连接MySQL获取当前链接的processlist id一、解决方法二、验证Python连接MySQL获取当前链接的processlist id在使用MySQL client API连接数据库时,返回的MySQL链接句柄中有当前链接的processlist id,如果是使用python 该怎么获取呢?百度了一番,发现没人在乎这个问题,可能别人没有涉及到这里。一、解决方法...
2018-11-07 17:31:51
1004
原创 多线程回放+flush tables with read lock 死锁
文章目录多线程回放+flush tables with read lock 死锁一、场景描述二、死锁排查三、解决办法四、如何复现的?多线程回放+flush tables with read lock 死锁一、场景描述MySQL-5.7.18 slave实例上夜间进行备份操作时,processlist 结果,只列出关键部分mysql> show processlist;l+----...
2018-11-03 19:40:03
1593
原创 Innodb死锁分析-案例3-插入意向锁与gap锁引起的死锁
文章目录Innodb死锁分析-案例3一、死锁日志二、表结构三、死锁分析Innodb死锁分析-案例3一、死锁日志------------------------LATEST DETECTED DEADLOCK------------------------2018-10-30 13:48:10 0x7eec74fc1700*** (1) TRANSACTION:TRANSACTION...
2018-10-30 15:16:31
1715
6
原创 MySQL-优化-ICP(Index condition pushdown)详解
文章目录MySQL-优化-ICP(Index condition pushdown)详解一、关于ICP二、什么情况下可以用到MySQL ICP特性三、疑问:如下这个sql为什么会使用到ICP呢?四、代码控制server层处理engine层处理MySQL-优化-ICP(Index condition pushdown)详解一、关于ICPICP是index condition pushdown的...
2018-10-29 15:34:45
2084
原创 MySQL- where条件 in 条件优化
文章目录简介探明原因总结简介MySQL的sql语句中,如果in的条件过多,可能会没办法利用索引来进行检索数据,如下:表结构mysql> show create table test_in\G*************************** 1. row *************************** Table: test_inCreate Tab...
2018-10-25 14:09:25
12136
原创 查看一个正在执行的sql的执行计划(explain for connection processlist_id)
线上往往会出现如下这种情况一条sql很慢,但是写的太长了,没办法复制出来,但是想看他的执行计划,怎么办呢?幸好MySQL5.7提供了额外的explain方法| 25977372 | ashe | 111.111.1.111:41102 | ashe | Query | 2448 | updating ...
2018-10-25 12:55:25
1844
原创 Replication进阶(五) 复制中的ACK详解
ack是什么?什么时候slave会返回ack给master带有ack请求的binlog和不带ack的有区别吗?首先来解释第一个问题,什么是ackack全称为Acknowledgement,中文翻译为确认字符,应用在网络通信中的很多地方,比如TCP/IP协议中。MySQL复制中的ACK指的是,master发送binlog给slave后,slave发送消息给master,通知master已...
2018-10-24 17:08:09
1597
原创 Innodb行锁等待是如何被唤醒的
文章目录行锁等待是如何被唤醒的先来构建一个行锁等待场景代码解析通过pstack抓取线程2的堆栈阅读相关代码进入等待状态事务提交,锁释放逻辑等待时使用的是pthread_cond_wait,超时是如何触发的呢?行锁等待是如何被唤醒的先来构建一个行锁等待场景这非常容易比如说 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCRE...
2018-10-12 19:09:57
808
原创 当程序遇到慢sql
文章目录问题解释答案?另开一个线程,进行kill设置max_execution_time问题某天某业务RD咨询我说,如果程序连接数据库,执行查询时,sql执行的很慢,为了避免数据库长时间执行这个慢语句,以及避免业务线程处于长时间等待状态,通过另外一个线程执行close操作,数据库是否还会继续把这个sql执行下去呢?一开始我回复说数据库线程会退出,后面一想,是有问题的,这涉及到一个正在执行sq...
2018-10-10 14:31:49
430
原创 Replication基础(九) 半同步复制status简析
Rpl_semi_sync_master_clients当前处于半同步状态的slave个数Rpl_semi_sync_master_net_avg_wait_time/Rpl_semi_sync_master_net_wait_time这两个参数本来用来表示ack等待的时间,现在已经不起作用了,即将被摒弃。Rpl_semi_sync_master_net_waitsmaster等待sla...
2018-10-08 16:05:43
840
原创 Replication基础(七) 复制参数简介.md
简介本文只是复制参数的一个简单介绍,而针对每一种或者没一类相关的参数,都需要一篇文章来详细描述。本文不包含半同步复制参数log_slave_updates控制从实例在回放主实例数据时,是否也写binlog,默认为false,不写binlog日志,并且不能动态修改。log_slow_slave_statements控制从实例在回放时,是否记录超过 long_query_time的sql语句...
2018-10-08 14:39:34
387
原创 Replication基础(八) 半同步复制参数简析
文章目录半同步复制参数解析rpl_semi_sync_master_enabledrpl_semi_sync_master_timeoutrpl_semi_sync_master_trace_levelrpl_semi_sync_master_wait_for_slave_countrpl_semi_sync_master_wait_no_slaverpl_semi_sync_master_wai...
2018-10-08 14:36:31
3130
原创 MySQL核心类-THD-生命周期
文章目录MySQL核心类-THD-生命周期初始化过程THD销毁MySQL核心类-THD-生命周期THD是MySQL server层最核心的类,没有之一,基本上所有的信息都是和THD 实例进行绑定的。对于每一个客户端链接进来后,系统会实例化一个THD对象,而后这个对象伴随这个链接的一生。初始化过程mysqld启动完毕后,main线程负责监听数据库对外服务端口,在循环中接受外部链接请求代码如...
2018-09-27 19:40:53
3181
原创 mysqlbinlog远程同步binlog
文章目录mysqlbinlog远程同步binlog功能简介功能扩展mysqlbinlog远程同步binlogmysqlbinlog是dba经常使用的工具,它常用在解析mysqld产生的binlog文件,relay log文件。但是它还有另外一个功能,就是远程获取binlog,今天要分析的就是这个功能。功能简介可以通过如下命令进行binlog同步mysqlbinlog \--read-f...
2018-09-27 16:32:02
1995
原创 Replication进阶(四) 从bug-92252来看GTID复制协议
文章目录从bug92252来看GTID复制协议简介问题原因解决办法从bug92252来看GTID复制协议简介最近搜索MySQL bug系统,发现5.7.23存在复制相关的bug https://bugs.mysql.com/bug.php?id=92252大概意思如下在使用GTID协议协议进行复制时,slave设置了复制错误跳过选项,当出现相应的错误时,并不会中断sql回放线程,于是会出...
2018-09-19 13:18:22
349
原创 MySQL Innodb DDL 概览.md
文章目录简介分类short cutinplace no rebuildinplace rebuildcopy table总结简介本文从DDL在Innodb内部执行方式的不同上,来分类简介Innodb DDL操作,而关于inplace方式的ddl内部执行逻辑,另开一篇进行介绍。分类我们向来习惯以DDL是否锁表来对DDL进行分类,比如说当前使用比较广泛的MysQL-5.7版本,Innodb表...
2018-09-17 18:30:19
542
原创 MySQL源码调试(二)多线程调试
MySQL源码调试(二)多线程调试gdb 线程操作命令集合no-stop模式一条查询的哪些阶段会阻塞flush tables操作结束语MySQL源码调试(二)多线程调试MySQL是一个多线程的服务端程序,所以必须了解一下,多线程调试的技巧,方便去了解MySQL内部运行原理以及问题排查。gdb 线程操作命令集合info thread 列出当前调试程序...
2018-09-14 12:55:17
1192
原创 Innodb加锁机制(隐式锁)
隐式锁简介详解隐式锁隐式锁加锁流程判断是否存在隐式锁隐式锁转换隐式锁转换在5.7中的优化相关博客地址隐式锁简介Innodb采用乐观插入的方式,所以在做insert操作时不会进行显示加锁,也就是不会生成lock_t锁结构,这样可以极大的减少锁开销,提升整体的性能。如果没有显示的行锁,该如何保证事务插入的正确性呢?比如说如下两个事务,插入相同的...
2018-09-13 09:56:36
3479
原创 设置performance_schema_max_digest_length=1048576时performance_schema无法正常工作的bug
简介performance_schema_max_digest_length用于控制performance_schema在做sql统计分析时,可以保留的sql语句的最大长度,官方文档上此值范围在0-1048576之间,而当设置此值为1048576时,performance_schema无法正常的工作。 影响版本:mysql-5.7.19复现Description:Add"...
2018-09-10 21:03:37
1038
原创 MASTER_HEARTBEAT_PERIOD=0导致的半同步复制无法正常工作的bug
简介当从实例设置MASTER_HEARTBEAT_PERIOD=0时,从实例无法正常的回复ack信息。影响版本:mysql-5.7.19复现步骤on slave:change master to master_host='127.0.0.1',master_user='backup',master_port=13307,master_password='backup',m...
2018-09-10 20:57:32
633
原创 Alter table auto_increment=N导致mysqld崩溃的bug
简介在使用MySQL提供的表空间传输功能时,无意中发现,在执行alter table test discard tablespace;之后,执行alter table test auto_increment =语句会引起数据库意外宕机。官方暂时还未修复此bug。bug地址https://bugs.mysql.com/bug.php?id=88115 影响范围:mysql-5.7.*;my...
2018-09-10 20:43:27
2016
原创 Replication基础(七) 复制参数简介
简介本文只是复制参数的一个简单介绍,而针对每一种或者没一类相关的参数,都需要一篇文章来详细描述。log_slave_updates控制从实例在回放主实例数据时,是否也写binlog,默认为false,不写binlog日志,并且不能动态修改。log_slow_slave_statements控制从实例在回放时,是否记录超过 long_query_time的sql语句。默认...
2018-09-10 19:41:26
570
求 lldb多线程调试方法
2018-01-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅