热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用穷人版profiler定位调试MySQL

此文已由作者温正湖授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。 

此文已由作者温正湖授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

  周末闲得蛋疼,来英飞特做人工空气净化器。开了电脑后,习惯性得点击xshell按钮,进入InnoSQL稳定性测试机。show processlist几次,发现不对劲啊。我跑的是oltp加oltp_simple(select)测试,怎么好像没有update/delete/insert了,似乎只有select了。因为改了InnoDB层持锁相关的代码,莫非死锁(非事务死锁,而是latch死锁)了,但死锁怎么还能select呢。进一步打开oltp和oltp_simple两个screen的输出report,果然是oltp_simple正常,oltp的tps为0。为了调试方便,把oltp_simple停了。在此show processlist,发现10个线程齐刷刷地处于commit阶段。至此,通过mysql客户端似乎看不出什么了。

 

 按照正常的定位思路,这个时候应该先看下mysqld进程输出的error log,但阴差阳错,我并没有这么做。直接想到了上gdb,但多线程情况下gdb其实挺烦,你懂点。之前在看MongoDB存储引擎WiredTiger WAL日志性能优化文章(1,2 写到不错,推荐看看)的时候提到了一个工具,叫做穷人版profiler,打算试用下。简单过滤后,摘取的10个线程信息如下:

每行的第一列是拥有同样内容的线程个数。可以看到有8个线程在提交阶段等mutex latch,有一个线程在等rwlock latch,还有一个,他竟然在commit阶段sleep,在往后看,竟然是wait_for_free_space。理一理,在commit阶段flush_cache_to_file函数中在wait_for_free_space进行sleep,那么很显然,磁盘满了呗。直接用df -h看了下,数据盘果然满了。盘有100G,数据量才10G左右,咋会满。看了下数据目录,全是binlog文件。好吧,那应该是binlog过期没删。在MySQL客户端使用show variables like “%expire%”看下,发现该值为空啊,那就很显然了。这次问题是由于在MySQL主从复制环境下跑稳定性测试,没有设置binlog过期时间导致binlog堆积占满了数据盘,引起读写事务无法正常提交。 最后查看了而error log确认了下:

果然如此啊。那么执行set global expire_logs_days = 1设置binlog过期时间为一天,然后flush logs。迅速把磁盘空间降下来,再次show processlist,ok了!

 这是一个很简单的MySQL使用问题。作为一个有经验的MySQL研发或运维人员都能够快速定位。在此只是作为一个例子来说明穷人版profiler的使用方式。我觉得他使用gdb attach到进程后快速获取各个线程的调用栈信息后后迅速detach,并将调用栈信息按照层级快速合并汇总并统计处于同样调用栈的线程个数。这样有如下优点:

 1、attach后获取信息就快速detach,对MySQL进程影响较少,甚至在线上环境也能够使用。比靠人工操作高效很多;

 2、自动统计和整理调用栈信息,提供直观的信息和每个线程的函数调用关系,便以形成对问题的初步了解;对于简单的问题,直接可以通过函数调用关系来知道问题所在。

 3、当然,其还可以通过周期性多次采样,这样能够直观反映进程一段时间内的运行情况。

 其实类似的工具不止一个。比如pstack等也有类似功能。但不管如何,这是一个不错的工具。对于c/c++多线程开发的同学,一定还是有些用处的。最后,贴上该工具的脚本,非常简单易懂:

网易云免费体验馆,0成本体验20+款云产品! 

更多网易技术、产品、运营经验分享请点击。

相关文章:【推荐】 限时购校验小工具&dubbo异步调用实现限



推荐阅读
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 在深入掌握Spring框架的事务管理之前,了解其背后的数据库事务基础至关重要。Spring的事务管理功能虽然强大且灵活,但其核心依赖于数据库自身的事务处理机制。因此,熟悉数据库事务的基本概念和特性是必不可少的。这包括事务的ACID属性、隔离级别以及常见的事务管理策略等。通过这些基础知识的学习,可以更好地理解和应用Spring中的事务管理配置。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
author-avatar
你永远不冫会懂我的心O_751
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有