MySql 性能调优
文章平均质量分 67
MySql 性能调优
雅冰石
DBA
展开
-
mysql怎样优化count(*) from 表名 where …… or ……这种慢sql
线上发现一条类似这样的慢sql(查询时长8s):from t15;t14的id和id2字段上都有索引,但是因为条件里有or,导致走的是全表扫描:如果没用count(*),而是select 字段这种方式,那可以用union这种方式替代or,但这里是count(),则有些不同。原创 2024-09-18 16:46:56 · 466 阅读 · 0 评论 -
mysql性能分析工具之tuning-primer
tuning-primer是mysql的一个优化工具,针于mysql的整体进行一个体检,对潜在的问题,给出优化的建议。将上述页面的内容粘贴进来。转载 2023-03-31 15:18:36 · 209 阅读 · 0 评论 -
mysql性能分析工具-mysqltuner
mysqltuner是mysql一个常用的数据库性能诊断工具,主要检查参数设置的合理性包括日志文件、存储引擎、安全建议及性能分析。针对潜在的问题,给出改进的建议,是mysql优化的好帮手。转载 2023-03-31 14:54:29 · 654 阅读 · 0 评论 -
mysql怎样快速定位当前比较耗费cpu的sql
-这里一次展示不全,分两次截的图。转载 2023-03-31 10:37:36 · 2249 阅读 · 0 评论 -
mysql OPTIMIZER特性之DERIVED_MERGE
derived table中文译为派生表,关于派生表的含义,翻阅了MySQL的官方手册,并没有找到相对应的解释,不过在SQL92标准中有对它进行定义,原文如下解释为:派生表为直接或者间接的通过一个查询表达式从一个或者多个表中得到的表。某种意义上来讲,MySQL中的视图也是派生表。举个例子:在如下SQL语句中,表A即为派生表。derived_merge指的是一种查询优化技术,作用就是把派生表合并到外部的查询中,提高数据检索的效率。转载 2023-03-30 16:12:20 · 1015 阅读 · 1 评论 -
mysql慢sql分析工具OPTIMIZER_TRACE
我们在日常维护数据库的时候,如果遇到慢语句查询的时候,我们一般会怎么做?执行EXPLAIN去查看它的执行计划?是的。我们经常会这么做,然后看到执行计划展示给我们的一些信息,告诉我们MySQL是如何执行语句的。BUT,执行计划往往只给我们带来了最基础的分析信息,比如是否有使用索引,还有一些其他供我们分析的信息,比如使用了临时表、排序等等。我们能从这些信息里面找一些优化点,这样就足够了吗?看看这张图里的执行计划,我们可以提很多问题:为什么t2表上明明使用了索引在Extra列中还是能看到temp转载 2023-03-30 11:13:36 · 587 阅读 · 0 评论 -
安装与使用sqladvisor
SQLAdvisor是由美团点评公司开发维护的一个分析SQL给出索引优化建议的工具。它基于MySQL原生态词法解析,结合分析SQL中的where条件、聚合条件、多表Join关系 给出索引优化建议。目前SQLAdvisor在美团点评内部广泛应用。原创 2023-03-26 17:43:38 · 882 阅读 · 0 评论 -
MySQL创建分区表,并按天自动分区
#创建测试数据库create database csl_test character set utf8 collate utf8_unicode_ci;#创建测试表注:要分区的字段 需要为主键。use csl_test; # 切换到刚刚创建的测试数据库create table t_partition_test ( pk_id bigint(20) not null auto_increment, time datetime not null, msg varchar(2...转载 2022-04-14 13:53:48 · 7357 阅读 · 0 评论 -
慢查询优化案例之将子查询替换为临时表再与其他表进行表关联
一 问题描述有个这样的慢查询,执行需要1.8秒,且该慢查询在另一个慢查询中被调用了几十次,执行长达200秒:SELECT ce.orgCode, ce.serialNum FROM clue ce...原创 2020-08-03 13:33:19 · 869 阅读 · 0 评论 -
Mysql慢sql优化案例之使用force index改变执行计划
一 问题描述生产有个这样的慢sql:SELECT ua.id AS "id", ua.appid AS "appid", ua.user_id AS "userId", ua.create_time AS "createTime", ua.deptid AS "deptid", ua.group_id AS "groupId", ua.sort AS "sort", ac.app_name AS "appName", ac.a...原创 2020-06-04 13:24:01 · 691 阅读 · 0 评论 -
Mysql慢sql优化案例
一 问题描述生产有一个这样的慢sql:SELECT DISTINCT m1.meetingid AS meetingid, m1.starttime AS START, m1.endtime AS END,m1.title AS title,j.userid AS uid,j.type AS TYPE,m1.cuserid AS cuseridFROM MEETINGINFO m1 INNER JOIN JOININFO j ON (m1...原创 2020-06-04 10:39:49 · 611 阅读 · 0 评论 -
Mysql sql优化案例之表关联字段字符集不同导致被驱动表无法走索引
一 问题描述发现生产有这样一个慢查询:SELECT t.*, u.user_truename AS usernameFROM cms_template_flow t LEFT JOIN sys_user u ON t.create_user_id = u.user_idWHERE t.wid = 'WS598636079746125824' AND t.is_published = 1ORDER BY t.sortnum DESC查询需要执行...原创 2020-06-03 10:09:24 · 1031 阅读 · 0 评论 -
mysql left join执行异常缓慢优化案例
一:问题描述 生产有这个这样的慢sql:SELECT * FROM ( SELECT ml.*, GROUP_CONCAT(sd. NAME) NAME,GROUP_CONCAT(sd.unit) unit,GROUP_CONCAT(sd.postsRank) postsRank FROM transfer tr LEFT JOIN clue ce ON ce.serialNum=tr.clueCode LEFT JOIN material ml ON ce.materi.原创 2020-05-21 15:06:33 · 1115 阅读 · 0 评论 -
mysql IS NOT NULL优化案例
一:问题描述今天一个开发同事反馈,一个sql执行得特别慢,让帮忙优化下。这个sql有5000多行。里面有很多重复的sql(只是查询条件不一样) left join。这里只摘出部分sql: SELECT ce.orgCode, ce.serialNum FROM clue ce LEFT JOIN clue pce ON pce.serialN...原创 2019-11-06 16:32:58 · 14323 阅读 · 8 评论 -
innotop监控mysql
参考:http://5iwww.blog.51cto.com/856039/570669 innotop的监控细节http://wenku.baidu.com/view/b71ed968af1ffc4ffe47ac2f.html innotop详解http://innotop.googlecode.com/svn/html/installing.htmlInnoTop是一个...转载 2016-01-22 17:07:19 · 1305 阅读 · 0 评论 -
MySQL · 引擎特性 · InnoDB 全文索引简介
前言从MySQL5.6版本开始支持InnoDB引擎的全文索引,语法层面上大多数兼容之前MyISAM的全文索引模式。所谓全文索引,是一种通过建立倒排索引,快速匹配文档的方式。MySQL支持三种模式的全文检索模式:自然语言模式(IN NATURAL LANGUAGE MODE),即通过MATCH AGAINST 传递某个特定的字符串来进行检索。布尔模式(IN BOOLEAN M转载 2016-10-08 09:53:54 · 7027 阅读 · 0 评论 -
MySQL的 data_free,表碎片整理
在MySQL中,我们经常会使用VARCHAR、TEXT、BLOB等可变长度的文本数据类型。不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作——MySQL数据表碎片整理。每当MySQL从你的列表中删除了一行内容,该段空间就会被留空。而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大。当MySQL对数据进行扫描时,它扫描的对象实际是列表的容量需转载 2016-11-30 12:39:01 · 18909 阅读 · 0 评论 -
MySQL5.6 PERFORMANCE_SCHEMA 说明
背景: MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。MySQL5.5默认是关闭的,需要手动开启,在配置文件里添加:[mysqld]performance_schema=ON转载 2016-12-06 14:33:57 · 866 阅读 · 0 评论 -
pt-duplicate-key-checker检查数据库的重复索引
pt-duplicate-key-checker这款工具也是percona-toolkit中一款非常适用的工具,它可以帮助你检测表中重复的索引或者主键。我们知道索引会更查询带来好处,但是过量的索引反而可能会使数据库的性能降低,这款工具可以帮助我们找到重复的索引并且还会给你删除重复索引的建议语句,非常好用。 首先看我的这张表的索引结构 mysql> show indexe转载 2017-02-28 18:55:23 · 921 阅读 · 0 评论 -
水平分库分表的关键步骤和技术难点
在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法。本篇中,我们将继续聊聊水平分库分表的一些技巧。分片技术的由来关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量、连接数、处理能力等都很有限,数据库本身的“有状态性”导致了它并不像Web和应用服务器那么容易扩展。在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技转载 2017-04-14 17:13:11 · 1247 阅读 · 0 评论 -
mysql Key_buffer_size参数的设置
在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数,下面就将对mysql Key_buffer_size参数的设置进行详细介绍,供您参考。下面一台以MyISAM为主要存储引擎服务器的配置:mysql> show variables like 'key_buffer_size';+-----------------+-----转载 2017-05-02 18:18:30 · 4228 阅读 · 0 评论 -
重复值较高的列上创建了索引导致cpu使用率较高问题处理
一 问题描述今天上午发现有台生产环境服务器的cpu使用率在30%~50%左右,分析了下早晨8点到估值时刻之间的慢查询日志。top1 SQL信息如下:执行计划如下:感觉post表的rows扫描条数比较多,有点可疑。看下该索引Cardinality,发现只有88,说明重复值比较高,不适合建索引。二 优化方法-改成强制不走该索引或删除该索引S...原创 2019-09-27 11:42:40 · 759 阅读 · 0 评论 -
频繁全表扫描导致cpu使用率飙升故障处理
一:问题描述今天早晨收到邮件告警,提示有台数据库服务器的cpu使用率在50%-70%间波动,有几个瞬间达到了90多。通过巡检数据库,发现有两处异常:① 故障期间的慢查询日志其中90%的慢查询来自于同一个sql:在半个小时内执行了2779次该sql。虽然sql单条执行不算很慢,只有2秒。但是执行次数太过频繁。查看执行计划,发现走了全表扫描,该表数据量有200万。相当于...原创 2019-09-29 10:48:51 · 1991 阅读 · 0 评论 -
MySQL5.6 InnoDB FULLTEXT Indexes研究测试
1.概要InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引。对于FULLTEXT索引的内容可以使用MATCH()…AGAINST语法进行查询。为了在InnoDB驱动的表中使用FULLTEXT索引MySQL5.6引入了一些新的配置选项和INFORMATION_SCHEMA表。比如,为了监视一个FULLTEXT索转载 2016-10-08 09:15:36 · 865 阅读 · 0 评论 -
MySQL查询计划 key_len介绍
本文首先介绍了MySQL的查询计划中ken_len的含义;然后介绍了key_len的计算方法;最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用。key_len的含义在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示:mysql> create table t(a int primary key, b int not nu转载 2016-10-25 16:06:02 · 5764 阅读 · 2 评论 -
[MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用
作/译者:叶金荣(imysql#imysql.com>),来源:http://imysql.com,欢迎转载。有一个表 tbl1 的结构如下:CREATE TABLE `tbl1` ( `id` int(10) unsigned NOT NULL auto_increment, `name` char(20) NOT NULL default '', PRIMARY KEY转载 2016-05-03 14:26:38 · 3599 阅读 · 0 评论 -
pt-query-digest查询日志分析工具
1. 工具简介pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分转载 2016-03-22 20:42:39 · 473 阅读 · 0 评论 -
MySQL怎样存储IP地址
首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗?其实做任何程序设计都要在功能实现的基础上最大限度的优化性能。而数据库设计是程序设计中不可忽略的一个重要部分,所以巧存IP地址可以一定程度获得很大提升。 利用函数算法处理在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int转载 2015-10-29 19:30:39 · 565 阅读 · 0 评论 -
InnoDB关键特性之doublewrite
部分写失效想象这么一个场景,当数据库正在从内存向磁盘写一个数据页时,数据库宕机,从而导致这个页只写了部分数据,这就是部分写失效,它会导致数据丢失。这时是无法通过重做日志恢复的,因为重做日志记录的是对页的物理修改,如果页本身已经损坏,重做日志也无能为力。两次写机制从上面分析我们知道,在部分写失效的情况下,我们在应用重做日志之前,需要原始页的一个副本,两次写就是为了解决这个问题转载 2016-03-06 22:34:04 · 2648 阅读 · 0 评论 -
MySQL的Innodb缓存相关优化
参考文献:http://www.yuandingit.com/document/technical/mysql/4247.html无论是对于哪一种数据库来说,缓存技术都是提高数据库性能的关键技术,物理磁盘的访问速度永 远都会与内存的访问速度永远都不是一个数量级的。通过缓存技术无论是在读还是写方面都可以大大提 高数据库整体性能。Innodb_buffer_po转载 2016-03-06 22:14:14 · 517 阅读 · 0 评论 -
关于Mysql的Qcache优化
query_cache_size = 64M指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:# > SHOW VARIABLES LIKE '%query_cache%';# > SHOW STATUS LIKE 'Qcache%';# 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;如果Qc转载 2015-10-29 17:32:26 · 4798 阅读 · 0 评论 -
mysql explain详细介绍
通过explain可以知道mysql是如何处理语句,分析出查询或是表结构的性能瓶颈。通过expalin可以得到:1. 表的读取顺序2.表的读取操作的操作类型3.哪些索引可以使用4. 哪些索引被实际使用5.表之间的引用6.每张表有多少行被优化器查询 explain显示字段 1. id :语句的执行顺序标转载 2015-06-14 17:54:25 · 2651 阅读 · 0 评论 -
table_open_cache
table_cache是一个非常重要的MySQL性能参数,它在5.1.3之后的版本中叫做table_open_cache。table_cache主要用于设置table高速缓存的数量。由于每个客户端连接都会至少访问一个表,因此此参数的值与<a title="max_connections – MySQL性能调优" target="_blank" href="http://www.kuqin.com/转载 2015-06-24 14:01:38 · 4461 阅读 · 0 评论 -
innodb buffer pool
InnoDB主索引是聚簇索引,索引与数据共用表空间,对于InnoDB而言,数据就是索引,索引就是数据。InnoDB缓存机制和MyISAM缓存机制的最大区别就是在于,InnoDB不仅仅是缓存索引,还会是缓存数据。与MyISAM相比,InnoDB缓存可以占用更多的服务器内存缓存InnoDB表的相关信息,提升InnoDB性能。 1、InnoDB缓存池 InnoDB缓存池(InnoD转载 2015-06-24 15:50:43 · 3833 阅读 · 0 评论 -
MySQL慢查询分析mysqldumpslow
mysqldumpslow命令/path/mysqldumpslow -s c -t 10 /database/mysql/slow-log这会输出记录次数最多的10条SQL语句,其中:-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;-t, 是top n的意思,即为返回前面多少转载 2016-04-22 15:50:39 · 7726 阅读 · 4 评论 -
mysql order by优化
一:优化原则原则1WHERE + ORDER BY的索引优化,形如:SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY[sort];建立一个联合索引(columnX,sort)来实现order by优化。注意复合索引字段的顺序。注意:如果columnX跟类似范围的查询原创 2016-07-22 16:48:51 · 820 阅读 · 0 评论 -
MySQL 加锁处理分析
1 背景 11.1 MVCC:Snapshot Read vs Current Read 21.2 Cluster Index:聚簇索引 31.3 2PL:Two-Phase Locking 31.4 Isolation Level 42 一条简单SQL的加转载 2016-07-13 16:14:09 · 599 阅读 · 0 评论 -
MySQL创建全文索引
使用索引是数据库性能优化的必备技能之一。在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX)。全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用「分词技术「等多种算法智能分析出文本文字中关键字词的频率及重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。在这里,我们就不追根究底其转载 2016-09-28 16:31:11 · 2153 阅读 · 2 评论 -
innodb insert buffer 插入缓冲区
今天在做一个大业务的数据删除时,看到下面的性能曲线图 在删除动作开始之后,insert buffer 大小增加到140。对于这些状态参数的说明InnoDB Insert Buffer插入缓冲,并不是缓存的一部分,而是物理页,对于非聚集索引的插入或更新操作,不是每一次直接插入索引页.而是先判断插入的非聚集索引页是否在缓冲池中.如果在,则直接插入,如转载 2016-09-08 15:49:55 · 3980 阅读 · 1 评论 -
Table does not support optimize, doing recreate + analyze instead
我删除了一部分数据:mysql> delete from pending_22 limit 1000;Query OK, 1000 rows affected (2.99 sec)但是delete是不会自动释放空间的,该表表空间大小仍然是之前的大小:30408704想通过optimize table来释放下空间:mysql> optimize table pending_2原创 2016-08-24 10:22:27 · 5724 阅读 · 1 评论