
MySQL
文章平均质量分 98
sunashe
这个作者很懒,什么都没留下…
展开
-
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 · 5233 阅读 · 0 评论 -
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 · 2418 阅读 · 0 评论 -
数据导入引发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 · 400 阅读 · 0 评论 -
MySQL中的互斥锁包装器
我们习惯性的使用互斥锁来保护某个临界区,它可能是一个变量,或者一段代码,比如在进入某个函数后,需要对mutex加锁,而无论任何情况下,只要函数退出,就要把锁释放掉,而函数可能会因为各种情况而退出,包括遇到各种异常,错误,不同的结果等等,一个可行的方案是在所有可能退出函数的地方进行锁的释放,亦或者通过goto/break等语法来控制函数在特定的位置退出,并且退出前进行锁的释放,但这些实现方式相比较今...原创 2020-04-06 20:27:56 · 346 阅读 · 0 评论 -
深度解析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 · 780 阅读 · 0 评论 -
详解MySQL processlist id增长机制,最大多少?会不会溢出?
之前就有这样的疑惑,只是一直没有真正遇到过这个问题,所以也没有去动手翻阅代码去一探究竟,而最近在写SQL洞察组件时遇到了点问题,今晚就来看一下。其实定位这个标题中的问题也非常简单,直接定位到线程初始化阶段,函数调用过程如下:::pfs_spawn_thread(void *) ::handle_connection(void *) init_new_thd(Chann...原创 2020-02-29 00:03:33 · 744 阅读 · 0 评论 -
before_dml hook 引发的drop table阻塞事件
before_dml_hook 引发的drop table阻塞事件现象:一条drop命令后,几乎所有写入操作都阻塞在Opening tables对于Drop table操作,历来会出现一些问题,比如:https://www.cnblogs.com/CtripDBA/p/11465315.htmlhttps://blog.youkuaiyun.com/zyz511919766/article/deta...原创 2020-04-02 20:50:48 · 360 阅读 · 0 评论 -
20亿数据Innodb表的OLTP测试报告
文章目录20亿数据Innodb表的测试报告一、软硬件信息硬件软件二、核心参数设置数据库操作系统三、机械硬盘下的标准OLTP测试四、SSD硬盘下的标准OLTP测试五、总结20亿数据Innodb表的测试报告Innodb表最大可以承载64TB的数据,按照sysbench的标准表结构,20亿数据大概在400多GB,所以这样的表,Innodb是可以处理的,只不过是性能的问题,那么这个性能到底会有多差呢?...原创 2018-11-21 10:39:23 · 946 阅读 · 0 评论 -
走索引+回表还是走主键扫描?
走索引+回表还是走主键扫描?一个非索引覆盖类型的查询,走主键还是走索引回表?MySQL可能会在这个问题上选择错误。比如说一张表t1,表结构如下mysql> show create table t1\G*************************** 1. row *************************** Table: t1Create Table:...原创 2018-11-12 14:29:55 · 1840 阅读 · 0 评论 -
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 · 1969 阅读 · 0 评论 -
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 · 11905 阅读 · 0 评论 -
查看一个正在执行的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 · 1759 阅读 · 0 评论 -
MySQL optimize trace结果分析
原创 2018-10-24 09:24:11 · 1066 阅读 · 0 评论 -
mysql5.7bug trace与查询计划不符合
mysql5.7bug 执行计划与trace结果不符合暂且不说查询优化器的性能,最起码trace结果应该与执行计划是相同的吧。 查询计划:mysql> explain select id,uuid,link_uuid,laundry_uuid,from_user,to_user,amount,principal,interest,sequence,pay_status,prod原创 2016-04-30 03:25:49 · 1283 阅读 · 0 评论 -
MySQL-5.7在多列索引 in条件查询的优化
山谷中偶遇,分享出来。某日(ri),zabbix mysql慢日志监控发现很多陌生的慢查询。 大概如下:SELECT * FROM `entry_device` WHERE (`entry_no`, `device_udid`) IN (('464580908742086656', 'ffffffffdeaea5fcffffffff96fddfcf')), ('464109860674342912原创 2016-04-21 01:01:41 · 17633 阅读 · 0 评论 -
MySQL Debug sync功能使用简介
debug sync是MySQL提供的一种代码调试,问题分析工具, 它集成在MySQL的内部。具体作用是:让代码执行到某个特殊的位置(同步点)时触发暂停,等待指定的某个或者多个signal在激活同步点,并且被触发时,可以向别的线程发送signal,唤醒其他线程在激活同步点,并且被触发时,可以被别的线程通过signal唤醒继续执行可以设置同步点的等待超时时间要求:只能在debug版本中...原创 2020-02-07 09:36:01 · 1608 阅读 · 0 评论 -
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 · 638 阅读 · 0 评论 -
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 · 759 阅读 · 0 评论 -
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 · 497 阅读 · 0 评论 -
MySQL自旋锁-spin lock
自旋锁标签(空格分隔): innodb简介Innodb中大量使用自旋锁来避免锁等待时的上下文切换,影响性能的问题。自旋锁分为加锁和解锁两个过程,其中加锁分为尝试加锁与自旋的过程。数据结构解析其上层调用方式一般为如下: mutex_enter(&trx->undo_mutex);mutex_enter宏定义如下#define m...原创 2018-07-30 20:15:28 · 3888 阅读 · 0 评论 -
图解Innodb行锁机制(select for update)
简介本文对RR事务隔离级别下的select语句进行加锁处理分析。表结构如下:mysql> show create table lock_test\G*************************** 1. row *************************** Table: lock_testCreate Table: CREATE TABLE ...原创 2018-08-31 14:29:36 · 4727 阅读 · 1 评论 -
Innodb行锁等待是如何被唤醒的
文章目录行锁等待是如何被唤醒的先来构建一个行锁等待场景代码解析通过pstack抓取线程2的堆栈阅读相关代码进入等待状态事务提交,锁释放逻辑等待时使用的是pthread_cond_wait,超时是如何触发的呢?行锁等待是如何被唤醒的先来构建一个行锁等待场景这非常容易比如说 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCRE...原创 2018-10-12 19:09:57 · 735 阅读 · 0 评论 -
Innodb锁系统介绍Introduction to Transaction Locks in InnoDB Storage Engine
此文章是从Oracle官方博客上转载的,写的非常准确,正在翻译,先看看原文吧,链接已经失效。 FROM:https://blogs.oracle.com/mysqlinnodb/entry/introduction_to_transaction_locks_inIntroductionTransaction locks are an important feature of any tr...转载 2018-09-07 17:00:29 · 320 阅读 · 0 评论 -
Innodb加锁机制(隐式锁)
隐式锁简介详解隐式锁隐式锁加锁流程判断是否存在隐式锁隐式锁转换隐式锁转换在5.7中的优化相关博客地址隐式锁简介Innodb采用乐观插入的方式,所以在做insert操作时不会进行显示加锁,也就是不会生成lock_t锁结构,这样可以极大的减少锁开销,提升整体的性能。如果没有显示的行锁,该如何保证事务插入的正确性呢?比如说如下两个事务,插入相同的...原创 2018-09-13 09:56:36 · 3081 阅读 · 0 评论 -
Innodb死锁分析-案例1
简介本文是死锁分析一系列文章中的第一篇,是线上真实发生的死锁案例。以后会不定时更新此类文章,以加固对Innodb加锁机制的理解。死锁日志日志如下,数据已经脱敏处理。 从死锁日志中,不难发现 1,事务1 在对索引index_user_id插入时,加锁(插入意向锁)陷入等待状态 2,事务2 和事务1等待情况相同 3,事务2 拥有对heap_no=1的数据的next key ...原创 2018-09-10 14:20:55 · 324 阅读 · 0 评论 -
Innodb加锁机制(Insert Intention Locks)
本文中心思想来源于官方文档 Insert Intention Locks意为插入意向锁,插入意向锁是Innodb gap锁的一种类型,这种锁表示要以这样一种方式插入:如果多个事务插入到相同的索引间隙中,如果它们不在间隙中的相同位置插入,则无需等待其他事务。比如说有索引记录4和7,有两个事务想要分别插入5,6,在获取插入行上的独占锁之前,每个锁都使用插入意图锁锁定4和7之间的间隙,但是不要互相阻塞...原创 2018-09-03 15:31:16 · 3126 阅读 · 1 评论 -
MySQL Dumping and Reloading the InnoDB Buffer Pool
MySQL’s default storage engine as of version 5.5 is InnoDB . InnoDB maintains a storage area called the buffer pool for caching data and indexes in memory. By keeping the frequently-accessed data ...翻译 2015-03-06 13:44:32 · 710 阅读 · 0 评论 -
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 · 1623 阅读 · 6 评论 -
innodb表最大列数限制
innodb 最大列数限制为1023,其中包含3个内部隐藏列,分别为:DB_ROW_ID(如果没有主键的情况), DB_TRX_ID事务id列,DB_ROLL_PTR回滚指针列。但是分配给用户自己所能定义的列数目仅为1023-3*2=1017.这是因为37 /* Maximum number of user defined fields/columns. The reserved columns3原创 2016-09-04 18:15:03 · 3152 阅读 · 0 评论 -
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 · 506 阅读 · 0 评论 -
InnoDB-行锁分类
原创 2019-09-03 22:50:57 · 466 阅读 · 0 评论 -
MySQL-XA事务(二)源码实现
原创 2019-08-14 20:07:31 · 248 阅读 · 0 评论 -
MySQL-5.7XA事务的改进与缺陷
转载 2019-08-18 22:56:26 · 529 阅读 · 0 评论 -
MySQL-XA事务(一)简介
欢迎关注我的微信公众号:原创 2019-08-14 20:02:21 · 330 阅读 · 0 评论 -
数据库审计方案简介和功能对比
文章目录数据库审计方案简介和功能对比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 · 1781 阅读 · 4 评论 -
Innodb死锁日志分段解读-如何阅读死锁日志
死锁分析是DBA日常工作之一,一般死锁分析的步骤如下阅读死锁日志查看表机构,甚至不需要定位事务场景,进行分析而正确的理解死锁日志,是进行死锁分析的重点,下面就是对死锁日志的分段解读。一般的死锁日志如下------------------------LATEST DETECTED DEADLOCK------------------------2019-01-09 15:11:...原创 2019-03-10 18:13:15 · 1221 阅读 · 0 评论 -
如何查看当前Innodb的并发
文章目录如何查看当前Innodb的并发线程数?如何查看当前Innodb的并发线程数?在MySQL中:用Threads_connected表示当前数据库server层的链接数,对应参数max_connections;使用Threads_running表示已经连接的线程中,正在执行SQL的线程并发数我们还知道在Innodb中还存在一个并发数的限制,可以参照参数innodb_thr...原创 2019-03-09 18:35:27 · 605 阅读 · 0 评论 -
InnoDB行锁机制(gap锁是如何阻塞插入操作的)
文章目录InnoDB行锁机制(gap锁是如何阻塞插入操作的)一、假设场景二、加锁过程分析InnoDB行锁机制(gap锁是如何阻塞插入操作的)InnoDB 在执行insert操作时,并不会显示加锁,如果是主键插入,只会设置对应记录上的trx id隐藏列,称为隐式加锁。一、假设场景比如说如下表结构mysql> show create table t7\G***************...原创 2018-12-30 15:32:32 · 1354 阅读 · 3 评论