暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

sql优化简析

VFrog 2021-10-21
247



优化法则性能提升效果优化成本
减少数访问(减少磁盘访问)1~1000倍
返回更少数据(减少网络传输或磁盘访问)1~100倍
减少交互次数(减少网络传输)1~20倍
减少服务器CPU开销(减少CPU及内存开销)1~5倍
利用更多资源(增加CPU、内存等)1~10倍


1、优化MySQL的主要两个方向:硬件级别(Hardware Level)、数据库级别(Database Level)

2、硬件级别瓶颈包含几个方面

磁盘寻找:磁盘需要一段时间才能找到一段数据。对于现代磁盘来说,这种平均时间通常低于10ms,因此理论每秒100 次寻找。这一次用新的磁盘缓慢地改进,并且对于单个表是很难优化的。优化查找时间的方法是将数据分发到一个以上的磁盘上

磁盘读写:当磁盘处于正确位置时,需要读取或者写入数据使用现代磁盘,一个磁盘可以提供至少10到20Mb/s的吞吐量。这比磁盘寻找更容易优化,可以从多个磁盘并行读取。


CPU:当数据在主存储器中时,我们必须处理它以得到结果。与内存量相比,具有大数据库量的表时最常见的限制因素。但是对于小表来说,速度通常不是问题。


存储带宽:当CPU需要比CPU缓存中更多的数据时,主存储器带宽成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但也是一个需要注意的点


3、数据库级别:导致数据库应用最高效的因素是它的基本设计

结构是否正确:特别的是列是否具有正确的类型,和表中列的个数是否正确。例如:对于执行频繁更新的应用通常设计更多表,每个表的列并不多。而对于需要进行大量分析的应用通常设计更少的表,而每个表的列更多一些。


正确的设置索引达到查询高效:需要考虑的是什么SQL会导致索引无效,什么情况会让查询效率更高


对于不同情况选择不同的存储引擎:选择不同的存储引擎对性能和可伸缩性具有较大的影响


每张表是否具有适当的行格式:主要取决于适当的存储引擎。压缩表可以占用耕地的磁盘空间和更少的I/O操作。压缩表适用于innodb和myisam存储引擎。


应用程序是否使用适当的锁策略:在具有高并发、分布式应用程序中,选择适当的锁策略以保证数据的共享性和特定的情况下独占数据。innoDB存储引擎在不需要参与下能处理大部分锁问题,允许数据库实现更好的并发性,减少代码调优量。


所有缓存区域使用的大小是否都正确:配置的原则是缓存区域大到足以容纳所有频繁访问的数据,但又不能太大,否则导致过量占用物理内存而导致分页。一半情况下需要配置innoDB的缓冲池、myisam密钥缓存和MySQL的查询缓存。


4、优化可能带来的问题

优化不总是对于一个单纯的环境进行,还可能是一个复杂的已投产的系统。


优化手段本来就有很大的风险,只不过没能力意识到和预见到。


任何的技术可以解决一个问题,但必然存在带来一个问题的风险


对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果。

结论:保持现状或出现更差的情况都是失败


5、优化的需求

稳定性和业务可持续性,通常比性能更重要

优化不可避免涉及到变更,变更就有风险


优化使性能变好,维持和变差是等概率事件


切记优化,应该是各部门协同,共同参与的工作,任何单一部门都不能对数据库进行优化


6、优化由谁参与

进行数据库优化时,应由数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与


7、优化的顺序

优化选择:

优化成本:硬件>系统配置>数据库表结构>SQL及索引

优化效果:硬件<系统配置<数据库表结构<SQL及索引


8、常见优化工具

检查问题常用工具:

mysqladmin #mysql客户端,可进行管理操作

mysqlshow #功能强大的查看shell命令

show [session | global] variables    #查看数据库的参数信息

show [session | global] status       #查看数据库的状态信息

information_schema #获取元数据的方法¥

show engine  innodb status innodb    #引擎的所有状态

show processlist      #查看当前所有连接session状态

explain      #获取查询语句的执行计划

show  index      #查看表的索引信息

slow-log      #记录慢查询语句

mysqldumpslow      #分析slowlog 文件


不常用但好用的工具:

zabbix #监控主机、系统、数据库(部署zabbix监控平台)

pt-query-digest #分析慢日志

mysqlslap #分析慢日志

sysbench #压力测试工具

mysql  profiling #统计数据库整体状态工具

performance schema mysql  #性能状态统计的数据

workbench #管理、备份、监控、分析、优化工具(比较废资源)


文章转载自VFrog,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论