我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL优化案例的初步思路是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL优化案例的初步思路是什么

这期内容当中小编将会给大家带来有关MySQL优化案例的初步思路是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

今天想起这件同事处理的一个性能优化案例,当时虽然解决了,但是还是留下了几个未解的问题,和大家一起讨论一下。
首先,这个问题是根据反馈sql响应很慢,已经开始影响前端应用的登录了。稍后DBA介入,发现是由于CPU使用率过高导致,为了能够延缓问题和进一步分析,因为数据库中的数据量不大,直接就迁移到了另外一台配置不错的服务器上,但是迁移之后,CPU配置好了很多,问题依旧,同时也在进行问题的诊断和分析。
得到的慢日志如下,发现大多数的响应时间都耗费在了两个SQL上,其实出自同一个存储过程。
1、慢日志
# Profile
# Rank Query ID           Response time   Calls R/Call  V/M   Item
# ==== ================== =============== ===== ======= ===== ============
#    1 0x26EEFEA86049462C 7667.3733 44.3%   189 40.5681  6.88 CALL p_register_check_1021e
#    2 0x6D5C3CEFC40B5E28 7518.4182 43.5%   189 39.7800  6.10 UPDATE push_list_s

两个查询的统计信息如下:
# Query 1: 0.30 QPS, 12.15x concurrency, ID 0x26EEFEA86049462C at byte 976472

# This item is included in the report because it matches --limit.

# Scores: V/M = 6.88

# Time range: 2015-11-02 21:41:53 to 21:52:24

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count          3     189

# Exec time     44   7667s      1s     90s     41s     57s     17s     45s

# Query 2: 0.30 QPS, 11.92x concurrency, ID 0x6D5C3CEFC40B5E28 at byte 1397182

# This item is included in the report because it matches --limit.

# Scores: V/M = 6.10

# Time range: 2015-11-02 21:41:53 to 21:52:24

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count          3     189

# Exec time     43   7518s      1s     77s     40s     57s     16s     45s

# Lock time     30     65s    13us     19s   343ms    21us      2s    18us


相关的SQL语句如下

# Converted for EXPLAIN

# EXPLAIN

select  APNS_PUSH_ID = `ID` from push_list_s where  APNS_PUSH_ID =  NAME_CONST('i_apnsPushId',_utf8'eb43f3f09940de7228a780f69d05eab0a9df98083c701e23d11c7494a980b351' COLLATE 'utf8_general_ci')\G

涉及的表只有一个,表结构如下:

Create Table: CREATE TABLE `push_list_s` (

  `ID` int(10) NOT NULL AUTO_INCREMENT,

  `SN_LIST_ID` int(10) NOT NULL DEFAULT '0',

  。。。

  `APNS_PUSH_ID` varchar(64) CHARACTER SET latin1 NOT NULL DEFAULT '""',

 。。。

  PRIMARY KEY (`ID`),

  UNIQUE KEY `INDEX_SN_LIST_ID` (`SN_LIST_ID`),

  UNIQUE KEY `APNS_PUSH_ID` (`APNS_PUSH_ID`),

  KEY `INDEX_CABLE_PUSH_ID` (`CABLE_PUSH_ID`)

) ENGINE=InnoDB AUTO_INCREMENT=2181938 DEFAULT CHARSET=utf8


整个调用过程的要点如下,里面有一个update操作,字段APNS_PUSH_ID为varchar

     IF (LENGTH(i_apnsPushId)=64) THEN

        UPDATE push_list_s SET APNS_PUSH_ID = `ID` WHERE APNS_PUSH_ID = i_apnsPushId;

     END IF;

运行的语句类似下面的形式:
UPDATE push_list_s SET APNS_PUSH_ID = `ID` WHERE APNS_PUSH_ID =  'eb43f3f09940de7228a780f69d05eab0a9df98083c701e23d11c7494a980b351';
初步的分析怀疑是由于索引为字符过长导致,所以根据表的结构信息,其实就是转换到了数字类型的字段上。
修改后的部分如下:
IF (LENGTH(i_apnsPushId)=64) THEN

        select ID into v_id from  push_list_s WHERE APNS_PUSH_ID = i_apnsPushId;

        IF (v_id > 0) THEN

            UPDATE push_list_s SET APNS_PUSH_ID = v_id WHERE ID = v_id;

        END IF;

     END IF;

这是优化前后的对比效果图:

MySQL优化案例的初步思路是什么

目前对于这个问题的疑问如下:
1.对于字符型字段作为索引,目前来看没有很直接的原因使得字符型索引和数字型索引存在巨大的差别。从后来我单独得到的执行计划和华宁复现情况来看,没有发现存在很巨大的差别。
2.对于慢日志中得到的语句,看到内部已经做了转换。
UPDATE push_list_s SET APNS_PUSH_ID = `ID` WHERE APNS_PUSH_ID =  NAME_CONST('i_apnsPushId',_utf8'eb43f3f09940de7228a780f69d05eab0a9df98083c701e23d11c7494a980b351' COLLATE 'utf8_general_ci')\G
而对于这种转换,可能关注点都在NAME_CONST这个部分,在查看了一些资料之后,发现在其他版本和环境中,主要是和字符集转换有关,但是我查看了当前环境的这些配置信息,没有发现有相匹配的信息
3.关于这个问题,在5.1版本中发现了相应的bug描述,但是目前的环境是在5.6,所以应该也不是相关。
关于这个问题的进一步分析,我希望得到一些确切的信息,能够复现,能够找到一些相关的bug或者相关的解决方案(除了使用数字型字符临时替换的方案)

上述就是小编为大家分享的MySQL优化案例的初步思路是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL优化案例的初步思路是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL常见优化方案是什么

MySQL常见优化方案是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。sql优化的几个地方select [字段 优化1]:主要是覆盖索引from []where [条件 优
2023-06-26

亚马逊服务器网络优化方案是什么意思

负载均衡:亚马逊负载均衡是一种能够将多个服务器的流量分发到单个服务器上的技术。通过负载均衡,可以确保一个或多个服务器在处理用户请求时更加稳定和高效。缓存:缓存是一种将数据按需加载的技术,可以提高用户对网站的访问速度和效率。通过缓存,可以减少对服务器的请求次数,从而降低网络传输的压力。反向代理:反向代理是一种将客户端的请求转发到服务端的技术。通过反向代理,可以实现多台服务器之间的负载均衡和流量控制,...
2023-10-27

mysql中的优化器是什么

这篇文章主要讲解了“mysql中的优化器是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中的优化器是什么”吧!说明1、分析器生成的语法树被认为是合法的,由优化器转化为执行计划。
2023-06-20

mysql重新初始化的方法是什么

要重新初始化MySQL,可以按照以下步骤操作:停止MySQL服务:可以使用以下命令停止MySQL服务:sudo service mysql stop删除MySQL数据目录:可以使用以下命令删除MySQL数据目录(请注意,此操作会删除所有数据
mysql重新初始化的方法是什么
2024-04-09

oracle优化sql语句的步骤是什么

优化Oracle SQL语句的步骤如下:分析查询性能问题:首先要确定哪些SQL语句需要优化,通过Oracle的性能监视工具(如SQL Trace、SQL Monitor等)或者查询执行计划(EXPLAIN PLAN)来分析查询性能问题。优
oracle优化sql语句的步骤是什么
2024-03-13

mysql oom优化的方法是什么

OOM(Out of Memory)是指MySQL在执行过程中耗尽了服务器的内存资源,导致MySQL服务异常退出。为了解决OOM问题,可以尝试以下优化方法:调整MySQL的配置参数,如innodb_buffer_pool_size、inno
mysql oom优化的方法是什么
2024-04-12

mysql初始化数据库的方法是什么

要初始化一个数据库,可以通过以下步骤:登录MySQL数据库服务器,可以使用如下命令:mysql -u root -p输入密码以登录数据库服务器。创建一个新的数据库,可以使用如下命令:CREATE DATABASE dbname;这里的dbn
mysql初始化数据库的方法是什么
2024-05-06

hive连接mysql初始化的方法是什么

在Hive中连接MySQL需要进行以下初始化步骤:1、首先,需要在Hive的配置文件hive-site.xml中配置MySQL的连接属性。可以使用以下命令创建一个名为hive-site.xml的配置文件:cp /etc/hive/con
hive连接mysql初始化的方法是什么
2024-04-09

win7系统优化设置的步骤是什么

以下是Windows 7系统优化设置的一般步骤:1. 清理磁盘:打开“我的电脑”,右击系统盘(通常是C盘),选择“属性”,在“常规”选项卡下点击“磁盘清理”,勾选需要清理的项目,然后点击“确定”来进行磁盘清理。2. 禁用自启动程序:打开任务
2023-09-11

mysql索引优化的原则是什么

MySQL索引优化的原则包括以下几点:选择合适的索引类型:MySQL支持多种索引类型,包括B-Tree索引、哈希索引和全文索引等。根据查询的特点和数据的特性选择合适的索引类型。选择合适的索引列:选择经常被查询的列作为索引列,可以加快查询的速
mysql索引优化的原则是什么
2023-10-28

编程热搜

目录