mysql配置连接参数设置及性能优化
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《mysql配置连接参数设置及性能优化》,聊聊连接、参数、设置、性能、MySQL配置,我们一起来看看吧!
1 前言
在java开发中,最常用的数据存储就是数据库,其中常用的就是mysql,关于数据库的连接配置信息,可能就不是那么的清除了,这里做一个配置信息的说明。
2 数据库连接配置信息
jdbc:mysql://localhost:3306/database_name?serverTimezone=Asia/Shanghai&useUnicode=true& characterEncoding=utf8&useSSL=false&tinyInt1isBit=true&allowMultiQueries=true& rewriteBatchedStatements=true&useAffectedRows=true&defaultFetchSize=10000& zeroDateTimeBehavior=convertToNull
3 配置信息说明
- 1、serverTimezone=Asia/Shanghai,即时区设置,上海时间即东八区,高版本的mysql需要设置为 GMT%2B8(GMT+8)
- 2、useUnicode=true 使用unicode 编码
- 3、characterEncoding=utf8 数据库连接字符集
- 4、useSSL=false 是否使用 ssl
- 5、tinyInt1isBit=true 转换为 tinyint(1) 转换为 boolean ,否则为 int
- 6、allowMultiQueries=true 是否允许多行查询,在批量更新数据时,update 语句使用分号(;)进行连接,此时则需要配置运行多行查询。
- 7、rewriteBatchedStatements=true 批处理时需要设置该参数,在mysql5.1.13以上版本才能使用,对 update/insert/delete 都可以生效。数据量大时,消耗时间 jdbc batch
- 8、useAffectedRows=true,默认为false。是否使用影响行数,默认为找的所有修改行数,即false。在update 的情况下,更新3条,如果只有两条有变化,则返回2(useAffectedRows=true),否则返回3.
- 9、defaultFetchSize=10000 默认获取条数
- 10、zeroDateTimeBehavior=convertToNull 默认时间转换为null,避免转换报错。0000-00-00 时间转换为 null
4 数据库sql
# 正常的插入数据 insert into table_name # 如果数据存在则忽略,否则进行插入 insert ignore into table_name # 如果数据存在则更新 insert into table_name (id,name) values(1,'小明') ON DUPLICATE KEY UPDATE id = 1,name = "xiaoming" # 如果存在则替换 replace into table_name # mysql 还有计算功能 select 1 + 4 # 计算结果为 5 # ifnull 如果字段为空则赋默认值为 0 select ifnull(age,0) from table_name # 正则查询 user_no 不包含 数字 SELECT * FROM table_name WHERE user_no REGEXP '[^0-9]' # 时间处理 select DATE_FORMAT(create_time, '%Y%m%d %T'), -- 20210204 12:00:00 id, DATE_FORMAT(create_time, '%Y%m%d%H') as time_str, -- 2021020412 DATE_FORMAT(create_time, '%Y%m%d') as day_str, -- 20210204 DATE_FORMAT(create_time, '%H') as hour_str, -- 12 WEEKDAY(create_time) as week_str -- 0-6,分别是 周一到周日 from table_name
5 mysql 性能优化的关注点
其实,mysql 性能优化不是简单的知道和使用 explain和show profile就天下无敌了,这两个只是重要的方面,何况作为资深的CRUD工程师还未必经常使用,任何的知识都是了解->熟悉->精通,当真正的了解原理或者系统的掌握才是真正的悟道。接下来开始进入正题,mysql又能优化主要为4个方面:
- 1 硬件资源和操作系统方面的优化
- 2 架构设计方面的优化
- 3
mysql服务配置项的优化 - 4
sql执行层面的优化
6 硬件和操作系统方面的优化
硬件和操作系统就是指mysql服务所运行的服务器硬件资源情况,影响mysql性能的主要因素分为 cpu 、内存大小、磁盘读写速度、网络带宽,硬件是指操作系统的网络配置和系统文件句柄数设置(linux 系统中,一切皆文件,了解过ES搭建的同学都知道,ES的搭建就需要修改系统最大打开的文件数) ,这部分的优化一般由运维工程师和DBA联合完成,在项目开发伊始,可以根据业务需要承载的数据量和 TPS 要求根据经验,考虑后续的业务扩展性,选择与业务相适配的mysql服务。
7 架构设计方面的优化
mysql是一个磁盘io访问频繁的关系型数据库,在高并发和高性能的应用场景中会承受巨大的压力,可以采取以下措施来应对:
- 1 搭建
mysql主从集群,单个mysql服务一旦宕机,将会导致依赖mysql服务的应用无法响应导致服务不可用,可以采用采用主从集群或者主主集群避免单点故障,保障mysql服务的高可用性。 - 2 读写分离设计,在读多写少的场景中,可以采用读写分离的方案避免读写冲突导致的性能问题。
- 3 采用分库分表的设计。通过分库可以降低单个
mysql服务器的io压力,通过分表的机制可以降低单表数据量,提高sql的查询效率。 - 4 热点数据引入
Nosql。引入Redis或者MongoDB等非关系型数据库,可以缓解mysql的访问压力,提升数据的检索性能。
8 mysql 程序配置优化。
mysql配置文件的优化,一般通过 mysql配置文件my.cnf来设置。配置项一般包括:
mysql的最大连接数max_connections(注意这里说的不是项目中设置的数据库连接池的连接数)- 最大的传输包(
max_allowed_packet = 16M) - 开启
bin log(默认不开启,主要用在mysql同步的场景中) general log(通用日志记录sql的执行记录)来记录日志- 还有就是缓冲区(
buffer pool), 包括: 关联查询缓冲区join_buffer_size=128M, 读数据缓冲区read_buffer_size=16M,随机读缓冲区read_rnd_buffer_size=32M,排序数据缓冲区sort_buffer_size=32M,innodb数据缓冲区innodb_buffer_pool_size=4G。
这些参数的配置一般和服务器的资源和使用场景有关,需要根据实际情况来设置。配置项的修改需要关注两个点,一是配置的作用范围,分为会话级别和全局范围,全局参数对已经存在的会话不会生效,会话参数设置只在当前会话生效,会话结束则配置失效,全局类的配置放在默认的配置文件中,否则服务重启将会失效。第二是否支持热加载
9 sql 执行层面优化
sql执行层面优化的要点如下:
- 1 慢
sql查询分析,通过慢sql查询日志和慢sql查询分析工具来定位有问题的sql列表 - 2 执行计划。通过
explain 关键字 + 慢 sql查看当前sql的执行计划,需要重点关注select_type、type、 key、 rows、 filterd、 possible_keys来分析 sql 慢的原因. - 3 使用
show profile工具来分析,该工具是mysql提供的分析当前会话中sql语句资源消耗情况的工具,可以用于sql调优的测量,当前会话中默认是关闭的状态,需要根据情况打开,默认保存最近15次的分析结果,针对慢sql可以通过show profile工具来进行详细分析,得到整个过程中所以资源的开销情况,比如io开销cpu开销和内存开销等情况
10 最终总结
- 1
sql的查询一定要根据索引来进行数据扫描 - 2 避免查询列上使用函数运算或者运算符,避免索引失效
- 3
where条件语句中like %好尽量放置在右边 - 4 使用索引扫描,联合索引的列从左往右,命中的越多越好
- 5
sql语句的排序字段尽量是索引字段,否则会开辟空间进行结果排序 - 6 查询语句避免使用
*号,使用需要查询的列信息即可。 - 7 关联查询或者子查询使用小结果集驱动大结果集。
今天带大家了解了连接、参数、设置、性能、MySQL配置的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
MySQL数据库必知必会之安全管理
- 上一篇
- MySQL数据库必知必会之安全管理
- 下一篇
- Mysql InnoDB 的内存结构详情
-
- 数据库 · MySQL | 14小时前 | MySQL · 数据库运维 · RESOURCE_GROUP Performance Schema MySQL RESOURCE GROUP CPU 资源 SET RESOURCE GROUP
- MySQL RESOURCE GROUP 怎样为查询分配 CPU 资源
- 369浏览 收藏
-
- 数据库 · MySQL | 14小时前 | MySQL · 主从复制 · 数据一致性 MySQL复制 replicate-wild-do-table 复制过滤 CHANGE REPLICATION FILTER
- MySQL 复制过滤规则的风险隔离方法
- 102浏览 收藏
-
- 数据库 · MySQL | 14小时前 | MySQL · InnoDB ·
- MySQL Instant DDL 变更列属性的边界
- 133浏览 收藏
-
- 数据库 · MySQL | 14小时前 |
- MySQL 重命名列时怎样避免旧应用读写失败
- 450浏览 收藏
-
- 数据库 · MySQL | 14小时前 | mysql 空间索引 SRID 地理范围 MBRIntersects
- MySQL 空间索引支持地理范围筛选的设计
- 114浏览 收藏
-
- 数据库 · MySQL | 14小时前 | MySQL · 主从复制 · 数据库运维 · 主从切换 MySQL GTID GTID自动定位 read_only super_read_only CHANGE REPLICATION SOURCE TO
- MySQL GTID 主从切换的检查清单
- 391浏览 收藏
-
- 数据库 · MySQL | 14小时前 |
- MySQL DDL 被元数据锁阻塞的定位方案
- 324浏览 收藏
-
- 数据库 · MySQL | 14小时前 |
- MySQL 直方图改善低基数条件估算的配置
- 163浏览 收藏
-
- 数据库 · MySQL | 14小时前 | 执行计划 · 查询优化 · mysql 执行计划 SHOW PROCESSLIST PROCESS权限 EXPLAIN FOR CONNECTION
- MySQL EXPLAIN FOR CONNECTION 为什么拿不到正在执行的计划
- 256浏览 收藏
-
- 数据库 · MySQL | 14小时前 |
- MySQL JSON 路径查询的生成列索引设计
- 296浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 502次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 561次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 588次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 540次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 352次使用
-
- Golang连接并操作PostgreSQL数据库基本操作
- 2023-01-12 240浏览
-
- golang连接MongoDB数据库及数据库操作指南
- 2023-01-07 323浏览
-
- 总结Golang四种不同的参数配置方式
- 2023-01-07 477浏览
-
- Go语言中Goroutine的设置方式
- 2022-12-24 397浏览
-
- Go语言中函数可变参数(VariadicParameter)详解
- 2023-01-07 312浏览
