开发者社区> 关尚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MySQL unble to lock ./ibdata1 error

简介: 案例一:   环境说明:mysql 5.6 用户连接不上mysql ,查看error 日志:unble to lock ./ibdata1 error,等待20分钟左右,在启动mysql恢复正常。
+关注继续查看

案例一:

 

环境说明:mysql 5.6

用户连接不上mysql ,查看error 日志:unble to lock ./ibdata1 error,等待20分钟左右,在启动mysql恢复正常。./ibdate1 文件 40G

 

解决方法:

1、查看slow log

2show procedure status  

#查看存储过程,该实例有很多存储过程

3show create procedure 存储过程名称 \G

 

结论:复杂的存储过程(数据库里的数据也不对),导致sql语句执行的时间很长,7万多秒。这时mysql hug住了 占用了./ibdate1 文件

 

案例二:

有一个线上库的ibdate1文件从1G,一直不断增长到100G,到底怎么回事呢?

 

ibdate1 文件暴增原因:

  1. 大量事务,产生大量来不及purgeundo log
  2. 有旧事务长时间未提交,产生大量旧undo log
  3. file i/o 性能差,purge进度慢
  4. 32bit系统下有bug
  5. 使用共享表空间方式,所有表数据放在一起

 

大量事务,产生大量来不及purgeundo log

ab37d7436654b858f2f0fb91b0496844f27c919f

最新事务ID21520177836

最新purged的事务ID21516167648

二者相差:4010188

等待purgeundo事务列表:41341108

 

有旧事务长时间未提交,产生大量旧undo log

8699b313c012b6511e0dbce8d45cb70fd495bbed

 

解决办法:

调度ibdate1的初始大小

innodb_date_file_path = ibdata1:1G:autoextend

升级到5.6及以上(64-bit),采用独立undo表空间

innodb_undo_directory = path

innodb_undo_logs = 128

innodb_undo_tablespaces = 126

 

启用独立表空间,ibdata1 只存放系统数据

  innodb_file_per_table =  1

增加purge线程数

  innodb_purge_threads = 4

 

提高file i/o能力

 raid 10 & wb & BBU

xfs

deadline/noop

ssd/pice ssd

 

事务及时提交,不要积压

  及时commit/rollback

注意事务自动提交设置

  默认打开autocommit = 1

检查开发框架,确认autocommit =0 的地方,事务结束后都有提交或回滚

 

mysql参数优化:

innodb_buffer_pool_size:约物理内存的50%~~70%

innodb_date_file_path:初始大小至少1G

设置独立数据表空间以及独立undo表空间(5.6+)

innodb_log_file_size ,5.5及以上1G以上,5.5以下建议不超过512M

innodb_flush_log_at_trx_commit,0 => 最快数据最不安全,1 =>最慢最安全,2=>折中

innodb_max_dirty_pages_pct: 25%~~50% 为宜

innodb_io_capacity :普通机械盘=>1000左右,ssd=>10000左右,PCle SSD=>20000以上

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ETL(七):存储过程转换器和序列转换器的使用(四)
ETL(七):存储过程转换器和序列转换器的使用(四)
24 0
RDS for MySQL 使用 utf8mb4 字符集存储 emoji 表情
RDS for MySQL 使用 utf8mb4 字符集存储 emoji 表情
6588 0
MySQL LOCK TABLES 与UNLOCK TABLES
1语法 LOCK TABLES tbl_name[[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ... lock_type:READ[LOCAL]| [LOW_PRIORITY] WRITE UNLOCK TABLES 2简单使用 一个session只能为自己获取锁和释放锁,不能为其他session获取锁,也不能释放由其他session保持的锁。
687 0
畅通工程,How Many Tables ACM第九天-图论
下面两题的方法是一样的都是并查集的应用; 并查集的重点就是找到祖先节点的过程。 重点在这里:int find(int x){ return p[x] == x ? x : p[x] = find( p[x]); } 不断地递归,递归到找到自己是自己的祖先为止。
1031 0
sql点滴37—mysql中的错误Data too long for column '' at row 1
原文:sql点滴37—mysql中的错误Data too long for column '' at row 1   1、MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止、重启动)   2、命令行方式  Windows   1.点击“开始”->“运行”(快捷键Win+R)。
1384 0
sql点滴37—mysql中的错误Data too long for column '' at row 1
1、MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止、重启动)   2、命令行方式  Windows   1.点击“开始”->“运行”(快捷键Win+R)。
861 0
+关注
关尚
MySQL redis Python go
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL Replication: Latest Developments
立即下载
从花农到MySQL大
立即下载
从华农到MySQL大神
立即下载