??? 大家好,我是 ,10 致力于年产研经验 Python 传播相关技术栈 ?? ?? 如果这篇文章感觉不错,用小手点赞。 ?? ?? 如果本文发现错误,请在评论区纠正。 ?? ?? ?? ???
欢迎订阅专栏 ?? ?? 《Python 爬虫 120》?? ??
?? 最近更新:2022 年 3 月 23 日,橡皮擦的第 609 篇原创博客
文章目录
-
- ?? 实战场景
- ?? 查询缓存
-
- query_cache_size/query_cache_type
- ?? 各种缓存
-
- sort_buffer_size
- key_buffer_size
- max_allowed_packet
- ?? Innodb 缓存及其相关性
-
- innodb_buffer_pool_size
- innodb_log_file_size
- innodb_lock_wait_timeout
- innodb_lock_wait_timeout
- ?? 连接数
-
- max_connections
- ?? 时间
-
- wait_timeout 和 interactive_timeout
- innodb 缓冲区配置
?? 实战场景
很多时候,当我们在服务器端安装 MySQL 软件完成后,将立即创建数据表结构并填充表数据,但事实上,我们可以提前做到 MySQL 修改配置文件,以达到最佳效率。
一些典型的配置调整。
?? 查询缓存
当数据库查询频繁使用时,打开此命令。
query_cache_size/query_cache_type
建议关闭查询缓存,即设置为
query_cache_size = 256M query_cache_type = 1 可以使用以下命令查询缓存状态是否打开
show VARIABLES like "query_cache%"; 
如果查询到 query_cache_type 为 OFF ,表示缓存未打开,其他参数如下:
query_cache_limit:缓存限制大小,超过不缓存,缺省值为 1M,可以设置为 2M;query_cache_min_res_unit:缓存块大小,默认 4KB;query_cache_size:需要设置为查询缓存大小 1024 单位为字节的倍数;query_cache_type:缓存类型,0 为不设置,1 2.缓存所有结果 为缓存 select 语句中通过SQL_CACHE指定的缓存。
禁止查询缓存的方法是直接注释 query_cache_limit 即可。
?? 各种缓存
sort_buffer_size
可以设置为
sort_buffer_size = 4M 可用于查询排序的缓冲区大小,参数对应的分配内存是单连接独占的,只对 order by 和 group by 如果有,起作用 10 实际分配的内存是一个连接 10x4M = 10M,对于 4GB 内存服务器可以设置为 4~8M。
与参数对应的两个参数是 read_buffer_size 和 join_buffer_size ,分别表示读查询缓冲区大小,联合查询缓冲区大小。
key_buffer_size
根据服务器内存配置索引缓冲区的大小,一般占用实际内存 10%左右。
max_allowed_packet
默认情况下,网络传输中消息的最大值是 1M,最大值是 1024M,必须是 1024 的倍数。
?? Innodb 缓存及其相关性
innodb_buffer_pool_size
当使用缓冲池大小时 InnoDB 原则上,应设置的选项越大越好。内存总量一般设置 70%~80%大小。
设置格式如下,注意单位。
innodb_buffer_pool_size = 10G
innodb_log_file_size
redo 重写日志的大小,以确保快速恢复,以确保编写操作崩溃 M 对于单位来说,提高这个值也可以提高效率。
innodb_log_file_size = 128M
innodb_lock_wait_timeout
默认为 50 ,修改为 30
innodb_lock_wait_timeout = 30
innodb_lock_wait_timeout
MySQL 事务超时,默认时间为 50S,当数据库锁超过此值时,就会报错。
?? 连接数
max_connections
MySQL 当服务器并发量较大时,最大连接数将返回 too many connections 在处理错误时,可以调整该值,默认值 100,你可以设置为更高的值。
设置的时候,可以参考产线环境,在操作库上执行下述代码。
show variables like '%max_connections%';
show status like '%max_used_connections%';
对比得到的结果集,如果 max_used_connections = max_connections ,即调高 max_connections 。
如果 max_used_connections 远远小于 max_connections ,则调低该值。
该内容还会衍生出一个配置,即暂存链接数 back_log 。该值表示的是 MySQL 暂停新请求之前,短时间内可以寄存的请求数,一般设置为 100~200 即可。
⛳️ 时间
wait_timeout 和 interactive_timeout
wait_timeout 表示 MySQL 关闭非交互的连接之前的等待秒数; interactive_timeout 表示 MySQL 关闭交互连接之前要等待的秒数。
interactive_timeout 默认值是 28800,可以优化到 6000(即 100 分钟), wait_timeout 酌情进行处理即可。
show variables like "wait_timeout";
show variables like "interactive_timeout";
常用的配置如下:
binlog_format = row
log_bin = /data/mysql/data/mysql-bin # 电脑路径
log-error = /data/mysql/data/error.log # 电脑路径
lower_case_table_name = 1
slow_query_log = 1 # 开启慢日志
slow_query_log_file = /data/mysql/data/slow-query.log # 慢日志地址
long_query_time = 3 # 慢日志记录时间
max_connections = 1024 # 最大连接数
back_log = 500 # 暂存连接数
max_connect_errors = 20 # 最大错误连接数
wait_timeout = 60 # 非交互的连接
interactive_timeout = 6000 # 交互的连接
key_buffer_size=256M # 索引缓存区大小
query_cache_size = 256M # 查询索引大小
query_cache_type=1 # 缓存存储类型
query_cache_limit=50M # 缓存大小限制
sort_buffer_size = 2M
join_buffer_size = 2M
max_allowed_packet=32M # 额外分配内存
thread_cache_size=200 # 线程缓存大小
read_buffer_size=1M # 读取缓存大小
read_rnd_buffer_size=16M # 随机缓存区大小
bulk_insert_buffer_size=64M # 批量插入
innodb 缓冲区配置
# 缓存innodb表的索引,数据,插入数据时的缓冲总大小
innodb_buffer_pool_size = 10G
innodb_flush_log_at_trx_commit = 2 # 事务提交日志参数
innodb_log_buffer_size = 32M # 日志缓冲区大小
# 重做日志大小,用于 MySQL 崩溃时的重做恢复
innodb_log_file_size = 128M
# 日志组,默认为 2
innodb_log_files_in_group = 2
📣📣📣📣📣📣 🌻 本文如果发现错误,欢迎在评论区中指正哦 💗
欢迎大家订阅专栏 ⭐️ ⭐️ 《Python 爬虫 120》⭐️ ⭐️