中专网站建设与管理就业前景,如何做内部优惠券网站,wordpress 504错误,陕西省建设执业中心网站MySQL服务器总共有四层:连接层,服务层,存储引擎层,文件系统层.连接层:就是控制客户端连接的,MySQL可以开启多个端口号,外部程序都可以进行连接.
连接层会进行权限校验并保存客户端的连接信息,通过池化技术实现线程重用,以及根据具体的配置限制连接数量.通过连接管理器线程处理端…MySQL服务器总共有四层:连接层,服务层,存储引擎层,文件系统层.连接层:就是控制客户端连接的,MySQL可以开启多个端口号,外部程序都可以进行连接.连接层会进行权限校验并保存客户端的连接信息,通过池化技术实现线程重用,以及根据具体的配置限制连接数量.通过连接管理器线程处理端口上的客户端连接请求1.在所有平台上用一个管理器线程处理所有的 TCP/IP 连接请求。2.在 Unix 上管理器线程还可以处理其他Unix socket 连接请求。3.在 Windows 上使用一个管理器线程处理通过Shared-memory方式连接请求使用另一个管理器线程处理Named-pipe方式连接请求。4.在所有平台上可以额外启用一个端口用于接受针对管理的 TCP/IP 连接请求管理端口的连接可以使用处理普通 TCP/IP 请求的管理器线程也可以通过选项文件配置单独的线程(不做论)。连接管理器线程在接收到每个客户端连接后把请求转发到真正的执行线程每个请求都对应一个执行线程该线程处理连接的身份验证和具体请求。执行线程使用线程池技术进行缓存当一个请求需要处理时先从线程池中查找是否有可用的线程如果没有则新创建一个当连接结束时如果线程池没有满则把当前线程放入线程池主要的作用是提高线程的复用减少创建线程造成的系统开销从而提高效率。可以通过以下几个系统变量和状态变量控制和监视服务器管理客户端连接的线程1.系统变量thread_cache_size 决定了线程池缓存的大小。默认情况下服务器在启动时会自动调整这个值但也可以通过选项文件明确指定大小值为 0 时禁用缓存此时为每个新连接创建执行一个线程并在连接断开时释放2.有些复杂的SQL语句在执行过程中可能会有深层递归从而消耗更多的内存通过设置thread_stackN 调整线程堆栈大小3.要查看缓存中的线程数以及超过缓存数后新创建的线程数通过状态变量 Threads_cached 和Threads_created 查看系统变量max_connections 可以控制服务器允许同时连接的最大客户端数当服务器达到max_connections 指定的连接数时会拒绝所有新的连接请求同时会增加状态变量Connection_errors_max_connections 的值mysqld实际上允许 max_connections1 个客户端连接。额外的连接为拥有CONNECTION_ADMIN 权限的帐户(管理员)使用即使普通连接达到了max_connections 的数量管理员也可以连接到服务器进行管理操作;在部署为主从复制的环境中从节点的连接数也会计入 max_connections 中如果连接达到上限主从复制将会失败max_connections 具体数据和服务器的硬件有关比如可用的内存、每个连接消耗的内存每个连接的工作负载、响应时间、可用文件描述符的数量等等服务层数据库服务层是整个数据库服务器的核心主要包括了服务管理和公共组件、NoSQL和SQL接口、解析器、查询优化器和缓存等部分下面我们分别介绍每个部分的作用NoSQL和SQL接口主要负责接收客户端发送的各种SQL语句和命令并将SQL发送到其他部分然后把接收到的结果返回给客户端。语法分析器的主要作用是将客户端发来的SQL语句中的关键字和自定义字段进行提取、解析最终将 SQL 语句转换为一棵解析树分析的过程中包含词法分析和语法分析词法分析主要是对关键字进行提取比如select/update/delete/create... 语法分析主要判断 SQL 语句是否满足语法规则如果语法错误则异出异常也就是我们常见的ERROR 1064 (42000): You have anerror in your SQL syntax。Optimizer(查询优化器):通过语法校验的SQL语句将进入查询优化器处理阶段查询优化器会将解析树转化为查询计划一般情况下一条查询可以有很多种执行方案查询优化器会根据执行计划匹配合适的索引选择最佳的执行方案最终把确定要执行的SQL交给执行器调用存储引擎API。MySQL的缓存主要的作用是为了提升查询的效率当服务器接收到一个select 查询语句时会先进入缓存查询当前SQL语句在缓存中是否存在缓存以key 和value 的形式存储key是具体的SQL语句value是结果的集合如果命中缓存直接返回结果无法命中缓存则进入分析器进行正常查询流程。这里需要说明的是缓存数据对应的数据在被更新之后将会失效尤其在写多读少的场景中缓存会频繁失效与新增命中率非常低因此MySQL5.6之后服务层缓存功能默认关闭而且在MySQL8.0中服务层缓存被官方删除这里不做过多讨论。存储引擎存储引擎是处理不同表类型SQL操作的MySQL组件。MySQL服务器采用可插拔的存储引擎架构在服务器运行时可以动态的加载和卸载。查看当前服务器支持哪些存储引擎可以使用 SHOW ENGINES 语句 Engine 表示存储引擎的名称 Support 表示当前服务器是否支持值分别为 YES 、NO 和DEFAULT 分别表示支持、不支持和当前设置或默认引擎InnoDB是一款兼顾高可靠性和高性能的通用存储引擎。在MySQL8.0中默认的存储引擎是InnoDB,使用 CREATE TABLE 语句创建表时在没有修改默认存储引擎或明确指定其他存储引擎时将创建一个InnoDB 的表。InnoDB 的主要优势• DML操作遵循ACID模型事务具有提交、回滚和崩溃恢复功能以保护用户数据。• 如果发生意外而崩溃无论当时数据库发生了什么都不需要在重启数据库后执行任何特殊操作。InnoDB 的崩溃恢复功能会自动完成崩溃之前提交的更改并撤消崩溃前正在进行但未提交的更改从而允许我们从中断的地方继续执行。备份与恢复专题介绍• 支持行级锁提高了多用户的读取并发性和性能。事务和锁专题中介绍这里说不支持集群模式,是指Innodb不是用来专门做集群的存储引擎,但是支持集群的,就比如说主从复制• InnoDB 存储引擎维护了一个自己的缓冲池访问数据时在内存中缓存表和索引数据对于经常使用的数据直接从内存中处理大幅提升了效率。在专用数据库服务器上通常会将高达 80% 的物理内存分配给缓冲池。• InnoDB表优化了基于主键的查询每个InnoDB表都有一个称为聚簇索引的主键索引实现通过最少的磁盘I/O完成对主键的查找。• 为了保持数据完整性 InnoDB 支持 FOREIGN KEY (外键)约束。在进行插入、更新和删除数据时确保相关表之间的一致性• 当从表中反复查询相同的行时自适应哈希索引会自动接管这些查询此时查询效率和哈希表相同。如果InnoDB不是默认的存储引擎可以通过在命令行指定选项--default-storageengineInnoDB 或者在选项文件的[mysqld] 节点定义default-storageengineInnoDB 并重新启动服务器来设InnoDB 存储引擎由于业务实际需要服务器默认存储引擎不是InnoDB时想要创建一个InnoDB表可以在使用CREATE TABLE 语句创建表时明确指定InnoDB存储引擎当然这样方式也可以指定其他任何支持的存储引擎这里其他就不介绍了文件系统层这个就不详细说,看MySQL数据目录就行了.