MySQL日志设置优化

Linux公社(www.linuxidc.com)是专业的Linux系统门户网站,实时发布最新Linux资讯,包括Linux、Ubuntu、Fedora、RedHat、红旗Linux、Linux教程、Linux认证、SUSE

前言

在安装完MySQL之后,肯定是需要对MySQL的各种参数选项进行一些优化调整的。虽然MySQL系统的伸缩性很强,既可以在有很充足的硬件资源环境下高效的运行,也可以在极少资源环境下很好的运行,但不管怎样,尽可能充足的硬件资源对MySQL的性能提升总是有帮助的。在这一节我们主要分析一下MySQL的日志(主要是Binlog)对系统性能的影响,并根据日志的相关特性得出相应的优化思路。

日志产生的性能影响

由于日志的记录带来的直接性能损耗就是数据库系统中最为昂贵的IO资源。

在之前介绍MySQL物理架构的章节中,我们已经了解到了MySQL的日志包括错误日志(ErrorLog),更新日志(UpdateLog),二进制日志(Binlog),查询日志(QueryLog),慢查询日志(SlowQueryLog)等。当然,更新日志是老版本的MySQL才有的,目前已经被二进制日志替代。

在默认情况下,系统仅仅打开错误日志,关闭了其他所有日志,以达到尽可能减少IO损耗提高系统性能的目的。但是在一般稍微重要一点的实际应用场景中,都至少需要打开二进制日志,因为这是MySQL很多存储引擎进行增量备份的基础,也是MySQL实现复制的基本条件。有时候为了进一步的性能优化,定位执行较慢的SQL语句,很多系统也会打开慢查询日志来记录执行时间超过特定数值(由我们自行设置)的SQL语句。

一般情况下,在生产系统中很少有系统会打开查询日志。因为查询日志打开之后会将MySQL中执行的每一条Query都记录到日志中,会该系统带来比较大的IO负担,而带来的实际效益却并不是非常大。一般只有在开发测试环境中,为了定位某些功能具体使用了哪些SQL语句的时候,才会在短时间段内打开该日志来做相应的分析。所以,在MySQL系统中,会对性能产生影响的MySQL日志(不包括各存储引擎自己的日志)主要就是Binlog了。

Binlog 相关参数及优化策略

我们首先看看Binlog的相关参数,通过执行如下命令可以获得关于Binlog的相关参数。当然,其中也显示出了“innodb_locks_unsafe_for_binlog”这个Innodb存储引擎特有的与Binlog相关的参数:

比格设计 比格设计

比格设计是135编辑器旗下一款一站式、多场景、智能化的在线图片编辑器

比格设计 124 查看详情 比格设计

mysql> show variables like +——————————–+————+ | Variable_name | Value | +——————————–+————+
| binlog_cache_size | 1048576 |
| innodb_locks_unsafe_for_binlog | OFF |
| max_binlog_cache_size| 4294967295 |
| max_binlog_size| 1073741824 |
| sync_binlog| 0|
+——————————–+————+

“binlog_cache_size”:在事务过程中容纳二进制日志SQL语句的缓存大小。二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志(—log-bin选项)的前提下为每个客户端分配的内存,注意,是每个Client都可以分配设置大小的binlogcache空间。如果读者朋友的系统中经常会出现多语句事务的华,可以尝试增加该值的大小,以获得更有的性能。当然,我们可以通过MySQL的以下两个状态变量来判断当前的binlog_cache_size的状况:Binlog_cache_use和Binlog_cache_disk_use。

“max_binlog_cache_size”:和”binlog_cache_size”相对应,但是所代表的是binlog能够使用的最大cache内存大小。当我们执行多语句事务的时候,max_binlog_cache_size如果不够大的话,系统可能会报出“Multi-statementtransactionrequiredmorethan’max_binlog_cache_size’bytesofstorage”的错误。

“max_binlog_size”:Binlog日志最大值,一般来说设置为512M或者1G,但不能超过1G。该大小并不能非常严格控制Binlog大小,尤其是当到达Binlog比较靠近尾部而又遇到一个较大事务的时候,系统为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进入当前日志,直到该事务结束。这一点和Oracle的Redo日志有点不一样,因为Oracle的Redo日志所记录的是数据文件的物理位置的变化,而且里面同时记录了Redo和Undo相关的信息,所以同一个事务是否在一个日志中对Oracle来说并不关键。而MySQL在Binlog中所记录的是数据库逻辑变化信息,MySQL称之为Event,实际上就是带来数据库变化的DML之类的Query语句。

“sync_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/567599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 04:13:00
下一篇 2025年11月10日 04:19:58

相关推荐

  • MySQL中高效计算当前周数据总和的专业指南

    本教程旨在详细指导如何在MySQL数据库中高效地计算以周一为起始的当前周数据总和。文章将深入解析MySQL日期函数的使用,演示如何精确确定当前周的起始与结束日期,并构建优化的SQL查询语句以避免潜在的索引失效问题。此外,还将提供PHP集成示例,帮助开发者将此功能无缝融入Web应用中,实现动态展示当前…

    2025年12月12日
    000
  • 优化MySQL查询:解决子查询导致的性能问题

    优化MySQL查询:解决子查询导致的性能问题 本文将探讨如何优化MySQL中包含子查询的慢查询,特别是当子查询使用COUNT(*)时。我们将通过一个实际案例,介绍如何使用EXISTS语句替代COUNT(*)子查询,并配合适当的索引,从而显著提升查询性能。 问题分析 原查询语句如下: SELECT *…

    2025年12月12日
    000
  • php如何连接mysql数据库_php连接mysql数据库的PDO和mysqli方法对比

    答案:PHP连接MySQL主要使用PDO和MySQLi。PDO支持多数据库、预处理防注入,适合需迁移的项目;MySQLi专为MySQL优化,性能更好,支持更多原生特性。根据是否需要多数据库兼容及功能需求选择。 PHP连接MySQL数据库主要使用两种方式:PDO(PHP Data Objects)和M…

    2025年12月12日
    000
  • PHP动态网页XML数据解析_PHP动态网页XML文件解析处理教程

    PHP解析XML时,SimpleXML适合简单读取,DOMDocument用于复杂操作,XMLReader处理大文件;需防范XXE和XML炸弹,禁用外部实体并做好错误处理。 PHP动态网页解析XML数据,核心方法主要围绕SimpleXML和DOMDocument两大PHP内置扩展。前者以其简洁直观的…

    2025年12月12日
    000
  • MySQL网络延迟性能优化_MySQL减少响应时间方法

    mysql网络延迟问题可通过多层面诊断与优化解决。1.诊断需从网络、mysql状态、数据包分析及系统资源四方面入手;2.调整tcp_nodelay、socket_buffer_size、max_allowed_packet等参数;3.使用连接池、长连接、查询缓存减少连接开销;4.sql优化包括精简字…

    2025年12月4日 数据库
    200
  • mysql查询响应如何加速_mysql优化漏斗模型

    先检查硬件与系统资源,确认磁盘IO、内存和CPU是否瓶颈,避免盲目优化SQL。 MySQL查询响应变慢,往往不是单一问题导致的。要系统性优化,可以借助“优化漏斗模型”——从宏观到微观逐层排查,过滤掉非关键因素,精准定位瓶颈。这个模型帮助你按优先级处理问题,避免盲目调优。 1. 检查硬件与系统资源 在…

    2025年12月2日 数据库
    000
  • MySQL性能优化之一:提高MySQL并发能力的思路

    1、使用行级别锁,避免表级别或页级别锁尽量使用支持行级别锁的存储引擎,如InnoDB;只在读操作显著多于写作的场景中(如数据仓库类的应用)使用表级别锁的存储引 1、使用行级别锁,避免表级别或页级别锁 尽量使用支持行级别锁的存储引擎,虚拟主机,如InnoDB;只在读操作显著多于写作的场景中(如数据仓库…

    2025年12月2日
    000
  • 如何通过索引对MySQL优化

    %ignore_a_1%可对mysql进行优化,当数据表的数据什分庞大时就可以通过建立索引来解决这个问题,索引将表中的数据按照字母的顺序存储在单独的位置上来优化数据库性能 MySQL中的数据库索引可以帮助我们优化性能,对于小型的数据表来说可能差异性很小但是对于拥有大量数据的表来说,索引有明显的提高性…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化网络延迟影响

    降低MySQL网络延迟需从连接管理、数据传输和架构设计入手,使用连接池减少握手开销;2. 通过批量操作、存储过程减少往返次数;3. 启用压缩协议减小传输体积;4. 优化查询以减少数据传输量;5. 将数据库部署在靠近应用的节点或使用本地只读副本缩短物理距离,提升响应速度。 MySQL的性能不仅依赖于服…

    2025年12月2日 数据库
    000
  • mysql如何优化OR条件_mysql OR条件查询优化方法

    使用UNION替代OR可提升索引效率,确保OR字段均有索引以启用index_merge,合理创建复合索引,重写查询为IN或范围条件减少OR使用,结合EXPLAIN分析执行计划优化查询路径。 在MySQL中,OR条件查询常常会导致索引失效,从而引发全表扫描,影响查询性能。优化OR查询的关键在于确保查询…

    2025年12月2日 数据库
    000
  • mysql数据库优化的基本概念_mysql数据库优化概念方法

    MySQL优化需从索引、SQL语句、表结构和配置参数入手。1. 合理创建索引,遵循最左前缀原则,避免冗余;2. 优化SQL,避免全表扫描和函数操作导致索引失效;3. 设计规范的表结构,选择合适数据类型并适度反范式化;4. 调整innodb_buffer_pool_size、max_connectio…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化锁等待_mysql锁等待优化技巧

    答案:优化MySQL锁等待需缩短事务周期、合理使用索引、选择合适隔离级别并避免死锁。具体包括避免长事务、移出非数据库操作、及时提交、批量更新;确保WHERE条件走索引,避免全表扫描;优先使用READ COMMITTED减少间隙锁;统一访问顺序降低死锁风险,应用层实现重试机制。定期分析执行计划与死锁日…

    2025年12月2日 数据库
    000
  • mysql如何优化排序文件_mysql排序文件优化方法

    优先创建联合索引(如idx_city_age)使排序字段有序,避免filesort;确保索引顺序与ORDER BY一致,覆盖查询字段减少回表;MySQL 8.0+支持混合排序方向;无法避免时调大sort_buffer_size至1MB~8MB减少磁盘I/O;用EXPLAIN FORMAT=JSON检…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化数据库性能_mysql性能优化方法

    数据库性能优化是提升系统响应速度和稳定性的关键环节。在MySQL中,合理的配置、索引设计和查询优化能显著提高运行效率。以下是一些实用且有效的MySQL性能优化方法。 合理使用索引 索引是提升查询速度最直接的方式,但不恰当的使用反而会拖慢写入性能。 建议: 为频繁用于WHERE、JOIN、ORDER …

    2025年12月2日 数据库
    000
  • 如何在mysql中优化多表连接_mysql多表连接优化技巧

    答案:优化MySQL多表连接需确保连接字段有索引、提前过滤数据、选择合适JOIN类型并利用EXPLAIN分析执行计划。具体包括在ON字段创建索引(如表B.a_id),减少扫描行数,优先使用INNER JOIN,避免全表扫描和临时表,通过执行计划持续调优以提升性能。 在MySQL中进行多表连接查询时,…

    2025年12月2日 数据库
    000
  • 如何在mysql中使用前缀索引_mysql前缀索引优化方法

    前缀索引是对字符串前N个字符创建索引,用于节省空间并提升查询效率,适用于VARCHAR等长字段;通过计算不同长度下的唯一值比例选择最佳前缀长度,确保高选择性;但不支持ORDER BY、GROUP BY和覆盖索引,需结合业务数据分布权衡长度。 在MySQL中,当字段内容较长时(如VARCHAR(255…

    2025年12月2日 数据库
    000
  • mysql中查询优化器的操作

    查询优化器的核心任务是生成高效执行计划,通过分析语法树、生成候选方案、估算成本并选择最优路径来提升SQL执行效率,其决策受索引统计、WHERE条件、JOIN顺序和数据类型匹配影响,开发者可通过EXPLAIN分析、强制索引、调整optimizer_switch等手段干预,需注意统计信息更新与复杂查询的…

    2025年12月2日 数据库
    000
  • mysql索引覆盖如何做到_mysql覆盖索引解析

    覆盖索引是指查询所需字段均包含在某个索引中,无需回表获取数据。例如在users表中对(name, age)建立联合索引后,执行SELECT name, age FROM users WHERE name = ‘John’可直接从索引获取数据,执行计划的Extra显示Using…

    2025年12月2日 数据库
    000
  • MySQL优化之分区表_MySQL

    当数据库数据量涨到一定数量时,性能就成为我们不能不关注的问题,如何优化呢? 常用的方式不外乎那么几种:   1、分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多。     优点:提高并发量,减小锁的粒度    缺点:代码维护成本高,相关sql都需要改动   2、分区,所有的数据还在一个…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化OR条件_mysql OR条件优化方法

    优化OR查询需确保各条件字段有独立索引,优先用UNION ALL拆分不同字段的OR,同字段多值OR改写为IN,避免函数导致索引失效。 在MySQL中,OR条件常常会导致查询性能下降,尤其是在没有合理索引支持的情况下。MySQL执行带有OR的查询时,优化器可能无法有效使用索引,甚至会退化为全表扫描。因…

    2025年12月2日 数据库
    000

发表回复

登录后才能评论
关注微信