性能的定义为完成某件任务所需要的时间(任务执行时间+等待时间)。如果把性能优化仅仅看成是提升每秒查询量,这其实只是吞吐量优化。
掌握面向响应时间的优化方法,需要不断地对系统进行性能剖析(profiling)。
「轻量级」 性能剖析,比如为所有的sql语句计时,加上脚本总时间统计。如果流量趋势比较稳定,随机采样也可以。
<?php
profiling_enabled = rand(0, 100) > 99;
测量PHP应用程序
new Relic、xhprof
慢查询日志分析工具 pt-query-digest
pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。
3.3.2 剖析单条查询
show status、show profile(未来可能被 performance schema 取代)、慢查询日志
mysql 5.6 三个基本库mysql 、information_schema、performace_schema。
XtraDB是InnoDB存储引擎本身拆分出了一个分支的更新的存储引擎。
MariaDB、Percona Server 是mysql分支。
3.4 诊断间歇性问题
第4章 Schema 与数据类型优化,数据库设计
4.1.1 整数类型
INT(1)和INT(20),对于存储和计算来说是一样的,只是规定了一些交互工具的显示字符个数。
tiny, small, medium, int, big 分别占1(8位)、2、3、4、8个字节。
4.1.3 字符串类型
char 非常适合存储密码的md5值,因为这是一个定长的值。对于经常变更的数据,char类型更不容易产生碎片。对于非常短的列,例如用char(1)存储只有Y和N的值,如果采用单字节字符集,只需要一个字节,但是varhar却要两个字节,因为还有一个记录长度的额外自己。记录字符串长度定义不是字节数,是字符数。
varchar(5)和varchar(200)存储’hello’的空间开销是一样的。在用临时表进行排序是,更长的列会消耗更多的内存。
show table status where Name='user';
5.2 索引的优点
常见的B-Tree索引,按照顺序存储数据,所以mysql可以用来做ORDER BY 和 GROUP BY操作。
大大减少的服务器需要扫描的数据量。
所以可以帮忙服务器避免排序和临时表。
索引可以把随机 I/O 变为顺序 I/O。
5.3 高性能的索引策略
5.3.1 独立的列:索引列不能是表达式的一部分,也不能是函数的参数。
5.3.2 前缀索引和索引选择性
索引的选择性是指,不重复的索引值和数据表的记录总数的比值。
选择合适的前缀长度
select count(distinct left(city,3))/count(*) as sel3,
count(distinct left(city,4))/count(*) as sel4,
前缀索引是一种能使索引更小、更快的有效方法,但缺点是:MySQL无法使用前缀索引做 ORDER BY 和 GROUP BY,也无法做覆盖扫描。
5.3.3 多列索引
网友评论