MySql数据库优化常见设置 mysql数据库优化方案
qiyuwang 2024-10-04 05:05 19 浏览 0 评论
MySql数据库优化是非常重要的一块,SQL语句方面的优化可以参见我以前的文章,我专门写过,这篇文章作为补充,主要是针对MySql本身参数的优化及注意事项。
- 单个文件的大小直接影响数据的写入及读取,我们可以给每个数据表设置一个独立的文件存储
innodb_file_per_table=ON
- 开启数据库本地的查询缓存机制,我们可以设置缓存数据的大小,数据库会根据查询参数自动变更缓存的内容。查看是否开启缓存命令
show VARIABLES like '%query_cache%';
如果query_cache_type为OFF,说明缓存没有开启,哪我们需要设置如下
query_cache_type=1
query_cache_limit=2M
query_cache_size=256M
query_cache_type 设置为1表示开启缓存
query_cache_limit 每次查询能使用的缓存大小
query_cache_size 缓存大小
- 开启MySql慢日志记录,这个建议针对开发、测试、模拟环境设置,生产环境建议关闭以便提高性能
查看慢查询是否开启
show VARIABLES like '%slow%';
slow_query_log 如果为ON则为慢日志开启
slow_query_log_file 日志文件路径开
启慢日志
slow_query_log=on
#判断标准超过3秒记录
long_query_time=3
slow_query_log_file=/cmp/mysql-wsrep/logs/slow.log
long_query_time 慢查询阈值,单位秒,只要查询超过这个时间就会记录到日志
- 数据库事务隔离级别决定锁的范围大小,直接影响到数据库的性能,下面是常见数据库隔离级别
隔离级别从上到下依次提高,但性能依次降低,所以,我们要根据具体的业务选择合理的数据库隔离级别,达到既满足业务又提高性能的效果。
常见的数据库比如:oracle、sqlserver 默认使用 RC,Mysql默认RR级别
没有特殊要求,我们可以把Mysql的隔离级别设置为RC
transaction-isolation=READ-COMMITTED
- 设置合适的数据表引擎,我们在开发中常用的数据库引擎为innodb,很少使用myisam,其实在不需要事务的需求下,我们可以把数据库引擎或者数据表引擎设置为myisam
ALTER TABLE access_log ENGINE = MyISAM;
OPTIMIZE TABLE access_log;
OPTIMIZE TABLE 命令可以实现空间。碎片清理
- 其它常用设置如下,基本上都加了注释,可以根据需要合理设置
[client]
port = 3306 # 设置mysql客户端连接服务端时默认使用的端口
socket = /mysql/mysql.sock
default-character-set = utf8 # 默认字符编码为utf8
[mysqld]
open_files_limit = 65535
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
port = 3306 # mysql服务端默认监听的TCP/IP端口
socket = /cmp/mysql/mysql.sock
pid-file = /cmp/mysql/mysql.pid
basedir = /cmp/mysql # 基准路径,其他路径都相对于这个路径
datadir = /cmp/data/mysql/data # mysql数据库文件所在目录
tmpdir = /cmp/data/mysql/data # mysql数据库临时文件目录
# explicit_defaults_for_timestamp = true
innodb_flush_method = O_DIRECT # 直接写入磁盘,禁止系统Cache
innodb_io_capacity = 800 # 将其设置为磁盘子系统可以处理的写入iops数。
character-set-server = utf8 # 服务端默认使用的字符集
key_buffer_size = 1000M # 键高速缓存
max_allowed_packet = 128M # 更新插入server接受的数据包大小
table_open_cache = 2000 # 表高速缓存的大小
sort_buffer_size = 2M
read_buffer_size = 2M # MySql读入缓冲区大小。
read_rnd_buffer_size = 8M # MySql的随机读(查询操作)缓冲区大小。
myisam_sort_buffer_size = 64M # MyISAM表发生变化时重新排序所需的缓冲
thread_cache_size = 2000 # 服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量。
query_cache_type = 0 # 只要query_cache_type没有关闭,sql查询总是会使用查询缓存,如果缓存没有命中则开始查询的执行计划到表中查询数据
max_heap_table_size = 128M # 这个变量定义了用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。
bulk_insert_buffer_size = 64M # 批量插入数据缓存大小,可以有效提高插入效率,默认为8M
myisam_sort_buffer_size = 128M # MyISAM表发生变化时重新排序所需的缓冲
myisam_max_sort_file_size = 20G # MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)
myisam_repair_threads = 1 # 如果一个表拥有超过一个索引
myisam_recover-options
# connect
max_connections = 2000 # MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值
max_connect_errors = 999999 # 设置每个主机的连接请求异常中断的最大次数,当超过该次数,MYSQL服务器将禁止host的连接请求,直到mysql服务器重启或通过flush hosts命令清空此host的相关信息
slow_launch_time = 1 # 捕获所有执行时间超过1秒的查询
skip-name-resolve # 禁用dns解析,加快mysql登录过程,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP
# log
log-error = /cmp/data/mysql/log/error.log
general_log_file = /cmp/data/mysql/log/general_log.log # 有的查询语句都可以在general log文件中以可读的方式得到
binlog_format = row
log_bin = /cmp/data/mysql/binlog/mysql-bin.log
relay_log = /cmp/data/mysql/binlog/mysql-relay-bin.log
max_binlog_size = 100M # 每份binlog日志大小,如果日志达到达到这个大小时,mysql会创建一份新的binlog日志
log_slave_updates # 主从复制重要参数,防止数据不同步
expire_logs_days = 3 # 二进制日志自动删除/过期的天数.默认值为0,表示“没有自动删除”
slow_query_log_file = /cmp/data/mysql/log/slow.log # 慢查询日志
slow_query_log = on
long_query_time = 1
server-id = 1
replicate_ignore_db = mysql # 主从同步的环境中,replicate-ignore-db用来设置不需要同步的库
replicate_wild_ignore_table = mysql.% # 主从同步中,过滤的规则
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
# innodb
innodb_data_home_dir = /cmp/data/mysql/data # 这是InnoDB表的目录共用设置。如果没有在 my.cnf 进行设置,InnoDB 将使用MySQL的 datadir 目录为缺省目录。如果设定一个空字串,可以在 innodb_data_file_path 中设定绝对路径。
innodb_data_file_path = ibdata1:100M:autoextend # 指定 InnoDB 只建立一个最初大小为 100 MB 并且当表空间被用尽时以 8MB 每块增加的数据文件
innodb_log_group_home_dir = /cmp/data/mysql # InnoDB 日志文件的路径。必须与 innodb_log_arch_dir 设置相同值。 如果没有明确指定将默认在 MySQL 的 datadir 目录下建立两个 5 MB 大小的 ib_logfile... 文件
innodb_buffer_pool_size = 2G # InnoDB 用来高速缓冲数据和索引内存缓冲大小。 更大的设置可以使访问数据时减少磁盘 I/O。在一个专用的数据库服务器上可以将它设置为物理内存的 80 %。 不要将它设置太大,因为物理内存的使用竞争可能会影响操作系统的页面调用
innodb_log_file_size = 256M # 日志组中的每个日志文件的大小(单位 MB)。如果 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(buffer pool)大小的 1/n。较大的值,可以减少刷新缓冲池的次数,从而减少磁盘 I/O。但是大的日志文件意味着在崩溃时需要更长的时间来恢复数据。 日志文件总和必须小于 2 GB,3.23.55 和 4.0.9 以上为小于 4 GB
innodb_log_buffer_size = 64M # InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。 因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O
innodb_flush_log_at_trx_commit = 0 # 通常设置为 1,意味着在事务提交前日志已被写入磁盘, 事务可以运行更长以及服务崩溃后的修复能力。如果你愿意减弱这个安全,或你运行的是比较小的事务处理,可以将它设置为 0 ,以减少写日志文件的磁盘 I/O。这个选项默认设置为 0
innodb_log_files_in_group = 4 # 日志组中的日志文件数目。InnoDB 以环型方式(circular fashion)写入文件。数值 3 被推荐使用
innodb_max_dirty_pages_pct = 90 # 用来控制在 InnoDB Buffer Pool 中可以不用写入数据文件中的Dirty Page 的比例(已经被修但还没有从内存中写入到数据文件的脏数据)。这个比例值越大,从内存到磁盘的写入操作就会相对减少,所以能够一定程度下减少写入操作的磁盘IO
innodb_open_files = 2000 # 限制Innodb能打开的表的数据,默认值为300
innodb_doublewrite = 1 # 为了解决 partial page write 问题 ,当mysql将脏数据flush到data file的时候, 先使用memcopy 将脏数据复制到内存中的double write buffer ,之后通过double write buffer再分2次,每次写入1MB到共享表空间,然后马上调用fsync函数,同步到磁盘上,避免缓冲带来的问题,在这个过程中,doublewrite是顺序写,开销并不大,在完成doublewrite写入后,在将double write buffer写入各表空间文件,这时是离散写入。如果发生了极端情况(断电),InnoDB再次启动后,发现了一个Page数据已经损坏,那么此时就可以从doublewrite buffer中进行数据恢复了
innodb_file_per_table # 修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间,开启方法innodb_file_per_table= 1,查询方法show variables like '%per_table%';
innodb_read_io_threads = 16 # 配置io线程数量
innodb_write_io_threads = 32 # 配置io线程数量
innodb_thread_concurrency = 16 # 限制并发线程的数量,一旦执行线程的数量达到这个限制,额外的线程在被放置到对队列中之前,会睡眠数微秒,可以通过设定参数innodb_thread_sleep_delay来配置睡眠时间,innodb_thread_concurrency的默认值为0,它表示默认情况下不限制线程并发执行的数量
innodb_purge_threads = 1 # 开启独立的碎片回收进程
[mysqldump]
quick # 加快mysql命令行下导出数据
max_allowed_packet = 16M # 服务器发送和接受的最大包长度
[mysql]
auto-rehash # 自动补全命令
[myisamchk]
key_buffer_size = 256M # 键高速缓存
sort_buffer_size = 256M # 一次性分配的内存大小
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
喜欢的朋友,别忘个给个关注
相关推荐
- 别再乱找了!这才是 Alist 本地安装挂载的正确打开方式
-
一、探秘Alist的神奇世界在这个数据爆炸的时代,我们的生活里充斥着各种各样的网盘服务,百度网盘、阿里云盘、腾讯微云等等,它们成了我们存储资料的得力助手。但随着网盘数量的增多,管理这些分散在不同平...
- 如何将数据从旧iPhone传输到新iPhone 16?这五个方法你必须知道!
-
前不久,苹果发布了备受期待的iPhone16系列,新机型搭载了更强大的芯片、更流畅的操作体验,还有备受热议的全新摄像系统。无论你是冲着A18仿生芯片,还是更丰富的动态岛功能,相信很多果粉早已跃跃欲试...
- 大数据传输的定义与大数据传输解决方案的选择
-
当我们需要处理大量的数据时,我们就要把数据从一个地方移动到另一个地方。这个过程就叫做大数据传输。它通常需要用到高速的网络连接、分散的存储系统和数据传输协议,以保证数据的快速、可靠和安全的移动。常用的大...
- 【工具】在线传输文件工具(在线文件互传)
-
前言在线传输文件工具主要是用于在不同的设备之间,如手机、电脑、平板等快速便捷地传送文件。告别使用USB传统传输文件的方式。...
- 如何使用 CAN-FD 在 LPC5500 上传输数据
-
目录1引言2CAN-FD3示例演示1引言...
- 轻松同步:将照片从三星手机传输到iPad的简便方法
-
概括想要在新iPad上查看三星照片吗?但是,如果您不知道如何将照片从三星手机传输到iPad,则无法在iPad上查看图片。为此,本文分享了7个有用的方法,以便您可以使用它们在不同操作系统之...
- 常见又地道的网络缩写:美剧中常说的SFW到底是个啥?
-
在这堂课中,让我们来学习更多在数字网络世界中常用的有趣网络用语。7shifts/unsplashhttp,https“http”和“https”是万维网(www)传输文件用的协议。“http”是hy...
- 每天学会一个计算机网络协议之FTP
-
开始行文之前提出一个问题,相信大家在看完本文后一定可以回答当我们在网站上填写注册信息的时候,需要我们上传照片,上传的过程发生了什么?下面引入我们的主角,FTP文件传输协议FTPFileTransf...
- 即用即走,这3款文件分享工具真香
-
打工人的日常,免不了「文件分享存储服务」的需求。我们一般会选择不同的网盘,但是大家也知道,网盘不是限速就是叫你充值。今天跟大家简单推荐3款文件分享工具,既可以免登录匿名使用,而且操作简单稳定性也不错。...
- 安卓手机里的文件和照片与Mac互传的办法
-
因为HandShake一段时间未更新,似乎目前不可操作。我一时间未找到更好的「传输」办法,经实践操作,向大家介绍一下「安卓手机」,包括「一加」、「索尼」,都可用此方法,来进行文件传输到Mac的...
- 软网推荐:同一个平台选择不同的传输方法
-
平时上网的时候,我们经常要分享一些文件给其他朋友,一般通过云服务平台来实现。今天笔者给大家介绍的Worksphere传输服务,它提供了两种不同的分享方式,方便我们根据实际需要进行选择。一个链接分享所有...
- 跨平台不限速的免费文件传输网站(跨平台不限速的免费文件传输网站是什么)
-
大家好,欢迎来到天天惠分享,不知道各位平时都是用什么方法来进行文件跨平台传输的呢?是百度网盘?微信还是QQ?亦或是有线传输。虽然这些方法都可以达到传输的目的,但都有各自的缺陷,使用起来一言难尽。比如百...
- 全网最全最详细的全平台文件传输方法,解决你文件传输问题(一)
-
前言想必现在大多数人文件传输的方法还是使用qq微信,但是qq微信的文件传输有时候真是,...
- 文件传输工具有哪些?这3款堪称办公必备!
-
在不同设备间,想把文件从一台设备传输到另一台,尤其是大体积文件,更是免不了用到文件传输工具,可以说文件传输工具已成为提升效率的关键载体。面对海量文档、设计素材、会议纪要的流转需求,传统邮件附件、U盘拷...
- 小白也能用的跨网文件交换系统!10款简单易上手的文件摆渡工具
-
跨网文件交换系统对于需要频繁在不同网络环境中进行文件共享的用户来说至关重要。以下是10款简单易上手的文件摆渡工具,适合小白用户使用,帮助他们高效地分享和传输文件。10款简单易上手的跨网文件交换工具1....
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)