MySQL知识整理-基础

第一讲:基础架构:一条SQL查询语句是如何执行的?

架构

在这里插入图片描述
MySQL分为Server层和存储引擎层两部分。
Server层包括连接器、查询缓存(在MySQL8.0被移除)、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。从MySQL5.5.5版本开始InnoDB成为了默认存储引擎。InnoDB提供了事务支持、行级锁定和外键约束等功能,非常适合处理大量数据的应用程序。
可以在创建表的时候选择不同的存储引擎,例如CREATETABLEmy_table(…)ENGINE=InnoDB;

从上图可以看出,不同的存储引擎共用一个Server层,也就是从连接器到执行器的部分。

尽量减少长连接的原因和方案

长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。
短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。
长连接可以减少频繁建立连接的开销,但它可能导致随着时间和数据交换的增加,数据库占用的内存越来越大,因为每个连接都会消耗资源。如果不及时释放资源,确实可能会出现内存溢出的情况,导致操作系统为了保护系统稳定性,而触发OOM(OutOfMemory)机制杀掉占用大量内存的进程,MySQL就可能会因此异常重启。
1.定期断开长连接或者定期重置连接,通过执行mysql_reset_connection()来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。
2.设置非交互式连接(编程)在关闭之前等待活动的秒数wait_timeout
3.设置交互式连接(shell)未发出任何请求并处于空闲状态时,超过interactive_timeout设置的时间后,MySQL服务器会自动关闭该连接
4.通过定期执行FLUSHHOSTS来清理错误的连接
5.在编程中,使用连接池的策略。连接池可以提供自动的连接管理功能,包括最大连接数的限制、连接的创建和销毁、连接的获取和释放,并且可以自动处理长时间不活跃连接的断开和重置。

为什么尽量不要依赖查询缓存

查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。MySQL也提供了这种“按需使用”的方式。你可以将参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,用SQL_CACHE显式指定

select SQL_CACHE * from T where ID = 10;

MySQL8.0开始没有查询缓存功能

上一篇:设计模式示例-单例模式示例


下一篇:跟TED演讲学英文:The dark side of competition in AI by Liv Boeree