开发者社区 > 数据库 > 关系型数据库 > 正文

【RDS】RDS MySQL该如何查看消耗内存高的事件和线程?

已解决

RDS MySQL该如何查看消耗内存高的事件和线程?

展开
收起
云上猫猫 2022-01-13 17:33:17 1093 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    内存是重要的性能参数,内存使用率过高会导致系统响应速度变慢,严重时内存会耗尽,实例会进行主备切换,导致业务中断。因此我们需要在内存异常升高时及时排查问题,避免影响业务。

    1、登录RDS管理控制台,在页面左上角,选择实例所在地域。156471003936543_zh-CN.png

    2、找到目标实例,单击实例ID。在左侧导航栏中单击 参数设置。

    3、将performance_schema参数值修改为ON,如果已经为ON请忽略此步骤。

    提示:该操作会重启实例,造成连接中断,重启前请做好业务安排,谨慎操作。

    a、单击performance_schema参数右侧的修改按钮,将值修改为ON,然后单击 确定。156471003953729_zh-CN.png

    b、单击页面右上角 提交参数,等待实例重启完成即可。156471003953729_zh-CN.png

    4、使用DMS或客户端连接MySQL实例,依次执行如下SQL语句,打开内存监控。

    update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%';
    select * from performance_schema.setup_instruments where name like 'memory%innodb%' limit 5;
    

    注:该命令是在线打开内存统计,所以只会统计打开后新增的内存对象,打开前的内存对象不会统计,建议您打开后等待一段时间再执行后续步骤,便于找出内存使用高的线程。

    5、您可以参考如下SQL语句统计事件和线程的内存消耗量,并进行排序展示。

    a、统计事件消耗内存。

    select event_name,
           SUM_NUMBER_OF_BYTES_ALLOC
    from performance_schema.memory_summary_global_by_event_name
    order by SUM_NUMBER_OF_BYTES_ALLOC desc
    LIMIT 10;
    

    系统显示类似如下。

    1.png

    b、统计线程消耗内存。

    select thread_id,
           event_name,
           SUM_NUMBER_OF_BYTES_ALLOC
    from performance_schema.memory_summary_by_thread_by_event_name
    order by SUM_NUMBER_OF_BYTES_ALLOC desc
    limit 20;
    

    系统显示类似如下。 2.png

    6、找到问题事件或线程后,您可以排查业务代码和环境,解决内存高的问题。

    2022-01-13 17:46:46
    赞同 展开评论 打赏

阿里云关系型数据库主要有以下几种:RDS MySQL版、RDS PostgreSQL 版、RDS SQL Server 版、PolarDB MySQL版、PolarDB PostgreSQL 版、PolarDB分布式版 。

相关产品

  • 云数据库 RDS MySQL 版
  • 云数据库 RDS
  • 相关电子书

    更多
    One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
    One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
    如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

    相关镜像