《Mysql平台优化.ppt》由会员分享,可在线阅读,更多相关《Mysql平台优化.ppt(24页珍藏版)》请在三一办公上搜索。
1、Mysql优化,linux平台,Linux 下Mysql优化,需求 监控/分析 解决 总结,需求,从应用提需求的时候就要开始优化1 table engine的选择2 表结构,Table Engine 选择,table engine:Myisam Innodb一般情况下我们只用到上述两种table engine事务支持=Innodb并发读写=Innodb其他情况=Myisam,表结构,Myisam空间换速度?Row_format=Fixed不用varchar,用char不用text,blob,表结构,Innodb情况与Mysiam正好相反,空间=速度用varchar,不用charprimary
2、key很重要,尽量缩短它的长度.,监控,OS 级别(vmstat,iostat,top等等)slow query logshow status,show processlist,show innodb statusprofiling(mysql 5.0+)explain sql其他工具,如cacti,监控 os 级别,vmstat-S M 3,监控 os 级别,iostat-dkx 3,监控 slow log,#Time:090220 15:28:45#UserHost:dbuserdbuser 192.168.0.1#Query_time:11 Lock_time:0 Rows_sent:0
3、 Rows_examined:0delete from data_stat where pkey IN(0013a96190db,00e04d0706f8,00e04d0710b0,00e04d074a41,5JT46KT7,PFD210S2C2UVJE);,监控 slow log,几个slow log 分析工具mysqldumpslow-mysql 自带mysqlsla-据说不错mysql-explain-slow-logmysql-log-filtermyprofi,监控 show status/processlist,show global status 关注key hit ratio,
4、qcache hit ratio,lock,show query,innodb buffer hit ratio,innodb data/log write/readshow processlist 关注异常状态的查询,或者耗时长的查询show innodb status 关注log flush状态,锁状态,事务状态,内存分配消耗,监控 show status/processlist,show innodb status 显示不全?启用innodb_monitor:CREATE TABLE innodb_monitor(a INT)ENGINE=INNODB;相关信息会输出到.err日志文件
5、停止innodb_monitor:DROP TABLE innodb_monitor;,Profiling Mysql(5.0+),要使用profiling,在编译的时候加入-enable-profiling,然后打开profile功能.mysqSET profiling=1;执行一条语句看看mysql select*from user_xxx limit 1000;+-+-+-+|a|b|c|+-+-+-+|22494895|3|3|32781498|3|1|36392153|3|1|31142213|3|2|12447081|1|1|刚才执行的语句的profile已经被记录下来了.mysq
6、l show profiles;+-+-+-+|Query_ID|Duration|Query|+-+-+-+|1|0.00005900|select*from user_xxx limit 1000|+-+-+-+还可以看cpu,io这些详细的情况.mysql show profile cpu,block io for query 1;+-+-+-+-+-+-+|Status|Duration|CPU_user|CPU_system|Block_ops_in|Block_ops_out|+-+-+-+-+-+-+|starting|0.000017|0.001000|0.000000|0|0
7、|checking query cache for query|0.000007|0.000000|0.000000|0|0|checking privileges on cached|0.000004|0.000000|0.000000|0|0|sending cached result to clien|0.000018|0.000000|0.000000|0|0|logging slow query|0.000002|0.000000|0.000000|0|0|cleaning up|0.000011|0.000000|0.000000|0|0|+-+-+-+-+-+-+,explain
8、 sql,表的读取顺序可能用到哪些索引,实际用了哪些索引查询优化器从每个表中预计读取的记录数(rows)其他额外信息,尽量避免Using filesort/Using temporary,其他工具,用工具生产监控图,如cacti,解决,硬件CPU,内存,磁盘,网络软件kernel(简洁的kernel,sysctl参数,IO策略)Mysql(编译参数,版本,patch)文件系统程序架构,硬件,升级硬件,立竿见影更快cpu更大内存更快磁盘/阵列应用服务器跟数据库服务器在同一内网,至少采用千兆以太网互联.升级bios,阵列卡firmware.,软件,kernel使用更稳定更高效的版本编译最小化ker
9、nel,不用的module一律去掉.sysctl调整参数IO策略 title Red Hat Enterprise Linux AS(2.6.28.8)root(hd0,0)kernel/boot/vmlinuz-2.6.28.8 ro root=LABEL=/elevator=deadline,软件,Mysql编译优化,采用静态编译,专用编译器等http:/通常新版本效率不如旧版本,但是可以利用新版本带来的新功能来提升系统性能.第三方发布的patch如google mysql patch,percona patch:http:/http:/,软件,Mysql4.参数调整Key Buffer=
10、Myisam 索引缓存Query Cache=查询结果缓存Sort/read/join Buffer=排序/全表扫描/连表缓存Slow Query=记录执行时间长的查询tmpdir=可以放在tmpfs上innodb_buffer_pool_size=innodb 最重要设置,软件,文件系统 个人推荐使用XFS,比古老的ext3提供更好的性能.另外,ZFS可以提供文件系统级别的raid,snapshot,文件系统CRC等等功能,可惜由于授权原因,暂时在linux上还看不到.,程序架构,垂直/水平切分服务器/数据库,表Mysql复制,实现读写分离更新频繁的表可以采用内存表用统计表定时保存统计结果,而不是在大表上直接计算结果编写存储过程/函数来代替大量交互优化索引的使用合理使用query cache缩短每个事务尽量减少线上的表的记录数量适当的冗余,总结,每一项改进效果可能不大,不过叠加起来就会比较可观善用网络资源!学会提问的技巧!,