一 为什么需要数据库连接池

每一个线程都需要通过JDBC驱动去和数据库建立网络连接,然后执行SQL,SQL执行完毕,线程销毁,如果并发量很大的时候,就需要不同的建立网络连接,然后销毁连接,并且建立网络连接也是需要耗时的,所以效率低下。所以使用数据库连接池,可以循环利用数据库连接。

二 数据库MySQL的架构

MySQL服务器架构主要分为三层:应用层、逻辑层和物理层。

应用层:主要负责和客户端进行交互,建立连接,响应请求

逻辑层:主要负责SQL查询、事务管理、恢复等

物理层:主要负责写日志和数据

MySQL架构下,大致查询流程:

#1 工作线程从连接器获取SQL数据

#2 工作线程把SQL语句交给SQL接口

#3 SQL接口先从查询缓存看要查询的SQL语句是否命中

查询缓存一般不启用,启用也不会给太大,几十兆就够了,尤其是表增删改比较频繁;另外SELECT语句包含一些变化的函数比如时间戳等也不会缓存

#4 如果没有命中则通过SQL解析器,解析SQL语句,然后将解析的SQL语句根据语法规则构建语法树。

#5 将语法树交给查询优化器,查询优化器可能生成多条执行计划,然后选择最优的一条,或者成本最优的那条数据

#6 SQL执行器执行SQL执行计划,调用存储引擎进行查询

MySQL深度剖析之MySQL架构(2021)相关推荐

  1. MySQL深度剖析之索引专题(2021)

    9.1 为什么需要使用索引 第一:减少了MySQL需要扫描的数据量,尤其是全表扫描 第二:随机IO变成顺序IO,提升查询速度 可以快速匹配where子句.排序和分组也可以使用索引,匹配原则最左匹配.特 ...

  2. MySQL深度剖析之事务隔离级别和锁机制(2021)

    一 事务隔离级别和锁机制 1.1 多个事务并发修改同一条数据或者对同一条数据并发读写存在哪些事务并发问题 1.1.1 脏读(未提交读) A事务读取了别的事务还未提交的更新,而B事务是有可能回滚的. 1 ...

  3. MySQL深度剖析之数据在磁盘上存储(2021)

    一 数据在磁盘上存储格式(row format) 表中的数据在磁盘上存储是有格式的,可以在创建表的时候通过row_format指定,比如MySQL5.0之前的reduntant,MySQL5.0 之后 ...

  4. MySQL深度剖析之Buffer Pool专题(2021)

    一 为什么需要Buffer Pool 如果我们每一次查询或者更新都需要到磁盘找到对应数据页,每次的都需要从磁盘加载,那么性能必定是很差的.所以将一些从磁盘加载的数据页,放入到内存缓存起来,而不用每次都 ...

  5. MySQL深度剖析之undo log redo log binlog专题(2021)

    因为每次对磁盘随机读写影响性能,尤其是高并发的时候,所以引入了Buffer Pool, 即只要更新Buffer Pool中的记录,则算更新成功,那如果更新完了还没有flush到磁盘则宕机了,此时内存的 ...

  6. MySQL深度剖析之SQL语句更新流程(2021)

    #1 线程开始执行SQL更新请求之前,会创建事务,并且为当前线程分配一块内存空间叫做binlog cache 注意:binlog cache 是每一个线程分配一个:binlog cache大小受bin ...

  7. 深度剖析CloudFoundry的架构设计

    VMware在今年4月份突然发布了业内第一个开源的PaaS--CloudFoundry.发布至今的这几个月里,笔者一直关注它的演进,并从它的架构设计中获益良多,觉得有必要写出来与大家分享一下. 本文会 ...

  8. 深度剖析——超融合架构应用与实践分享

    大家好,我是青云的 lester ,目前负责青云QingCloud 的超融合产品系列.今天由我向大家分享 QingCloud 对超融合架构的理解,以及在超融合架构方面的实践经验. 今天分享的话题主要分 ...

  9. 5 个维度深度剖析「主从架构」原理

    为了保证缓存的高可用,我们经常听到采用主从架构来保证高可用,那如何去理解主从架构核心原理呢? 这次我们还是用最熟悉的 Redis 缓存来理解主从架构,只要理解了一个主从架构,其他技术的主从架构都是一通 ...

最新文章

  1. i2s传输中左右声道数据格式
  2. C语言malloc和calloc的区别
  3. 游戏中DDA算法和Bresenham算法的应用
  4. wordpress支持MySQL5.5_wordpress数据库版本为5.5以上导出不能在5.5以下的版本导入的问题解决...
  5. linux文件句柄满了 现象_Linux 离奇磁盘爆满,如何解决? | 原力计划
  6. oracle的nvl和nvl2是什么函数,两者区别
  7. HDU5763 another meaning -(KMP+DP)
  8. 【NOIP 模拟赛】Evensgn 剪树枝 树形dp
  9. 群晖6.1安装php3.6_黑群晖 DSM6.1安装简明教程(附下载)
  10. ollydbg调试使用
  11. PHP刷步数,微信支付宝修改步数刷步源码/带卡密功能PHP程序
  12. 第二章(第四部分) 黑暗之王的分身
  13. openGL控制FPS (每秒传输的帧数)
  14. 计算机组成原理是答案,计算机组成原理(上)_答案mooc
  15. C#【时间操作类】使用TimeSpan计算时间差
  16. 报错:The path is not a valid path to the xxx kernel headers.
  17. Access数据库文件HeroDB.MDB用什么工具可以打开呢?
  18. 简单容易的计算机音乐,简单易上手的小型音乐制作软件 1BITDRAGON 升级 2.0
  19. 本地使用shell脚本批量导入导出镜像文件
  20. 我的爱好作文玩计算机800,我的兴趣爱好

热门文章

  1. linux脚本硬盘,Linux mount挂载和卸载硬盘脚本分享
  2. PyTorch中的model.modules(), model.children(), model.named_children(), model.parameters(), model.nam...
  3. linux定时器跑命令,linux下运行定时器(cron/centos/js脚本)
  4. ubuntu用户目录安装pip(无root权限)
  5. Java 并发编程之 CopyOnWriteArrayList
  6. mysql 数据透视_sql怎么做数据透视表
  7. maven导入jar失败
  8. html只读下拉框,Html.DropDownList – 禁用/只读
  9. android 动态绘制布局,Android代码和绘制曲线中按钮和绘图板的动态布局
  10. Python scipy拟合分布