1.5 query_cache_size (1)简介: 查询缓存简称QC,使用查询缓冲,mysql将查询结果存放在缓冲区中,今后对于同样的select语句(区分大小写),将直接从缓冲区中读取结果。 一个sql查询如果以select开头,那么mysql服务器将尝试对其使用查询缓存。 (2)判断依据 mysql> show status like "%Qcache%"; +-------------------------+---------+ | Variable_name (3)配置示例 mysql> show variables like '%query_cache%' ; +------------------------------+---------+ | Variable_name query_cache_wlock_invalidate | OFF | +------------------------------+---------+ 6 rows in set (0.00 sec) mysql
. ---- 执行优化 [root@opti-slave hunter]# time nohup mysql -u root -p < optimize.sql 2>&1 >> optim.log nohup: redirecting stderr to stdout Enter password: 输入密码后,就开始了优化过程 可以另开一个终端进行监视 [root@opti-slave hunter 也可以使用 show processlist 在数据库里查看当前状态 mysql> show processlist; +----+------+-----------+------+--------- --+-----------------------------------------+-----------+---------------+ 2 rows in set (0.01 sec) mysql
,此时这些有问题的 SQL 语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化,本章将详细介绍在 MySQL 中优化 SQL 语句的方法。 ,包括线程的状态、是否锁表等,可以实时地查看 SQL 的执行情况,同时对一些锁表操作进行优化。 explain select * from tb_item where title = '阿尔卡特 (OT-979) 冰川白 联通3G手机3'; ? show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。 MySQL5.6提供了对SQL的跟踪trace, 通过trace文件能够进一步了解为什么优化器选择A计划, 而不是选择B计划。
[TOC] 0x00 MySQL优化案例 案例1:优化的起因网站运行缓慢 数据库优化关注点: 慢查询语句:show full processlist; 慢查询语句设置日志文件:long_query_time 0x01 多种优化方案 一个网站最先出现瓶颈的一定是数据库,然后是磁盘IO; Mysql 数据库优化建议: 1) 硬件优化 a. CPU选型:64位、8~16核 b. Mysql 编译优化 补充:x86的操作系统由于单进程内存最大4G,所以不管您加多大的内存空间它只使用那么多; 3) 配置文件优化 注意:my.cnf参数优化幅度较少,大部分以架构和SQL语句优化 ,都有拿到前端应用解决,禁止在数据库上处理; d.搜索功能like '%老男孩%',一般不要用MySQL数据库使用搜索应用sphinx; 5) 架构优化 1. ,不使用缓存测试: select SQL_NO_CACHE * from uc_memeber where email='le1345'; MYSQL数据库使用索引的条件: MySQL(BTREE)
前言 调整下面3项参数配置可以起到很好的优化效果,简单实用。 1. innodb_buffer_pool_size = 25600M 注意: (1)如果值小于1GB,说明真的应该升级服务器了 (2)如果内存特别大,例如200gb,就不必给操作系统留 20% 了,因为OS用不了 40gb 3. innodb_buffer_pool_size为 25GB,那么合适的方案就是 25600M / 24 = 1.06GB innodb_buffer_pool_instances = 24 小结 希望这3个小建议可以对您有点帮助
MySQL in 太多出现慢的原因在MySQL中有一个配置参数eq_range_index_dive_limit,它的作用是一个等值查询(比如:in 查询),其等值条件数小于该配置参数,则查询成本分析使用扫描索引树的方式分析 使用扫描索引树的方式分析在MySQL内部叫做index dives,使用索引统计的方式分析在MySQL内部叫做index statistics。 eq_range_index_dive_limit 默认值是 200 .csharp复制代码select * from dogs where id in (1, 2, 3, 4);结合上面这条 SQL, 但是,它的缺点也很明显,由于无需扫描索引树,通过粗略统计索引使用情况,得出查询成本,导致 MySQL 可能选错执行计划,使得 SQL 查询性能下降。 的数量, 分批查询.csharp复制代码select * from dogs where id in (1, 2);csharp复制代码select * from dogs where id in (3,
---- 利用索引优化锁 为什么索引能优化锁 Innodb采用的行级锁,只有在修改行时才会对需要修改的行加锁。 但是这种情况只有在Innodb层过滤掉不需要的行是才有效。 所以利用索引可以过滤掉不需要的数据, 使用索引的话,仅需要锁定被索引检索出来的数据,而不是锁定全部数据,从而达到优化锁的目的。 > mysql> begin ; # Step3 开启事务 Query OK, 0 rows affected (0.00 sec) mysql> select * from actor HUMPHREY | WILLIS | 2006-02-15 04:34:33 | +----------+------------+-----------+---------------------+ 3 ------》可以看到索引对锁的优化后, 增加了并发,提高DB的性能 当然了,你要是会话二和会话一查询的都是统一批数据,比如都是WOOD,因为会话一未提交, 会话二肯定会被阻塞的。 这里简单提一下。
原文出处: Rich Barrett 译文出处:Linux中国/qhwdw 我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我推崇 80/20 原则,明确说就是通过简单的调整一些配置 在你对服务器进行优化之前,请做好数据库备份! 1、 使用 InnoDB 存储引擎 如果你还在使用 MyISAM 存储引擎,那么是时候转换到 InnoDB 了。 3、 让 InnoDB 多任务运行 如果服务器上的参数 innodb_buffer_pool_size 的配置是大于 1 GB,将根据参数 innodb_buffer_pool_instances 的设置 在修改了 my.cnf 文件后需要重启 MySQL 才能生效: sudo service mysql restart 还有更多更科学的方法来优化这些参数,但是这几点可以作为一个通用准则来应用,将使你的 MySQL 服务器性能更好。
我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我推崇 80/20 原则,明确说就是通过简单的调整一些配置,你可以压榨出高达 80% 的性能提升。 在你对服务器进行优化之前,请做好数据库备份! 1、 使用 InnoDB 存储引擎 如果你还在使用 MyISAM 存储引擎,那么是时候转换到 InnoDB 了。 * 3、 让 InnoDB 多任务运行 如果服务器上的参数 innodb_buffer_pool_size 的配置是大于 1 GB,将根据参数 innodb_buffer_pool_instances 在修改了 my.cnf 文件后需要重启 MySQL 才能生效: 12 sudo service mysql restart 还有更多更科学的方法来优化这些参数,但是这几点可以作为一个通用准则来应用,将使你的 MySQL 服务器性能更好。
如果你不改变 MySQL 的缺省配置,你的服务器的性能就像题图的坏在一档的法拉利一样 “虎落平阳被犬欺” … 我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我推崇 80/20 原则 2.在你对服务器进行优化之前,请做好数据库备份! 1、 使用 InnoDB 存储引擎 如果你还在使用 MyISAM 存储引擎,那么是时候转换到 InnoDB 了。 * 3. 在修改了 my.cnf 文件后需要重启 MySQL 才能生效: sudo service mysql restart 还有更多更科学的方法来优化这些参数,但是这几点可以作为一个通用准则来应用,将使你的 via: https://medium.com/@richb_/tuning-mysql-3-simple-tweaks-6356768f9b90
上期说完MSSQL的优化后,相信科技的力量让SQL优化更加简单深入人心,但如果你用的是MySQL,瞬间一种天堂到地狱的赶脚。咱们今天就说说磨练人心性的MySQL SQL优化。 所以早期的MySQL的优化心思不是 SQL的优化,是架构的优化,分库分表。 优化系列 1) 从 Universal 环球影城 到 国产数据库产品 营销 --驴唇对马嘴 3种方式 PG大版本升级 接锅,背锅,不甩锅 以客户为中心做产品 "PostgreSQL" 不重启机器就能调整 --TTL P-MySQL SQL优化案例,反观MySQL不死没有天理 MySQL 条件下推与排序优化实例--MySQL8.035 云数据库厂商除了卷技术,下一个阶段还可以卷什么? (译) MySQL 8 SQL 优化两则 ---常见问题 MySQL SQL优化快速定位案例 与 优化思维导图 "DBA 是个der" 吵出MySQL主键问题多种解决方案 MySQL 怎么让自己更高级-
InnoDB MyISAM 事务处理 支持 不支持 全文搜索 不支持 支持 SELECT ,UPDATE,INSERT,DELETE 大量INSERT或UPDATE | DELETE 表一行一行的删除 大量SELECTDELETE | DELETE表先DROP再重建 AUTO_INCREMENT 自增计数器仅存储在主内存中 锁 表锁,行级锁 表锁 外键 支持 不支持 行数 扫描表来计算 保存行数 存储 把数据和索引存放在表空间里面 表被存放在三个文件 跨平台 跨平台可直接拷贝使用 跨平台很难直接拷贝 压
索引:(Index) 是帮助mysql高效获取数据的 数据结构 1. 索引目的在于提高查询效率,可以类比字典 2. 可以简单理解为"排好序的快速查询数据结构" 3. MySQL允许最大的进程连接数, 2. 每个主机的连接请求异常中断的最大次数, 3. 设置表高速缓存的数目, 4. 关注事务 Explain + SQL语句 多表: 索引创建:left 连接 在右表创建索引 right 连接在左表建立索引 3、sql语句优化: 多表: 索引创建:left 连接 在右表创建索引 查询优化: 1. 3. order by group by 优化 慢查询日志:
为什么优化 为了获得成就感? 为了证实比系统设计者更懂数据库? 为了从优化成果来证实优化者更有价值? no 但通常事实证实的结果往往会和您期待相反! 优化有风险,涉足需谨慎! 优化风险 1 . 3 . 对于优化来说解决问题而带来的问题控制在可接受的范围内才是有成果。 4 . 保持现状或出现更差的情况都是失败! 5 . 稳定性和业务可持续性通常比性能更重要! 6 . CPU us高 IO很低 ,MySQL 不在做增删改查,有可能是存储过程,函数,排序,分组,多表连接 3. Wait,SYS 高 , IO低:IO出问题了,锁等待过多的几率比较大. 这个阶段,需要我们DBA深入业务,或者要和开发人员\业务人员配合实现 优化,最根本的是"优化"人; Mysql参数优化测试(8c32g) 服务器配置 image.png image.png time 推荐设置为3 read_buffer_size = 1M MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。
15 MySQL优化 数据库性能优化看起来只牵扯到数据库,但其实范围涉及极广,从计算机和网络硬件到操作系统,网络设计到安全,从各种软件再到数据库本身,性能优化从来都不是单一的,而是一个整体。 在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已。 read_rnd_buffer_size:# 随机读取缓存 key_buffer_size:# 索引缓存 thread_cache_size:# (1G—>8, 2G—>16, 3G—>32, >3G 32G内存以上100M SQL优化 1. 选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。 3. 使用联合(UNION)来代替手动创建的临时表 MySQL从4.0的版本开始支持union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。
如,int类型存储时间类型,bigint类型转ip函数 (3)使用合理的字段属性长度,固定长度的表会更快。 2.显示系统变量 mysql> SHOW VARIABLES LIKE '%Variables_name%'; 3.显示InnoDB存储引擎的状态 mysql> SHOW ENGINE INNODB STATUS 看到这个的时候,查询就需要优化了 -Using temporary 使用了临时表。看到这个的时候,也需要优化 (3)PROFILING分析SQL语句 1.开启profile。 包括执行状态、是否锁表等 mysql> SHOW processlist; (4)PROCEDURE ANALYSE()取得建议 通过分析select查询结果对现有的表的每一列给出优化的建议 mysql ; 五、定位慢查询 MySQL慢查询 六、分区 MySQL分区和分表 七、配置优化 MySQL配置优化
上篇文章是关于mysql优化的,那个内容是我大学的时候学习的笔记,最近学习发现一些比较好的内容,在这里分享给大家。 版权源于网上。 工作中使用最多的就是MySQL, 但是mysql的优化也就是通过建索引以及缓存数据来优化的。使用explain比较多。对于其他的优化技能没有使用过。 ? 1、硬件层相关优化 请一个DBA团队优化,还没有全部把机械硬盘换成ssd来的快。所以,底层硬件也是很重要的。 千万别用ext3;ext4勉强可用,但业务量很大的话,则一定要用xfs; 3、文件系统mount参数中增加:noatime, nodiratime, nobarrier几个选项(nobarrier是xfs MySQL层相关优化 3.1、关于版本选择 官方版本我们称为ORACLE MySQL,这个没什么好说的,相信绝大多数人会选择它。
SQL优化发生在业务量达到一定规模的时候 目的是优化SQL的执行效率 MySQL 优化 优化范围 硬件资源 操作系统参数,数据库参数配置 SQL语句,索引优化 SQL优化 数据库设计优化【规范,前期设计 select id from t where num=20 in 和 not in 也要慎用,否则会导致全表扫描 select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3 应尽量避免在 where 子句中对字段进行表达式操作 num=100*2 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描 select id from t where substring(name,1,3) 索引目的 提高查询效率 【类比字典和借书】 如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。
深度应用者则着眼于从改进Mysql软件自身层面,或者开发另外的数据库引擎和硬件应用来拓展Mysql的生态系统。 数据库层面优化 影响数据库应用性能的最重要因素其设计的合理性: 表的结构是否合适? 如果基础的优化指引无法解决性能问题,则可以通过执行计划调整索引,查询条件,联合条件等(执行计划优先)。 调整MySQL缓存使用的内存大小及属性。 IS NULL 优化 MySQL对col_name IS NULL 的优化和对col_name = constant_value的优化方式一样。 MySQL也可以优化类似col_name = expr OR col_name IS NULL这样的组合。这种形式通常见于子查询。 > const GROUP BY c1, c2, c3; 此种情况下,适用GROUP BY 的优化也适用于DISTINCT。
为什么优化 为了获得成就感? 为了证实比系统设计者更懂数据库? 为了从优化成果来证实优化者更有价值? no 但通常事实证实的结果往往会和您期待相反! 优化有风险,涉足需谨慎! 优化风险 1 . 3 . 对于优化来说解决问题而带来的问题控制在可接受的范围内才是有成果。 4 . 保持现状或出现更差的情况都是失败! 5 . 稳定性和业务可持续性通常比性能更重要! 6 . CPU us高 IO很低 ,MySQL 不在做增删改查,有可能是存储过程,函数,排序,分组,多表连接 3. Wait,SYS 高 , IO低:IO出问题了,锁等待过多的几率比较大. 避免业务逻辑错误,避免锁争用.这个阶段,需要我们DBA深入业务,或者要和开发人员\业务人员配合实现优化,最根本的是"优化"人; Mysql参数优化测试(8c32g) 服务器配置 time用于计时 dd 推荐设置为3 read_buffer_size = 1M MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。