网站制作公司优化云服务器MySQL性能

mysql.jpg

无锡企业网站制作中大多数开发公司采用MySQL作为系统默认的数据库。下图为各类数据库的使用占比情况(数据来源:eversql.com)

database-comparisons.png

我司在网站开发制作过程中采用的默认数据库也是MySQL。MySQL的优点我们就不再赘述,百度下铺天遍地。

问题

我们经常有这么一个应用场景,企业的门户网站,日访问量3000PV,WEB页面及数据库采用单台云主机部署。如阿里云的1Core CPU/4G RAM/高效云盘,那么才使用过程中我们会发现很多时候会出现访问很慢的情况,查看系统资源CPU:75%,内存80%,然后致命问题是磁盘读写100%(高效云盘系统盘在2000IOPS左右,读写140Mbps)如下图:

QQ20191029-0.png

可是一个企业网站,页面加载大小1M且带宽只有3M的云主机,读写峰值200多M,平均130M肯定异常。

WX20191029-160335@2x.png


优化

下面我们介绍检查MySQL配置及优化参数。

show global status like '%innodb_buffer_pool_wait%';

查看MySQL等待区,会发现运行一段时间之后该变量值直线上升,此为导致磁盘大量读写的主要原因。

QQ20191029-2.png

我们在网站制作中MySQL优化主要以下这些变量。

expire_logs_days=7
sql_mode=                 #sql_mode 配置为空值
log_timestamps = SYSTEM
wait_timeout = 31536000

######################### 性能参数 ####################
open_files_limit = 10240
max_connections = 10000
max_user_connections=9990
max_connect_errors = 100000
table_open_cache = 1024
thread_cache_size = 64
max_heap_table_size = 32M
query_cache_type = 0
###global cache ###
key_buffer_size = 1G
query_cache_size = 0
tmp_table_size = 32M        #内存临时表
binlog_cache_size = 4M      #二进制日志缓冲
###session cache ###
sort_buffer_size = 8M       #排序缓冲
join_buffer_size = 4M       #表连接缓冲
read_buffer_size = 8M       #顺序读缓冲
read_rnd_buffer_size = 8M   #随机读缓冲
thread_stack = 256KB        #线程的堆栈的大小

######################### innodb ##########################
default_storage_engine = InnoDB
innodb_buffer_pool_size = 8G  #系统内存50%
innodb_open_files = 5120
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
#innodb_buffer_pool_instances = 6
innodb_log_file_size = 1G
innodb_log_files_in_group = 2
innodb_strict_mode = OFF
innodb_sort_buffer_size = 4194304
innodb_io_capacity=2800
innodb_io_capacity_max=10000
innodb_flush_method = O_DIRECT
innodb_large_prefix = 0
innodb_thread_concurrency = 0  #用户线程的数量小于64,设置为0

针对上面的问题,主要调整innodb_buffer_pool_size来解决磁盘读写问题,这个值可以根据云主机的配置进行调整。


总结

MySQL在日常使用中会有很多灵活调整的东西,这个是系统开发中必须要去做的。以上优化的参数参照,需要根据你服务器的CPU、内存、磁盘的IOPS来做细微的调整。我司提供专业的系统运维服务及网站建设服务。欢迎咨询!