【IT168 技术】2012年11月9日-10日,第二届“Oracle技术嘉年华”将在北京国宾酒店隆重举行,届时国内外数据库界大师将齐聚北京,为大家奉上两天的技术“大餐”!本届大会是由ACOUG、ITPUB、IT168和云和恩墨共同主办的,会议主题为“数据库技术企业应用非常好的实践”。
本届大会共包括1个主会场和6个分会场,其中6个分会场的主题分别是:数据库优化应用及非常好的实践、甲方运维经验、非常好的实践及技巧分享、数据云融合非常好的实践、MySQL数据库优化应用及非常好的实践、数据库安全防护及优化方法论和数据整合及云平台架构。
今天MySQL数据库优化应用专场首先出场的是来自中国平安的技术运维总监简朝阳先生。这次会议他带来的主题是如何在硬件资源上进行MySQL数据库调优。简朝阳先生在谈到基于硬件来进行数据库性能瓶颈分析的时候,表示不是使用更为强劲的主机或者存储来替换现有的设备就能够打破瓶颈,而是要去分析到底是硬件的哪块短板造成了数据库的性能瓶颈。
简朝阳先生
他表示在谈论基于硬件进行优化的时候,不能仅仅将数据库使用的硬件划分为主机和存储两部分,而是需要进一步对硬件进行更细的分解,至少也应该分解到如下范畴:主机的CPU、内存、磁盘、Raid卡、电池等一系列东西。比如说CPU仅仅只能决定运算速度,及时是运算速度都还取决于与内存之间的总线带宽以及内存本身的速度;内存大小决定了所能缓存的数据量,主要决定了热点数据的访问速度;磁盘的转速决定了你每一次IO请求的延时时间,也就是决定了我们常说的IOPS和MBPS。硬件角度所能提供的处理能力,一定是上面所列的多个方面(这里仅仅只是主要部分,可能还有其他)共同决定的整体能力,任何一个方面出现瓶颈,都能导致整体性能上不去,也就是我们常说的木桶原理。
${PageNumber}接下来简朝阳先生主要描述了cpu方面的问题。简朝阳先生表示当 CPU 方面资源遇到瓶颈的时候,主要表现在服务器CPU利用率中 usr 所占比例很高,iowait却很小。这类问题大多出现在数据量并不是太大,同时又有足够内存来对数据进行缓存的应用场景。同时也是目前大多数中小网站所面临的数据库性能瓶颈。
同时简朝阳先生指出提高CPU性能问题可以概括为三点:
1、降低逻辑运算量
①避免使用函数:将运算转移至易于扩展的应用服务器中如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数
②减少排序:利用索引取得有序数据或避免不必要排序如 union all代替 union,order by 索引字段等
③禁止类型转换:使用合适类型并保持传入参数类型与数据库字段类型绝对一致如数字就是用tinyint/int/bigint等,必需转换的在传入数据库之前就在应用中转好
④简单类型:尽量避免使用复杂类型,降低由于复杂类型带来的附加运算
2、减少逻辑IO量
①Index:优化索引,减少不必要的表扫描如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里
②Table:合理拆分,适度冗余如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里
③SQL:调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他运算如减少复杂Join,减少order by,尽量union all,避免子查询等,更多详见这里
④合理数据类型:够用就好,减少不必要的一味使用大字段如 tinyint够用就别总是int,int够用也别老bigint,date够用也别总是替mestamp
3、减少请求量
①适当缓存:对静态并被频繁请求的数据进行适当的缓存如用户信息,商品信息等等
②优化实现:尽量去除不必要的重复请求如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等
③合理需求:评估需求产出比,对于产出比极端低下的需求合理去除