Mysql server tuning(译文)
06月 29, 2007 on 4:08 am | In 未分类 |从某个英文pdf文档译过来的,很久了,还是Mysql Conference 2007时的PDF.
(如果能找到,我把原文地址和pdf给出来)
向原作者致谢….
调整Server Config时需要考虑的事情
设置是针对负载的,不存在说有什么针对一个16GB内存的优化方案这种说法.
存储引擎的选择或是混用是很重要的
有些设置取决于您的硬件和操作系统。
Approaching?tuning
您只需要设置一部分,其余的一些要具体分析(这些也很难决定如何去调整)
有些设置会影响Mysql的行为和安全,要小心
有些设置是可以基于连接的,利用这一点!
首先优化您的查询,否则您需要重新检阅您的设置。
常见错误:
运行默认设置。(当然如果您用来在您的本儿上存您的DVD收集资料, 那当然可以)
直接使用其他人的My.conf文件,都没检查一下是否符合您的需求。
虽然只有一两个查询需要,您仍为它设置了一个巨大的全局设置。您可以这样:
SET sort_buffer_size=128000000;
set sort_buffer_size=DEFAULT
我们能得到的信息:
SHOW STATUS
SHOW INNODB STATUS
操作系统的命令比如:vmstat,iostat,mpstat
使用内存:
为Mysql server分配更多内存常常带来显著的性能提升.
但是分配过多的内存会损失性能甚至是稳定性
检查一下:
Swapping
查看swap IO ,这比简单地使用swap space要好
使用了32位以上的地址(确保OS和mysql server都是64位的)
战胜Swapping
有些操作系统会使用Swap,虽然内存充足。
处理好IO cache和swap间的平衡。
设置VM子系统为只有在最后一次使用resort的时候才swap
tune VM subsystem to use swap only as last resort
echo 1 >/proc/sys/vm/swappiness
如果在linux上使用innodb可以用直接磁盘IO:
innodb_flush_method=O_DIRECt
了解一下变量的单位:
table_cache=128M
错了,它的单位是用个(entries)来衡量的。
key_buffer_size=1024
错了,key buffer size要用bytes来设定。
innodb_max_dirty_pages_pct=8GB
这个设置准确无误。
了解作用域和内存分配规则
key_buffer_size
全局的,由所有线程共用。
sort_buffer_size
需要排序时将内存分配给线程。
read_buffer_size:
一次性就分配指定大小的内存,虽然可能更小的内存就够了
过大的值反而会让事情慢得糟糕
更多的分配常常由OS来完成。
tmp_table_size:
指定一个最大值,在需要的时候会增长到这个值 。
调得过大也没什么事
细节:
关于SHOW STATUS
show global status:了解服务器的全局状态。了解负载的好方法。在Mysql4.1和以下版本中唯一一个。
show local status:
查询/会话配置的好东西
从mysql 5.0开始能用
show status 默认就是这个
有些变量是全局的
也出现会在show status 的输出中
mysqladmin extended -i100 -r
抽样一下,看看Mysql server现在干了些什么,这是个好办法
Show status:
aborted clients:
不用担心,许多程序都没有恰当地关闭连接。
aborted_connects:
可能意味着认证失败,网络超时或其他错误。
值得看一看,因为可能引起主机blocked out
max_connect_errors=100000
可能意味着有人尝试暴力密码破解
binlog_cache_disk_use/binlog_cache_use
bin log 溢出到磁盘的频率。
如果太频繁,需要增大–binlog_cache_size
com_xxx:
按查询来了解服务器负载
查询可以是相当复杂多样的
1条评论 »
发表评论
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^
又发新文章,值得鼓励!不过没休息,值得批评!
评论 由 寒寒 — 06月 29, 2007 #