【环境介绍】

系统环境:Linux + mysql 5.7.18 + 主从复制架构

【背景描述】

客户反映用在mysql数据库上truncate一个innode引擎的list分区100G左右表时,耗时时间非常久,执行命令期间数据库运行非常缓慢,新连接无法登录,连旧连接都是卡主。

【问题处理】

数据库后台日志信息:

2018-04-17T07:01:50.963763Z 0 [Warning] InnoDB: A long semaphore wait:

--Thread 139922526992128 has waited at btr0sea.ic line 90 for 241.00 seconds the semaphore:

X-lock (wait_ex) on RW-latch at 0xa49e6a08 created in file btr0sea.cc line 195

a writer (thread id 139922526992128) has reserved it in mode  wait exclusive

number of readers 1, waiters flag 1, lock_word: ffffffffffffffff

Last time read locked in file btr0sea.ic line 128

Last time write locked in file /export/home/pb2/build/sb_0-22759043-1489826356.96/mysql-5.7.18/storage/innobase/btr/btr0cur.cc line 3874

InnoDB: ###### Starts InnoDB Monitor for 30 secs to print diagnostic info:

InnoDB: Pending preads 0, pwrites 0

---BUFFER POOL 1

……

---BUFFER POOL 7

Buffer pool size   786336

Free buffers       240156

Database pages     546149

Old database pages 201625

Modified db pages  2

Pending reads      0

Pending writes: LRU 0, flush list 2, single page 0

Pages made young 116, not young 8649813

0.00 youngs/s, 0.00 non-youngs/s

Pages read 1978853, created 5, written 1217

0.00 reads/s, 0.00 creates/s, 0.00 writes/s

Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000

Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s

LRU len: 546149, unzip_LRU len: 0

I/O sum[0]:cur[0], unzip sum[0]:cur[0]

--------------

ROW OPERATIONS

--------------

0 queries inside InnoDB, 0 queries in queue

0 read views open inside InnoDB

Process ID=32294, Main thread ID=139922602555136, state: making checkpoint

Number of rows inserted 19058, updated 51, deleted 15, read 767102669

0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s

从日志报错看跟innodb引擎的buffer pool相关

mysql> show VARIABLES like '%pool%' ;

+-------------------------------------+----------------+

| Variable_name                       | Value          |

+-------------------------------------+----------------+

| innodb_buffer_pool_chunk_size       | 134217728      |

| innodb_buffer_pool_dump_at_shutdown | ON             |

| innodb_buffer_pool_dump_now         | OFF            |

| innodb_buffer_pool_dump_pct         | 25             |

| innodb_buffer_pool_filename         | ib_buffer_pool |

| innodb_buffer_pool_instances        | 8              |

| innodb_buffer_pool_load_abort       | OFF            |

| innodb_buffer_pool_load_at_startup  | ON             |

| innodb_buffer_pool_load_now         | OFF            |

| innodb_buffer_pool_size             | 103079215104   |

从日志跟参数可以看出数据库innodb_buffer_pool_size96G,该参数相对较大,怀疑是有其他业务操作该表,但是客户反映该数据库为历史数据库,使用人很少。

| innodb_buffer_pool_size             | 103079215104   |是96G,

---BUFFER POOL 7 Buffer pool size   786336 786336*16/1024/1024*8 是96G

truncate表清理数据是非常快的,从Old database pages上面信息推断数据在dirty_pages较多,扫描链表时间过长。于是查看dirty_pages_pct参数。

mysql> show  variables like '%dirty%';

+--------------------------------+-----------+

| Variable_name                  | Value     |

+--------------------------------+-----------+

| innodb_max_dirty_pages_pct     | 90.000000 |

| innodb_max_dirty_pages_pct_lwm | 0.000000  |

+--------------------------------+-----------+

InnoDB tries to flush data from the buffer pool so that the percentage of dirty pages does not exceed

this value. The default value is 75.

从官方文档看出,innodb_max_dirty_pages_pct默认值为75%,但是当前数据库为90%,可以说是很高的了。咨询该参数修改情况,为之前模板复制过来直接运用。

【解决办法】

根据当前数据库为历史数据库,应用连接数据库操作非常少,建议innodb_max_dirty_pages_pct参数调为50%。调整该参数不需要重启数据库,注意修改参数文件,防止下次重启数据库后还是原来的参数。

innodb_max_dirty_pages_pct参数调为50%后,业务删除数据为1分钟之内。

mysql> truncate table nm_xxxf_xxxt_xx_201803;

Query OK, 815420 rows affected (44.32 sec)

当前数据库内存较高,暂时不建议对innodb_buffer_pool_size 调小,可根据后续调整该参数。

Mariadb/MySQL数据库单表查询基本操作及DML语句

Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...

MySQL数据库分表的3种方法

mysql truncate很慢_mysql数据库truncate表时间长处理相关推荐

  1. oracle truncate很慢,ORACLEl数据库truncate分区表很慢问题 | 信春哥,系统稳,闭眼上线不回滚!...

    在测试环境TRUNCATE一张按天分区的大表,数据量大概30G,速度非常慢,大概需要半个小时,检查发现等待的是log file switch事件.本案例数据库版本为11.2.0.4.0,操作系统为OE ...

  2. mysql字段中有问号_Mysql数据库,表中有中文时,select出来好多问号(?)的解决方法...

    首先,我用的是zip包的Mysql,直接解压使用的,网上说修改my.ini或者my.cnf在我机器上根本就找不到.但是my.ini这个东西是可以自己添加的.将mysql目录中的my-default.i ...

  3. mysql实训报告_mysql数据库技术》实验报告.doc

    mysql数据库技术>实验报告 MySQL数据库技术实验报告 系 别 班 级 学 号 姓 名 地点 地点机房 课程名称 MySQL数据库技术 实验名称 实验1 MySQL的使用 实 验 过 程 ...

  4. mysql字段约束_mysql数据库之表操作及字段约束条件

    一.存储引擎 二.表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id name age sex 1 li 12 male 2 liu ...

  5. mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

  6. 如何用mysql创建股票数据库_mysql数据库创建表

    Mysql错误代码大全 1016错误:文件无法打开,使用后台修复或者使用phpmyadmin进行修复. 1044错误:数据库用户权限不足,请联系空间商解决 1045错误:数据库服务器/数据库用户名/数 ...

  7. mysql全表重命名备份_Mysql数据库和表的常用操作以及数据备份恢复

    数据库 查看所有数据库 show databases; 使用数据库 use 数据库名; 查看当前使用的数据库 select database(); 创建数据库 create database 数据库名 ...

  8. mysql数据库操作宠物表_mysql数据库及表的基本操作

    1. 数据库操作 1.1 创建数据库 # 创建数据库 mysql> create database db_test; # 查看创建好的数据库 mysql> show create data ...

  9. MySQL数据库应用 多表查询_mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: ​ 数据库的创建 : create ...

最新文章

  1. 编译自己的emacs
  2. 【复杂网络】图模型在欺诈检测应用一点看法
  3. 线性结构--离散存储 链表讲解
  4. g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)
  5. CSS 水平垂直居中
  6. 第二章 认识计算机硬件
  7. Python对Excel的操作(openpyxl)
  8. xtile 下载_Stata: gen 命令中的 group() 函数的潜在风险
  9. 车机开发之均衡器app开发
  10. 计算机管理找不到防火墙,电脑没有防火墙怎么办
  11. 百度初级认证考试知识点
  12. java调用javascript函数_Java调用javascript函数
  13. 提问的力量四:提问的艺术-体验学习中提问的技巧
  14. 高并发限流-漏桶算法和令牌桶算法
  15. 2017年总结,2018新开始
  16. C语言的奇技淫巧之三
  17. Centos下rarcrack破解压缩包密码
  18. HTTP状态码之500、501、502、503、504、505
  19. 未来人工智能人才,需要具备哪些基本特征?
  20. google earth engine (GEE)面向对象分类 代码

热门文章

  1. 实现点击产生爱心的特效
  2. 安装.net framework运行vs导致鼠标失灵的原因
  3. LC-789. 逃脱阻碍者(脑筋急转弯)
  4. 爬虫爬取数据时各种中文乱码问题
  5. 奥的斯服务器显示spb,奥的斯ACD4电梯自动复位救援与语音提示功能设置操作
  6. 谁再说不会 K8S 高可用部署,就把这个给他甩过去!
  7. https://docs.icons8.com/ 切片 钢笔 布尔计算
  8. 如何避免群发短信内容被屏蔽
  9. Angular实战项目记录(三)------表格换行
  10. ETL流程、数据流图及ETL过程解决方案