MYSQL实战-1.mysql基本架构

 

一、mysql可分为server层和存储引擎
         1.1 server层:
链接器、查询缓存、分析器、优化器 、执行器、包含全部内置函数(日期,时间,数学、加密函数),全部跨存储引擎的功能都在此层,好比存储过程、触发器、视图等
1.1.1 链接器:
负责跟客户端创建链接、获取权限、维持和管理链接
mysql -h$host -P$port -u$user -p$password
备注:
 a、sleep状态是链接完成,但没有后续操做,此链接就会处于空闲状态;
 b、若是在链接过程当中对当前用户的权限作了修改,也须要在断开从新链接以后此权限才生效;
 c、长链接与短链接:长链接使用过多会出现mysql内存占用太高致使mysql异常重启的状况,解决方法能够是:按期断开长链接,5.7及以上,则能够经过mysql_reset_connection来从新初始化链接缓存,这个过程不会重连和从新作权限验证,但会恢复到刚刚建立完的状态;    
1.1.2 查询缓存:
a. 创建链接以后便会去查询缓存,缓存会以key-value对的形式保存,key是查询语句,value是查询结果。若查询命中缓存,则不须要后续复杂的逻辑。
b. 但查询缓存的失效特别频繁,只要有对一个表的更新,那么此表的缓存就会所有清空,所以不建议使用查询缓存。除非是表的数据变更频率不高的,如系统配置表
c.5.8.0已彻底将查询缓存模块删掉
1.1.3 分析器:内建解析树,数据表和数据列是否存在, 别名是否有歧义,若是经过创建一个新的解析树,再提交给优化器
a.词法分析、语法分析
1.1.4 优化器
优化器决定最优sql执行顺序,如最优索引,join表的顺序等
1.1.5 执行器
查询对当前表是否有执行权限,如有权限,打开表,根据表引擎接口执行sql
1.2 存储引擎负责数据的存储和提取,包含InnoDB,MyISAM,Memry等,mysql5.5.5版本以上默认InnoDB

备注:
一、wait_timeout针对非交互式链接;
     interaction_timeout针对交互式链接;
     经过mysql客户端链接数据库是交互式链接,经过jdbc链接数据库是非交互式链接;
二、执行完成后写入缓存

问题:
一、为何对权限的检查不在优化器以前作?
答:触发器是在执行器阶段肯定的
二、我建立了一个没有select权限的用户,执行select * from T where k=1,报错“select command denied”,并无报错“unknown column”,是否是能够说明是在打开表以后才判断读取的列不存在?
答:这是一个安全问题,当既没有查询权限,where条件的字段不存在时,未避免泄露太多信心,会直接判断无权限
三、分析器到查询缓存的那个箭头表示什么意思?
答:更新完回来失效缓存;
四、基本架构图中,分析器指向了查询缓存,是这时候把KEY放入缓存的吗?执行器不指向缓存Value是何时放入缓存的?
答:其实执行完会写入,避免图乱,箭头去掉了,文中:执行完成后,结果写入查询缓存;

学习笔记:非原著mysql

相关文章
相关标签/搜索