InnoDB

mysql中插入语句过多,导致遇到The total number of locks exceeds the lock table size错误的问题

允我心安 提交于 2020-12-05 10:18:53
在Linux环境下,mysql插入语句过多而导致报错问题。 The total number of locks exceeds the lock table size 百度翻译以后是:锁的总数超过了锁表的大小。网上查了查以后找到的解决方案是: InnoDB表执行大批量数据的更新,插入,删除操作时会出现这个问题,需要调整InnoDB全局的 innodb_buffer_pool_size 的值来解决这个问题,并且重启mysql服务。 进入mysql命令 show variables like "%_buffer%";(不要忘记带;号,没有;号表示一条语句没有结束) 默认的innodb_buffer_pool_size=8M 示的格式是 1M*1024*1024,设置的时候也要这样设置,例如 修改 innodb_buffer_pool_size的值为3G: SET GLOBAL innodb_buffer_pool_size=67108864;(3*1024*1024*1024,不要忘记;号) 但是我查了我的 innodb_buffer_pool_size 以后发现我的好像完全足够。并且和另一个库一样的。另外一个可以跑过去。 然后去请教了我们组的大佬。然后说明情况以后他发现是因为服务器缓存的数据量太大,导致缓存不够锁表。具体我网上查了下命令 mysql查看被锁住的表 查询是否锁表    

MySql(七):MySQL性能调优——锁定机制与锁优化分析

随声附和 提交于 2020-12-05 07:00:32
针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能。锁定机制也因此成了各种数据库的核心技术之一。 不同数据库存储引擎的锁定机制是不同的 ,本文将从MySQL最常见的存储引擎MyISAM与InnoDB的锁定机制说起。 一、MyISAM的锁机制——表级锁定 MySQL表级锁定的常见类型主要分为两种,一种是读锁,一种是写锁。 谁持有读锁?谁持有写锁?谁在等待读锁资源?谁在等待写锁资源?数据库系统都是要记录的。MySQL中,主要通过如下4个队列来保存相关信息: 读锁持有队列:Current read-lock queue(lock->read)——存放所有正在锁定的读锁信息 写锁持有队列:Current write-lock queue(lock->write)——存放所有正在锁定的写锁信息 读锁等待队列:Pending read-lock queue(lock->read_wait)——存放所有等待对资源加读锁的线程信息 写锁等待队列:Pending write-lock queue(lock->write_wait)——存放所有等待对资源加写锁的线程信息 为保证数据一致完整性,多线程可以为同一份资源加多个读锁,而同一份资源只能加一个写锁,读锁与写锁也不能同时加在一份资源上。 1、读锁定 客户端请求获取读锁定资源时

面试官问:平常你是怎么对Java服务进行调优的?

和自甴很熟 提交于 2020-12-05 02:55:43
点击关注上方“ 程序员私房菜 ”,设为“置顶或星标”,第一时间送达技术干货。 来源:http://t.cn/AiCTERJz Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。 Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层 ,如图 1 所示。 图 1.Java 性能优化分层模型 每层优化难度逐级增加,涉及的知识和解决的问题也会不同。比如应用层需要理解代码逻辑,通过 Java 线程栈 定位有问题代码行等;数据库层面需要 分析 SQL、定位死锁 等;框架层需要 懂源代码 , 理解框架 机制;JVM 层需要对 GC 的类型和工作机制有深入了解,对 各种 JVM 参数 作用了然于胸。 围绕 Java 性能优化,有两种最基本的分析方法: 现场分析法和事后分析法。 现场分析法 通过保留现场,再采用诊断工具分析定位。现场分析对线上影响较大,部分场景(特别是涉及到用户关键的在线业务时)不太合适。 事后分析法 需要尽可能多收集现场数据

头条后台开发面经

谁说胖子不能爱 提交于 2020-12-05 02:20:31
一面(纯技术面) 队列的实现,需要注意的地方 快速排序的实现、时间复杂度分析 B树和B+树的区别、应用 HashMap的实现,扩容机制,扩容时如何保证可操作 Redis扩容机制(渐进式单线程扩容 ) Spring AOP的原理 Spring IoC的原理,如何实现,如何解决循环依赖 两线程对变量i进行加1操作,结果如何,为什么,怎么解决 CAS概念、原子类实现原理 synchronize底层实现,如何实现Lock AQS有什么特点 可见性的底层原理 JVM内存模型,为什么要这么分 本地方法栈和虚拟机栈的区别 如何查看JVM参数是否正确 TCP三次握手,如何实现 Socket编程底层如何实现 select和epoll的区别 算法:蛇形打印二叉树 二面(项目面+技术面) 项目详聊(问了很多、很细) Innodb多列索引 MySQL默认事务隔离级别,不可重复读是什么意思,如何实现可重复读 Redis服务端有20GB内存,现在要缓存200GB数据,如何处理 算法:给出[[1, 2], [3, 5], [8, 8], [15, 16], [32, 38]],求间隔 什么是堆,画了个二叉树问是否符合最小堆的结构,然后根据图叙述堆排序的详细过程。 TCP与UDP的区别,还有哪些其他的传输层协议,用来做什么的。 进程与线程的区别 ,你是怎么理解这两个概念的(快被问烂了的问题……)

mysql的这些坑你踩过吗?快来看看怎么优化mysql?

人盡茶涼 提交于 2020-12-04 17:56:06
什么是mysql? 如果你的回答是关系型数据库,那就会显得有些浅薄。我们平时工作中肯定会用到mysql,但是谈到mysql,就不能只说增删改查。 接下来我们从另一个角度认识一下mysql(其实不仅仅是mysql,对于任何一个产品、服务,我们都应该有一个抽象化的架构,而不能局限于这个产品的某一个区域) mysql的逻辑分层 连接层:提供客户端的连接功能和权限认证, 服务层: 提供用户使用的接口(curd,主从配置,数据备份等) sql优化器(mysql query optimizer) # 联合索引 a b c select * from table1 where a=xxx and c=xxx and b=xxx; #经过优化器优化后可以使用索引, 复制代码 引擎层 :提供存储数据的方式(innodb myisam archive ,memory,csv,federated ),Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB,myisam 和innodb的区别:https://segmentfault.com/a/1190000021995700 mysql> show engines -> ; +--------------------+---------+------------------------------------------

访问权限控制系统|全方位认识 mysql 系统库

巧了我就是萌 提交于 2020-12-04 15:53:46
在上一期《权限系统表|全方位认识 mysql 系统库》中,我们针对mysql 系统库中的权限表做了一个简单的认识,本期我们将在上一期的基础上详细介绍MySQL 的访问权限控制系统,下面请跟随我们一起开始 mysql 系统库的系统学习之旅吧。 1、访问权限控制系统概述 什么是访问权限控制系统? MySQL的mysql 系统库提供了user、db、tables_priv、columns_priv、procs_priv、proxies_priv几张表用于存放不同权限范围的用户帐号相关的数据,这些表共同组成了MySQL 的访问权限系统。 MySQL权限系统的主要功能是对从给定主机连接到MySQL Server的用户进行身份验证,并校验该用户在该Server中的数据库对象访问的权限(如SELECT,INSERT,UPDATE和DELETE),另外,还包括管理匿名用户访问和授予特定的MySQL权限的功能(如执行 LOAD DATA INFILE 语句和管理操作权限等)。 MySQL访问权限系统的用户界面由几个SQL语句组成:如CREATE USER、GRANT和REVOKE。 在Server内部,MySQL 将权限信息存储在mysql数据库的权限表中。MySQL Server在启动时将这些表的内容读入内存,后续针对用户的访问控制决策基于权限表的内存副本实现。

访问权限控制系统|全方位认识 mysql 系统库

喜夏-厌秋 提交于 2020-12-04 15:03:55
在上一期《权限系统表|全方位认识 mysql 系统库》中,我们针对mysql 系统库中的权限表做了一个简单的认识,本期我们将在上一期的基础上详细介绍MySQL 的访问权限控制系统,下面请跟随我们一起开始 mysql 系统库的系统学习之旅吧。 1、访问权限控制系统概述 什么是访问权限控制系统? MySQL的mysql 系统库提供了user、db、tables_priv、columns_priv、procs_priv、proxies_priv几张表用于存放不同权限范围的用户帐号相关的数据,这些表共同组成了MySQL 的访问权限系统。 MySQL权限系统的主要功能是对从给定主机连接到MySQL Server的用户进行身份验证,并校验该用户在该Server中的数据库对象访问的权限(如SELECT,INSERT,UPDATE和DELETE),另外,还包括管理匿名用户访问和授予特定的MySQL权限的功能(如执行 LOAD DATA INFILE 语句和管理操作权限等)。 MySQL访问权限系统的用户界面由几个SQL语句组成:如CREATE USER、GRANT和REVOKE。 在Server内部,MySQL 将权限信息存储在mysql数据库的权限表中。MySQL Server在启动时将这些表的内容读入内存,后续针对用户的访问控制决策基于权限表的内存副本实现。

浅析InnoDB purge线程

别来无恙 提交于 2020-12-04 15:02:51
作者:八怪(高鹏) 中亦科技数据库专家 水平有限,如有错误请谅解。源码版本8.0.21。 在处理一个故障的时候怀疑大量的删除数据导致了查询比较慢,但是自己对purge线程的工作流程一直不太清楚,本文不做深入解析,只做工作流程解析,待着如下问题进行: del flag记录是否能够及时清理 为什么History list length持续不为0,是否代表del flag记录没有清理 purge线程触发的规则是什么 一、purge线程综述 一般来讲我们理解的purge线程可以做如下的工作: 清理del flag标签的记录 清理undo的历史版本 如果需要进行undo tablespace截断。 其包含一个协调线程和多个工作线程由如下参数设置: innodb_purge_threads=4 这代表1个协调线程和3个工作线程。协调线程也会充当一个工作线程角色。 二、协调线程循环检测变化 如下调入: srv_purge_coordinator_thread ->srv_purge_coordinator_suspend 判断如下: (rseg_history_len <= trx_sys->rseg_history_len) { //如果当前history_len大于等于上一次循环的的history_len ret =os_event_wait_time_low(slot->event,

那些年被面试官怼的 MySQL 索引

自作多情 提交于 2020-12-04 08:16:06
点击上方 " 程序员小乐 "关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 A single hand that wipes tears during failures is much better than countless hands that come together to clap on success. 失败时有人伸出一只手来为你擦泪,会好过成功时无数人伸手为你鼓掌。 每日掏心 话 当看破一切的时候才知道,其实失去比拥有更踏实。 来自:NebulaGraph | 责编:乐乐 链接:my.oschina.net/u/4169309/blog/3216614 程序员小乐(ID:study_tech) 第 826 次推文 图片来自百度 往日回顾: Google 出品的 Java 编码规范,强烈推荐,权威又科学! 正文 之前有过一次面试,关于MySQL索引的原理及使用被面试官怼的体无完肤,立志要总结一番,然后一直没有时间(其实是懒……),准备好了吗? 索引是什么? 数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,它可以对数据库表中一列或多列的值进行排序,以协助更加快速的访问数据库表中特定的数据。通俗的说,我们可以把数据库索引比做是一本书前面的目录,它能加快数据库的查询速度。 为什么需要索引? 思考:如何在一个图书馆中找到一本书

一次 MySQL 索引面试,被面试官怼的体无完肤!

家住魔仙堡 提交于 2020-12-04 08:03:20
作者:是虎子呀 https://my.oschina.net/u/4062805/blog/3216265 之前有过一次面试,关于MySQL索引的原理及使用被面试官怼的体无完肤,立志要总结一番,然后一直没有时间(其实是懒……),准备好了吗? 索引是什么? 数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,它可以对数据库表中一列或多列的值进行排序,以协助更加快速的访问数据库表中特定的数据。通俗的说,我们可以把数据库索引比做是一本书前面的目录,它能加快数据库的查询速度。 为什么需要索引? 思考:如何在一个图书馆中找到一本书?设想一下,假如在图书馆中没有其他辅助手段,只能一条道走到黑,一本书一本书的找,经过3个小时的连续查找,终于找到了你需要看的那本书,但此时天都黑了。 为了避免这样的事情,每个图书馆才都配备了一套图书馆管理系统,大家要找书籍的话,先在系统上查找到书籍所在的房屋编号、图书架编号还有书在图书架几层的那个方位,然后就可以直接大摇大摆的去取书了,就可以很快速的找到我们所需要的书籍。索引就是这个原理,它可以帮助我们快速的检索数据。 一般的应用系统对数据库的操作,遇到最多、最容易出问题是一些复杂的查询操作,当数据库中数据量很大时,查找数据就会变得很慢,这样就很影响整个应用系统的效率,我们就可以使用索引来提高数据库的查询效率。 B-Tree和B+Tree