欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql数据库生产环境性能优化总结,纯干货!!!(三)

程序员文章站 2024-01-26 12:36:04
...

mysql数据库生产环境性能优化总结,纯干货!!!(三)

从mysql配置的角度优化数据库

1.优化mysql的线程缓存
在生产环境中,会有很多请求连接到数据库。为此系统就需要创建线程处理这些请求。然而如果来一个请求就创建一个线程就会极大地降低了mysql的工作效率,占用了大量的计算资源。为此我们需要预先缓存好线程等待请求的到来。
所以可以通过查看现在的已连接的线程数来预估计需要缓存的大小。
查看命令:

mysqladmin -p extended-status -r -i 10 | grep Threads_connected
这里 -r代表先取一个基准值,每隔10秒相对于基准值的变化。-i代表每隔多长时间查看一次。

一般我在运维的时候Threads_connected的浮动在300-350之间,会将thread_cache_size设置在50M左右。缓存的大小一般取决于你在生产环境中的经验和硬件设备。一般内存较大的设备可以设置相对较大的缓存。或者通过命令监控发现连接数浮动较大,我就会将缓存相应的增大。
查看连接缓存大小命令为:

show global variables like 'thread_cache_size';

mysql数据库生产环境性能优化总结,纯干货!!!(三)
修改进程缓存的方法:
一:修改配置文件,永久修改:

[mysqld]
thread_cache_size = 20

mysql数据库生产环境性能优化总结,纯干货!!!(三)
二:临时修改,计算机重启后失效。

set global thread_cache_size = 20;

修改完之后,我们再次查看进程缓存发生了改变。
mysql数据库生产环境性能优化总结,纯干货!!!(三)
2.修改全表扫描的缓存
read_buffer_size表示mysql数据库在使用顺序扫描的的方式扫描全表时所使用的的缓存。为了降低对磁盘所需要的的I/O压力,我们可以根据生产环境的经验适当的增加缓存的大小。
查看方法:

 show global variables like 'read_buffer_size';

修改方法一:修改配置文件永久

[mysqld]
read_buffer_size = 110000

修改方法二:临时修改

 set global read_buffer_size=102400;

3.优化Myisam的索引缓存
当我们用Myisam存储引擎存储数据时,在查询数据时是将索引以文件的形式存储在磁盘上的(*.MYI)。Myisam所使用的的缓存:key_buffer_size,所使用的的缓存并非mysql说占用的内存,而是将mysql内存之外的空间当做缓存。所以在设置的时候需要注意如果当前服务器没有足够多的内存空间,不要设置太大的key_buffer_size,有可能会造成内存溢出造成服务器崩溃。所以这个数字不应超过索引大小或者为系统保留大约25-50%的内存。
查看key_buffer_size

select sum(index_length) from information_schema.tables where engine='myisam';

mysql数据库生产环境性能优化总结,纯干货!!!(三)
我们也可以通过命令去查看在一段时间内,缓存的使用情况。如果缓存一直处于未命中的情况,就表示缓存过小,查询是从磁盘中读取的。为此我们需要过大缓存。

mysqladmin -p extended-status -r -i 10 | grep Key_read

mysql数据库生产环境性能优化总结,纯干货!!!(三)
修改方法:修改配置文件(永久修改)
mysql数据库生产环境性能优化总结,纯干货!!!(三)

4.优化Myisam连接缓冲
每当有连接连入到数据库,数据库就会分配一些缓存给每个连接。在设置好缓冲之后,数据库就会分配给每个连接,无论每个连接需求是多少,数据库只会分配给每个连接固定的缓冲。即缓冲设定好了之后便无法修改,过少、过大的缓冲都不行。总需求是设定的缓冲大小*连接数。太小的缓冲,不够用。太大的缓冲又浪费资源。
修改方式:

myisam_sort_buffer_size=30M
innodb_sort_buffer_size=30M
sort_buffer_size=30M

5.Myisam表修复优化
在生产环境中如果遇到突发状况,如断电等。数据库崩溃会导致Myisam表发生损坏。当我们用Myisamchk命令去修复Myisam表的时候可能会浪费大量的时间。因为在重建时候需要全表扫描,如果是一张大表会需要消耗大量的时间。每一行进行扫描,扫描完之后还需要重建索引。所以为了优化重建表的时间,我们可以设置并行线程数,Myisam_repair_threads.其影响了创建索引是并行的线程数,也优化了表修复的repair by storing阶段。默认线程数是1.

Myisam_repair_threads=1
相关标签: mysql 优化