无锡企业网站制作中大多数开发公司采用MySQL作为系统默认的数据库。下图为各类数据库的使用占比情况(数据来源:eversql.com)
我司在网站开发制作过程中采用的默认数据库也是MySQL。MySQL的优点我们就不再赘述,百度下铺天遍地。
问题
我们经常有这么一个应用场景,企业的门户网站,日访问量3000PV,WEB页面及数据库采用单台云主机部署。如阿里云的1Core CPU/4G RAM/高效云盘,那么才使用过程中我们会发现很多时候会出现访问很慢的情况,查看系统资源CPU:75%,内存80%,然后致命问题是磁盘读写100%(高效云盘系统盘在2000IOPS左右,读写140Mbps)如下图:
可是一个企业网站,页面加载大小1M且带宽只有3M的云主机,读写峰值200多M,平均130M肯定异常。
优化
下面我们介绍检查MySQL配置及优化参数。
show global status like '%innodb_buffer_pool_wait%';
查看MySQL等待区,会发现运行一段时间之后该变量值直线上升,此为导致磁盘大量读写的主要原因。
我们在网站制作中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来做细微的调整。我司提供专业的系统运维服务及网站建设服务。欢迎咨询!