首页 > 数据库技术 > 详细

优化mysql in docker

时间:2020-04-11 01:33:35      阅读:63      评论:0      收藏:0      [点我收藏+]
原文:优化mysql in docker

mysql优化有2个关键字
connection pool
Thread cache

先简单说下docker + mysql
在docker里运行mysql性能计划没有什么区别, 只要别像我一样用snap安装docker 这样相当于又封了一层, 结果并发只能跑3-4QRS
mysql有两个目录需要挂载:
/var/lib/mysql 里面保存数据库数据
/etc/mysql/ 里面保存着数据库配置的参数

比如最大连接数max_connections 默认是 151
show variables like ‘max_connections‘;

修改方式:

  1. 可以直接在数据库中临时修改, mysql重启后丢失

set GLOBAL max_connections=152;

  1. 在配置文件里修改并重启mysql
    配置文件在 /etc/mysql/my.cnf

比如想修改max_connections的话,
在[mysqld]下面添加 max_connections = 152

我没有首先修改max_connections因为默认是151, 但是并发起来200qps连接数只有10左右, 目前的瓶颈应该不是最大连接数的限制,
然后我再django setting 加上了数据库的连接池参数 , 默认为0 不使用连接池

online_database = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘DB_NAME‘,
‘USER‘: ‘root‘,
‘PASSWORD‘: ‘ddjjhkk‘,
‘HOST‘: ‘192.168.20.211‘,
‘PORT‘: ‘3306‘,
‘CONN_MAX_AGE‘: 60,
}
}

加上之后, 并发由原来的200qps 到了260-300
数据库连接数从10提高到了30-70
按照django 但进程处理一个请求需要2-3ms来算妙并发应该在300左右

连接池这方面也可以直接在mysql这边设置

提高的这50qps说明创建数据库连接浪费了一些资源.

mysql thread_handling 有3种
1 没用thread 好像
2 one-thread-per-connection (每有一个来自客户端的connection就使用一个thread进行处理)

  1. 线程池 (一个线程负责处理多个 connection) 好像

连接池

connection pool 是客户端的概念, Django的话使用CONN_MAX_AGE来使用连接池

Threads Cached: 处于缓存中可以使用的thread,
通过变量thread_cache_size 修改与查看, 默认为8好像

建议修改64 set global thread_cache_size=64;

对于mysql来说, 与客户端的connection跟服务端的thread创建都需要消耗资源, 应该避免过多的创建新资源。

connection 通过客户端的connection pool
thread 通过mysql端的 Thread cache

优化mysql in docker

原文:https://www.cnblogs.com/lonelyxmas/p/12677134.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!