MySQL架构和储存引擎
MySQL服务器整体架构如下:
连接层:
连接层的作用是处理客户端的连接,如何管理连接的。
网络端口和连接管理线程:
网络端口:一台服务器可以连接网络上多个端口的客户连接,只需要开放多个端口,只需要在选项文件中指定多个端口号即可。
连接管理线程:用来处理客户端连接的请求。一个连接管理线程可以处理所有的TCP/IP请求。
客户端连接线程管理:每一个客户端请求都会对应一个执行线程,用于处理身份验证和具体请求,执行线程也通过池化技术进行了缓存。用于提高线程的复用,避免频繁创建销毁线程。
系统变量thread_cache_size决定了线程缓存的大小,这个值在服务器启动的时候会自动的设置,单页可以通过选项文件指定大小,如果设置为0禁用缓存。
还可以通过设置thread_stack来调整堆栈大小,因为会设计到一些递归的原因。
还可以查看线程池中的线程数量和新创建的线程数:Theads_cached和Theads_created
链接量管理:
系统变量:max_connections控制服务器可以允许客户端连接的最大请求数,当达到man_connections后,多余的请求就会拒绝,同时会增加Connection_errors_max_connections的值。
实际上mtysqld允许最大连接数是max_connections+1,多余那个是给CONNECTION_ADMIN用的。即使普通连接达到了max_connections,但是管理员也可以连接到服务器进行管理操作。
服务层:是整个服务器服务的核心,主要包括服务管理和公共组件,noSQL和SQL接口,解析器和查询优化器,还有缓存等。
nosql和sql接口:用于接受客户端发送的各种SQL语句和命令,然后发送给其他部分,最后将收到的结果返回给客户端。
Paster(语法分析器):主要作用是将收到的sql语句中的关键字和自定义字段进行语法分析和词法分析,最终使其转化成一课解析树,词法分析就是对关键字进行提取,比如select、update、delete等,语法解析就是判断sql语句是否满足语法规则,如果不满足救会报错。
Optimizer(查询优化器):作用将解析树进行优化,将优化后的结果交给储存引擎api,然后进行查询,优化前后的查询结果一样,但是效率不一样。