热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql中语句一直执行不了_浅谈MySQL中sql语句执行

查询语句执行咱们首先来讲一下MySQL中一条查询sql的执行过程,希望通过这个过程说明可以很好的了解MySQL的运行机制。大体的过程是:首先客户端发送一

查询语句执行

咱们首先来讲一下MySQL中一条查询sql的执行过程,希望通过这个过程说明可以很好的了解MySQL的运行机制。

大体的过程是:首先客户端发送一条查询语句到连接器,在连接器通过权限认证后查看查询缓存(query cache),如果这个查询在该缓存中则直接返回结果,但是如果不在该缓存中则到解析器,解析器通过语法解析和词法解析查看查询语句是否合法并将该查询语句解析成MySQL可以读懂的语言,然后通过优化器对该查询sql进行优化,选择最优的执行计划,最后通过执行器对sql执行。

连接器:是连接外部请求到MySQL的server端,并对其进行密码认证和权限认证。

查询缓存:一般会选择关闭,因为当对该表进行更新操作时,该表上的所有的查询缓存都会被清除。

解析器:对sql进行语法解析和词法解析,将对人友好的sql解析成对MySQL自己友好的语句。同时判断该sql的语法和词法是否正确,如果不正确则直接返回报错信息。

优化器:MySQL通过优化器确定最优的执行计划

执行器:真正的执行sql,并返回给客户端查询结果

更新语句执行

一条update更新操作的执行过程:

整体的执行过程和查询语句执行过程相同,但是执行器的执行执行完sql读取到数据之后的数据处理部分是什么样子呢,我们可以大概聊一下。现在以innodb存储引擎为例,因为从5.7之后的版本默认的存储引擎就是innodb存储引擎,并且8.0后的版本取消了myisam存储引擎。

MySQL将从磁盘上的数据缓存到内存中,然后执行器执行update操作并将源数据记录在undo中,之前的数据以视图的方式保留下来,直到没有事务再应用该数据后才会被释放,这就是MySQL的MVCC(多版本并发控制)。

查询语句和更新语句真正不同的是redo log和binlog的更新。当一条更新语句执行时MySQL会有日志先行的策略,首先是写redo,其中redo记录的时数据的物理信息,它是循环覆盖写的。当更新操作记录到redo中后会是prepare状态,然后是binlog进行记录然后提交最后redo进行commit,这个过程就是MySQL的两阶段提交。其中Binlog记录的是更新语句的逻辑信息,redo可以保证数据库的crash恢复。这时候咱们就有一个疑问了,如果我更新一条数据整好redo log写入磁盘了但是binlog还没有来得急提交,这时候服务器宕机,当再次重启服务器和数据库后这个事务怎么办呢?这时候MySQL为了数据的一致性,就会根据redo进行回滚操作从而保证数据的一致性。但是如果binlog也提交了但是redo还没有来得及提交,数据库启动后会认为这个事务以经完成了所以就会执行commit提交该事务。

说到这儿就不得不说一下控制redo和binlog的参数:

MySQL中有一个很有名的日志提交参数配置就是双1配置:

sync_binlog=1:binlog会在每次提交事务都会记录在磁盘中。当该值为0时则由操作系统自己判断当不繁忙再进行落盘,当为N则指有N个事务才进行落盘操作

innodb_flush_log_at_trx_commit:当该值为1时指事务提交及时刷新redolog到磁盘中保证了数据的安全,当为0时指的时redo每秒刷新一次,当为2时指的时有操作系统自己判断什么时候刷新。



推荐阅读
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • MySQL PMM:MyISAM 和 Aria 存储引擎的性能优化
    本文探讨了 MyISAM 和 Aria 存储引擎在 MySQL 中的关键性能指标,包括密钥缓冲区效率、页面缓存读写性能以及事务日志同步策略。通过优化这些参数,可以显著提升数据库的整体性能。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
author-avatar
qm38dal
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有