当前位置: 首页 > article >正文

mysql配置优化和分组报错问题解决

【需求】

我有一个很鸡肋的需求,mysql数据库安装没有配置my.ini,用的默认配置,导致很多的配置不能一次配置永久生效,需要每次重启后都要重新执行才可以生效,重装代价太大,客户不同意,服务器并发量很高,重新配置怕出其他的问题,所以只能编辑一个脚本,每次电脑重启3分钟后执行这个命令

自己实操过的配置,修改后效果很明显

1. 内存相关配置

  • innodb_buffer_pool_size

    • 这是 InnoDB 存储引擎用来缓存数据和索引的内存。该值越大,缓存命中率越高,查询速度也就越快。一般建议设置为物理内存的 50% 到 80% 左右。

    设置方法

    innodb_buffer_pool_size = 4G # 根据你的物理内存大小调整
  • query_cache_size(MySQL 8.0 中已被废弃)

    • 旧版 MySQL 可以启用查询缓存,用于缓存 SELECT 查询的结果。若数据更新较为频繁,建议关闭查询缓存,避免缓存频繁失效。

    设置方法

    query_cache_size = 64M query_cache_type = 1
  • tmp_table_sizemax_heap_table_size

    • 这两个参数决定了临时表的最大内存使用。如果查询涉及大量的临时表操作(如 GROUP BY、ORDER BY 操作),可以适当增加这些值。

    设置方法

    tmp_table_size = 128M max_heap_table_size = 128M

2. 连接数与并发控制

  • max_connections

    • 控制最大连接数,防止过多的连接导致服务器资源耗尽。根据业务需求设置合适的连接数。

    设置方法

    max_connections = 500 # 根据实际并发量调整
  • thread_cache_size

    • 控制线程缓存的大小,减少线程创建和销毁的开销。

    设置方法

    thread_cache_size = 32

3. 日志与IO相关配置

  • innodb_log_file_size

    • 日志文件大小,日志文件过小可能会影响写入性能,适当增大日志文件大小可减少日志文件的频繁写入。

    设置方法

    innodb_log_file_size = 512M
  • innodb_flush_log_at_trx_commit

    • 控制事务提交时日志刷新的方式。1 为最安全(每次提交事务都写入磁盘),2 和 0 提供更好的性能但降低了安全性。适当选择可以提升写入效率。

    设置方法

    innodb_flush_log_at_trx_commit = 2

4. 索引与查询优化

  • innodb_io_capacity

    • 控制 InnoDB 存储引擎的 I/O 处理能力。可以根据磁盘 I/O 性能设置该值,适当提升可以提高系统的吞吐量。

    设置方法

    innodb_io_capacity = 1000 # 如果使用 SSD,可适当调高
  • innodb_read_io_threadsinnodb_write_io_threads

    • 这两个参数分别控制 InnoDB 的读/写 I/O 线程数。多核 CPU 和高性能磁盘环境下,可以增加这两个值以提升性能。

    设置方法

    innodb_read_io_threads = 4 innodb_write_io_threads = 4

5. 查询优化

  • join_buffer_size

    • 控制 Join 操作时的内存缓存大小。如果涉及大量的 JOIN 操作,可以增加该值。

    设置方法

    join_buffer_size = 8M
  • sort_buffer_size

    • 控制排序操作时的缓存大小。如果查询中包含大量的排序操作,如 ORDER BY,可以增大这个值。

    设置方法

    sort_buffer_size = 4M

6. 其他

  • table_open_cache

    • 控制表缓存的大小,适当增加这个值,可以减少表的打开和关闭操作,提高查询效率。

    设置方法

    table_open_cache = 2000
  • innodb_flush_method

    • 控制刷写数据到磁盘的方式。可以选择 O_DIRECT 以减少文件系统缓存对性能的影响,提高写入性能。

    设置方法

    innodb_flush_method = O_DIRECT

7.mysql分组报错问题解决

  • 查询SQLMODE

    select @@GLOBAL.sql_mode;

    设置方法

    SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
  • 以上执行后请执行刷新

    设置方法

    flush privileges;

总结

根据你的业务场景,优化查询性能不仅仅依赖于修改配置,还需要结合以下几方面:

  • 良好的索引设计:确保常用查询的字段都已建立合适的索引。
  • 查询优化:避免复杂的子查询,使用适当的 JOIN 和 LIMIT。
  • 表设计:合理的表结构和数据拆分,减少冗余数据。

修改配置后,建议通过 SHOW STATUSSHOW VARIABLES 等命令来监控数据库的运行状况,进一步调整配置。


http://www.kler.cn/a/309405.html

相关文章:

  • ORA-01092 ORA-14695 ORA-38301
  • [项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]
  • OLED 显示画面的变换操作——上下、左右翻转
  • pgsql和mysql的自增主键差异
  • C 语言标准库 - <errno.h>
  • Redis五种数据类型剖析
  • 信号与线性系统综合实验
  • 87-java 可轮询锁和定时锁
  • 网络安全宣传周的时间,举办活动的方式和意义
  • 计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
  • 场外个股期权通道商是什么业务?个人投资者可以参与场外期权吗?
  • JavaScript ES6特性(var let const、function=>、增强表达赋值、类与对象)
  • 【大模型专栏—进阶篇】语言模型创新大总结——“三派纷争”
  • 微信小程序点赞动画特效实现
  • [乱码]确保命令行窗口与主流集成开发环境(IDE)统一采用UTF-8编码,以规避乱码问题
  • C++学习笔记(25)
  • TypeScript —枚举的应用
  • “拍照赚钱”的任务定价(2017数学建模国赛b题)
  • 中国农业银行——数据湖建设
  • 5V全桥驱动芯片单通道可替代型号LG9110S,应用于牙刷,电子锁,共享单车锁等产品中具有过温保护功能
  • Python模块化程序设计理念及实战
  • 【快慢指针】突破环形链表
  • 企微无限群发:精准营销与合规边界的探索
  • 性能测试的五大目标
  • 基于yolov8的舌苔识别检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • Meme“淘金”热潮下:Meme发射平台的安全风险分析