参考: 数据库技术:MySql学习笔记之事务隔离级别详解 详解MySQL 数据库隔离级别与MVCC MySQL 事务&&锁机制&&MVCC 数据库系统原理 - MySQL封锁 数据库常见面试题:乐观、悲观锁,行锁、表锁、读、写锁,间隙锁 MySQL中的锁(表锁、行锁) 数据库系统概念-读写锁、意向锁、行表锁 mysql的锁机
MySQL之——崩溃-修复损坏的innodb:innodb_force_recovery 1、问题描述 今天在线运行的一个mysql崩溃了。 查看错误日志,如下: ----------------------------------------- 161108 11:36:45 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var 2017-08-
1.Analyze table ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name UPDATE HISTOGRAM ON col_name [, col_name] ... [WITH N BUCKETS] ANALYZE [NO_WRITE_TO_BINLOG |
有时候,怀疑某个MySQL内存查询导致CPU或磁盘I/O消耗特别高,但又不确定具体是哪个SQL引起的。 或者当InnoDB引擎内部有semaphore wait时,想知道具体是哪个线程/查询引起的。多说一下,当有semaphore wait事件超过600秒的话,InnoDB会发出crash信号: InnoDB: ###### Diagnostic info prin
第07章_InnoDB数据存储结构 1.数据库的存储结构:页 1.1磁盘与内存交互基本单位:页 1.2页结构概述 1.3页的大小 1.4页的上层结构 2.页的内部结构 第1部分:File Header(文件头部)和File Trailer (文件尾部) 1.数据库的存储结构:页 索引结构给我们提供了高效的索引方式
MySQL 查询优化(一) MySQL 查询优化(二) 优化原则 MySQL 查询优化(三) 索引的重要性1 MySQL 查询优化(四) 索引的重要性2 MySQL 查询优化(五) 索引的重要性3 MySQL 查询优化(六) 语句优化 MySQL 学习(一)视图 MySQL学习(二) 存储过程 MySQL学习(三)触发器(水贴,为了知识体系完善) MySQL学习(四) 锁 MySQL
表空间(ibd文件),一个MySQL实例可以对应多个表空间,用于存储记录、索引等数据。 段,分为数据段(Leaf node segment)、索引段(Non-Leaf node segment)、混滚段(Rollback segment),InnoDB是索引组织表,数据段就是B+树的叶子节点,索引段即为B+树的非叶子节点。段用来管理多个Extent(区)。 区,表空
1.The total number of locks exceeds the lock table size(锁的总数超过锁表的大小 ) 国外牛人解释: If you're running an operation on a large number of rows within a table that uses the InnoDB storage engine, you might see this error: ERROR 1206 (HY000): The total
对于 serializable隔离等级 事务A修改 事务B查询 在A事务执行完成前,B事务会一直等待A事务释放写锁。 原理:没有MVVC,通过读锁加写锁,使涉及同一行操作或读取的事务完全按照顺序执行。
事务A先执行 事务B随后执行 B只有再A事务结束后才会执行update操作,因为A事务对该行添加了写锁,且执行完更新操作不会释放,只有事务执行完成或者事务回滚后才会释放写锁,然后B事务开始操作。当A事务执行完更新操作时,数据库中的name确确实实变为了3。 若AB都执行成功
节选自 《MySQL 常见知识点&面试题总结》 表级锁和行级锁了解吗?有什么区别? MyISAM 仅仅支持表级锁(table-level locking),一锁就锁整张表,这在并发写的情况下性非常差。 InnoDB 不光支持表级锁(table-level locking),还支持行级锁(row-level locking),默认为行级锁。行级锁的粒度更
锁是一种很珍贵的资源。锁一定是并发场景下才会出现的。 保证数据的隔离性,一致性。 1.latch 这个锁存在于内存中,用来控制并发访问的,保护的是内存数据结构。他锁住的是并发资源。就是临界区。 就是java和golang中的mutex。 他加锁的对象是线程。持续时间是临界时间。只有读写锁和互
参数:innodb_buffer_pool_size。我们线上基本上设置50-75%。设过80,发现OOM有点严重。 不过这个值肯定是越大,性能越好。 如何在缓冲池中标记一个页? (space,page_num) space指的是你ibd文件的编号。在information_shcema中 innodb_sys_tablespaces中,就有标注表的space id。 同样innod
如果数据库表不存在,提醒表已经存在可以进入mysql bin 目录执行 mysqladmin -uroot -pskyland -P3307 drop trafficflow143 表损坏可以先创建临时表 1. 先把 mysql 的my.init 文件 的 #innodb_force_recovery=4 修改为指定值; 2. 进入bin 目录执行 mysqlcheck -u ro
突然收到MysqL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程,下次遇到就不会这么手忙脚乱了。 处理过程: 一遇到报警之后,直接打开错误日志,里面的信息:InnoDB: Database page corru
1、特性 2、doublewrite 3、doublewrite 对象 4、doublewrite 性能开销 5、doublewrite 6、参数:innodb_doublewrite 7、解决方法 8、insert/change buffer 9、insert buffer 工作原理 10、 11、adaptive has
Mysql锁 锁是计算机协调多个进程或线程并发访问某一资源的机制 我们认知中的行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁,这些锁统称为悲观锁 概述 MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level
在 InnoDB 引擎中,每张表都会有一个特殊的索引“聚簇索引”,也被称之为聚集索引,它是用来存储行数据的。一般情况下,聚簇索引等同于主键索引,但这里有一个前提条件,那就是这张表需要有主键,只有有了主键,它才能有主键索引,有主键索引才能等于聚簇索引。 所以看到这里,我们应该明白一个道理:
Mysql解决The total number of locks exceeds the lock table size错误 InnoDB表执行大批量数据的更新,插入,删除操作时会出现这个问题,需要调整InnoDB全局的innodb_buffer_pool_size的值来解决这个问题,并且重启mysql服务。 show variables like "%_buffer%";(不要忘记带;号
1、InnoDB体系架构 下图简单显示了InnoDB的存储引擎的体系架构,可以认为这些内存块组成了一个大的内存池,负责如下工作 InnoDB存储引擎体系架构 维护所有进程/线程需要访问的多个内部数据结构 存储磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存 重做
MySQL 里经常说到的 WAL技术,也就是先写日志,再写磁盘。 当内存数据页跟磁盘数据页内容不一致的时候,我们成这个内存页为“脏页”。内存数据写入磁盘后,内存和磁盘上的数据页内容就一致了,称为“干净页”。 MySQL 从 内存更新到磁盘的过程,称为刷脏页的过程(flush)。 InnoDB 刷脏页的时
1、应用场景: 使用docker-compose 部署后台系统、nacos、seata 时,由于他们都各有自己的一个数据库,且在容器启动的时候要保证这三个数据库都创建完成,否则后台系统起不来,或者nacos 报错找不到数据库,seata 一样 2、构建数据: 执行docker-compose up -d 1)目录结构: 2)test1_db.sql
1.什么是脏页、干净页 当内存中和的数据页和磁盘中的不一致时,称为脏页;当内存中的数据页和磁盘中的一致时,称为干净页; 2.什么时候刷脏页 内存中的脏页进行写磁盘的过程称之为刷脏页,刷脏页的时候需要暂停所有业务更新,所以系统会产生卡顿的现象; 当binlog写满的时候,需要暂
set autocommit=1 通过general_log的日志查看 set max_execution_time 控制每个语句执行最长时间 information_schema.innodb_trx 设置长事务阈值,超过就报警 percona 的pt-kill工具不错 innodb_undo_tablespace设置为2 或者更大 innodb_io_capacity 脏页,刷脏页 flush purge merge
问题由于系统需要,吧mysql数据库字符集由utf-8转换成utf-8mb4.mysql数据库中存在数据,那么不能直接用命令修改字符集,如果直接修改,只会对新创建的表或记录有效,原有数据还是之前的字符集。具体如下 导出存储sql(结构和数据)替换存储sql中建表内容 CHARSET=utf8 =》CHARSET=utf8mb4 COLL