mysql常用参数

  • 格式:docx
  • 大小:30.19 KB
  • 文档页数:8

目录1.skip-locking (1)2.key_buffer_size (2)4. table_cache (3)5. sort_buffer_size (3)6. read_buffer_size (4)7. read_rnd_buffer_size (4)8. myisam_sort_buffer_size (4)9. thread_cache_size (4)10. query_cache_size (5)11. write_buffe (8)1.skip-lockingMySQL的配置文件f中默认存在一行skip-external-locking的参数,即“跳过外部锁定”。

根据MySQL开发网站的官方解释,External-locking用于多进程条件下为MyISAM数据表进行锁定。

如果你有多台服务器使用同一个数据库目录(不建议),那么每台服务器都必须开启external locking;参数解释当外部锁定(external-locking)起作用时,每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定。

由于服务器访问数据表时经常需要等待解锁,因此在单服务器环境下external locking会让MySQL性能下降。

所以在很多Linux发行版的源中,MySQL配置文件中默认使用了skip-external-locking来避免external locking。

当使用了skip-external-locking后,为了使用MyISAMChk检查数据库或者修复、优化表,你必须保证在此过程中MySQL服务器没有使用需要操作的表。

如果没有停止服务器,也至少需要先运行mysqladmin flush-tables命令,否则数据表可能出现异常。

参数使用说明:如果是多服务器环境,希望打开external locking特征,则注释掉这一行即可# skip-external-locking 如果是单服务器环境,则将其禁用即可,使用如下语句skip-external-locking注意事项在老版本的MySQL中,此参数的写法为:skip-locking如果在新版本MySQL配置中依然使用此写法,则可能出现:[Warning] ‘–skip-locking’ is deprecated and will be removed in a future release. Please use ‘–skip-external-locking’ instead.错误。

2.key_buffer_size在mysql数据库中,key_buffer_size是对MyISAM表性能影响最大的一个参数,下面就将对mysql Key_buffer_size 参数的设置进行详细介绍,供您参考。

下面一台以MyISAM为主要存储引擎服务器的配置:mysql> show variables like 'key_buffer_size';+-----------------+------------+| Variable_name | Value |+-----------------+------------+| key_buffer_size | 536870912 |+-----------------+------------+分配了512MB内存给mysql key_buffer_size我们再看一下key_buffer_size的使用情况:mysql> show global status like 'key_read%';+------------------------+-------------+| Variable_name | Value |+------------------------+-------------+| Key_read_requests | 27813678764 || Key_reads | 6798830 |+------------------------+-------------+一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:命中率=key_cache_miss_rate = Key_reads / Key_read_requests * 100%比如上面的数据,key_cache_miss_rate为0.0244%,4000个索引读取请求才有一个直接读硬盘,已经很BT了,key_cache_miss_rate在0.1%以下都很好(每1000个请求有一个直接读硬盘),如果key_cache_miss_rate在0.01%以下的话,key_buffer_size分配的过多,可以适当减少。

MySQL服务器还提供了key_blocks_*参数:mysql> show global status like 'key_blocks_u%';+------------------------+-------------+| Variable_name | Value |+------------------------+-------------+| Key_blocks_unused | 0 || Key_blocks_used | 413543 |+------------------------+-------------+Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。

比较理想的设置:Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈80%Key_buffer过小案例:最近公司的一台服务器出现了负载过重的问题。

开始也不知道是哪里的原因,总监一直坚信是由于我们写的程序出了问题,就天天催着我去程序里面找问题,优化程序。

可是程序已经是优化了好几遍了,因为程序只是一种工具,一种把数据很好的现实给用户的提取工具。

程序的最优化其实就是垃圾代码的最小化,数据库索引的最佳化。

从此可以给服务器减轻一部分压力。

我们的问题是这样的:只要把其中的一个域名一开,哪怕是只有一个IP能够访问该域名,那也会造成服务器压力过载。

这是为什么呢?难道服务器就连这样的负载都承受不起吗?所以,服务器压力过重肯定不是由于程序的事情。

那么到底是哪里的问题呢?不是程序的事情,那就是服务器的配置问题。

由于我们对服务器的配置没有任何的更改权限,也没有查看服务器配置的可读权限,所以只能还是从程序方面找原因了。

可是程序都翻遍了,就是没有解决的途径。

最终还是想到了mysql的配置问题,看看当前mysql配置中的运行状态的变量,这个通过phpMyAdmin很容易就能看到。

哦,原来出现了这么多的红字提示,这些以红字显示的就是提示我们的系统某些变量的设置不合法造成,看看有一个最可疑的选项就是key_read以红色数字显示,而且Key_read_ratio_%占得百分比是3%,按道理说这个值应该在1%以下才是正常的,这个值是这样得出的:从硬盘读取索引值的次数/从内存读取索引值的次数,如果这个值过大,那就说明从硬盘读取索引值的次数越高,也说明mysql的配置中key_buffer的值设置的过小,所以应该调大这个值。

ok,一切解决。

3. max_allowed_packet控制其通信缓冲区的最大长度,默认是1M当一个MySQL客户或mysqld服务器得到一个比max_allowed_packet个字节长的包,它发出一个Packet too large错误并终止连接。

通常通过MySQL的"load data local infile"语句将一个文本文件中的内容导入到数据库中,这样速度会很快,但今天发现如果文本的大小超过1M时,出现异常:“Packets larger than max_allowed_packet are not allowed”注:max_allowed_packet参数是在mysql4以后才有的,在mysql4以前版本,还没有这个参数4. table_cachetable_cache 参数设置表高速缓存的数目。

每个连接进来,都会至少打开一个表缓存。

因此,table_cache 的大小应与max_connections 的设置有关。

例如,对于200 个并行运行的连接,应该让表的缓存至少有200 ×N ,这里N 是应用可以执行的查询的一个联接中表的最大数量。

此外,还需要为临时表和文件保留一些额外的文件描述符。

当Mysql 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存;如果还没有被缓存,但是在Mysql 表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区;如果表缓存满了,则会按照一定的规则将当前未用的表释放,或者临时扩大表缓存来存放,使用表缓存的好处是可以更快速地访问表中的内容。

执行flush tables 会清空缓存的内容。

一般来说,可以通过查看数据库运行峰值时间的状态值Open_tables 和Opened_tables ,判断是否需要增加table_cache 的值(其中open_tables 是当前打开的表的数量,Opened_tables 则是已经打开的表的数量)。

即如果open_tables接近table_cache的时候,并且Opened_tables这个值在逐步增加,那就要考虑增加这个值的大小了。

还有就是Table_locks_waited比较高的时候,也需要增加table_cache。

操作系统级别的调整:table_cache加大后碰到文件描述符不够用的问题。

这个时候就需要考虑提高系统和数据库的打开文件数目限制了。

1,显示当前系统的文件限制# cat /proc/sys/fs/file-max2,通过phpmyadmin查询mysql配置参数(既open files limit)。

一般情况下,mysql 5的open files limit会自动根据table cache调整。

open files limit 系统默认调整为table cache的2倍多一点。

5. sort_buffer_size增加这值加速ORDER BY或GROUP BY操作。

1.Sort_Buffer_Size 是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存。