mysql 定时任务 性能影响_MySQL慢查询性能优化

本文详细介绍了如何对MySQL定时任务中的慢查询进行性能优化,包括通过任务拆分、性能剖析、使用Explain、OptimizerTrace和Profiling等工具进行问题定位,并提供了一个实际案例分析,揭示了优化方案,如优化索引以减少回表行数。
摘要由CSDN通过智能技术生成

思想

所有任务的响应时间上的性能优化,基本上都可以通过以下步骤完成:

将任务划分为多个子任务

性能剖析: 测量和分析时间花费在哪里

测量子任务所花费的时间

对结果进行统计和排序

将重要的任务排在前面

原因: 推断系统运行的方式,找出慢的原因

优化: 针对该原因进行改良

工具

Explain

OptimizerTrace

Profiling

示例数据和语句

Create Table: CREATE TABLE `record` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`uid` int(11) NOT NULL COMMENT '用户',

`purse_type` int(8) NOT NULL DEFAULT '0' COMMENT '货币类型',

`order_id` varchar(32) NOT NULL DEFAULT '' COMMENT '订单id',

`order_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '操作类型',

`profit` int(11) NOT NULL DEFAULT '0' COMMENT '金额',

`source` varchar(32) NOT NULL DEFAULT '' COMMENT '业务来源',

`status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',

`excuse` varchar(32) NOT NULL DEFAULT '' COMMENT '描述',

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

PRIMARY KEY (`id`),

UNIQUE KEY `uniq_purse_type_order_id` (`purse_type`,`order_id`),

KEY `index_uid_purse_order_type_status_create` (`uid`,`purse_type`,`order_type`,`status`,`create_time`),

KEY `ix_create_time` (`create_time`)

) ENGINE=InnoDB AUTO_INCREMENT=7341596 DEFAULT CHARSET=utf8mb4

语句:select sum(profit) as total from record where uid=1800138860 AND purse_type=1 AND status in (10,20,100) AND source in (1016)

步骤

我们通过两个维度对查询进行分析:逻辑维度和微观维度,来定位性能原因

假设我们已经通过trace确认了就是数据库慢,记录要分析的数据库表结构和语句

找出慢查询语句:慢查询日志或者trace系统

分析慢查询日志的执行计划

通过explain语句的输出判断分析的执行计划是否符合预期

通过optimizer_trace语句分析执行计划

在逻辑维度上

我们按照执行计划将查询划分成多个子任务,构造连续子任务的语句,启动profiling,依次执行,记录时间,注意Buffer对执行时间的影响

作表:记录子任务和耗时以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值