zoukankan      html  css  js  c++  java
  • 第23章 MYSQL结构

    第23 章  MYSQL 结构:
    
    
    一个 MYSQL 安装包括一批程序 ,一起运行 使用客户端/服务器结构。
    
    
    这章描述了全部的特征,常用的操作的功能 这个章节包括以下几个主题:
    
    
    
    客户端/服务器 结构设计
    
    
    通讯协议客户端可以连接到server
    
    server的存储引擎和它的SQL解析器和优化器之间的关系
    
    
    服务器如何使用disk和内存
    
    23.1  客户端/服务器 概要
    
    MYSQL 数据库服务器 使用客户端/服务器结构。
    
    
    服务器是主要的程序来管理数据库的内容,客户端程序是用来连接到服务器来重新得到或者修改数据。
    
    
    
    MYSQL 也包括非客户端特性的程序和脚本
    
    因此,一个完整的MYSQL的安装有3类组成
    
    
    MYSQL 服务器:这个是mysqld程序来管理数据库和表。 很多用户选择2进制(预编译)MYSQL描述
    
    包含一个准备运行的服务器
    
    
    客户端程序: 那些程序用于和server 通讯的通过网络连接的请求。比如你可以使用MYSQL客户端来发送
    
    查询到服务器,返回服务器返回查询结果。
    
    
    客户端程序包括 
    
    非客户端特性程序:  那些程序通常用于特定的目的,它们不连接到server.
    
    
    比如,mysqld_safe 是一个用于启动和监控server的脚本。
    
    
    myisamchk 是单独的功能用于chekc和修复。它直接访问和修改表文件
    
    
    实用工具比如myisamchk 必须小心实用,避免意外的交互作用
    
    
    额外的类型程序也被描述, MYSQL AB也提供了许多的接口用于第三方客户端连接访问。
    
    
    MYSQL 数据库系统有几个重要的特性 用于多种环境的计算:
    
    
    MYSQL 是支持多个平台的系统,可以运行多种Windows Unix 和Linux
    
    
    
    MYSQL 可以工作在分布式环境,一个客户端程序可以连接本地到的运行的server 或者远程的server
    
    
    MYSQL 提供跨平台的操作性
    
    23.3  通讯协议
    
    一个MYSQL 客户端程序可以连接到同一机器的server.这个叫本地连接,
    
    
    一个客户端也可以连接到远端的机器,这个叫远程连接。
    
    
    MYSQL 支持多种协议连接
    
    
    Protocol                                Types of Connections         支持的平台
    
    TCP/IP                                  Local,remote                  ALL
    
    
    一些协议使用与连接本地和远程数据库。有些只能连接本地的,有些只能连接指定的操作系统。
    
    
    TCP/IP 连接适用于任何MYSQL server
    
    23.3 SQL 解析和存储引擎
    
    
    客户端从表里检索数据或者改变表里的数据,通过发送请求给服务器
    
    比如SELECT INSERT 或者DELETE 服务器执行每个语句使用 2层处理模型:
    
    
    
    上层包括SQL解析和优化, 服务器解析每个语句查看是哪种类型的请求,然后使用优化器来决定执行该语句
    
    要多少成本,然而,这层不直接和语句设计的表交互。
    
    
    
    下层有一些存储引擎构成,服务器使用一个模块化结构:
    
    每个存储引擎是一个软件模块被用于管理特定类型的表。
    
    存储引擎相关的表直接访问它来存储或者检索数据。MYISAM,MEMORY和InnoDB是一些可用的引擎
    
    
    模块使用的方法允许存储引擎更简单的选择在配置时间点,新的引擎可以被相当简单的增加。
    
    
    就绝大部分而言,SQL层是自由的依赖哪种存储引擎。
    
    
    这意味着客户端通常不需要关心哪种引擎被调用在处理SQL语句的时候,可以访问和操作表使用
    
    数据不需要关系哪种引擎管理它们。
    
    对于SQL语句引擎独立的异常情况包括:
    
    
    CREATE TABLE 有一个ENGINE选项可以使你指定哪种引擎
    
    ALTER TABLE 有一个引擎选项可以使你转换表使用不同的引擎。
    
    
    一些索引类型只能适用于某些存储引擎。比如,只有MYISAM 引擎支持full-text或者spatial indexes
    
    
    COMMIT和ROLLBACK 起作用只对事务存储引擎InnoDB 起作用
    
    23.4  Mysql 如何使用Disk Space
    
    MYSQL 服务器使用磁盘空间有几种方式,最主要的是目录和文件存放在一个单独的目录
    
    叫做服务器的数据目录。 服务器使用这个目录存储所有的东西:
    
    
    数据库目录,每个数据库相应的到一个单独的目录在数据目录下,
    
    
    不管你创建了哪种类型的表。比如,每个数据库代表一个目录 不管它是否包含MYISAM表
    
    InnoDB表 ,或者是2个的混合。
    
    
    表存在的文件格式(.frm files)包含了表结构的描述,每个表有它自己的.frm 文件,
    
    
    位于相应的数据库目录。这个不管使用哪种存储引擎。
    
    
    
    数据和索引文件被创建用于每个表通过一些存储引擎,放置在相应的数据库目录。
    
    
    比如,MyISAM存储引擎为每个表创建一个数据文件和一个索引文件。
    
    
    
    InnoDB 存储引擎有它自己的表空间和log files 表空间包含了Innodb 表的数据和索引信息
    
    
    还有undo logs 用于事务回滚必须的。log files 记录了提交事务的信息,用于确认没有数据丢失发生。
    
    
    默认,表空间和log files 是位于数据目录。默认的表空间文件是命名为ibdata1
    
    
    默认的log files 是命名为ib_logfile0和ib_logfile1(配置InnoDB来使用一个表空间一个表)
    
    
    InnoDB创建表空间文件用于指定的表。
    
    
    Server log files 和状态文件 这些文件包含服务器处理语句的信息。
    
    Logs 用于复制和数据恢复,为了得到优化器性能的信息,诊断是否操作文件发生。
    
    
    23.5  MYSQL如何使用内存:
    
    MYSQL SERVER内存使用包括数据结构,数据库服务器设置来管理客户端来处理数据库的内容。
    
    服务器分配各种各样的内存:
    
    
    线程句柄: 服务器是多线程的,一个线程想一个小的进程运行在服务器内部。
    
    
    用于每个客户端的连接,服务器分配线程来处理连接。因为性能问题,
    
    服务器维护一个小的线程句柄的cache.如果cahce没有满,当客户端断开连接,线程被放置到cache里用于以后使用。
    
    
    如果cache 满了当客户端连接时,一个cache里的线程被重用来处理连接。线程句柄重用来避免
    
    
    重复运用。
    
    线程也可能创建用于其他目的,单独的存储引擎可能用于创建自己的线程,和复制使用的线程。
    
    
    线程使用多个buffers(caches)来报纸内存里的信息用于避免磁盘访问:
    
    授权表buffers:授权表存储MYSQL用户账号信息和权限。服务器加载了一份授权表到内存
    
    
    用于快速访问控制检查。检查客户端每次查询访问,在内存了查找权限信息相比在磁盘里查询,
    
    降低磁盘负载。
    
    
    
    一个key buffer 持有索引块为MYISAM 表,通过cache 索引块,
    
    服务器能避免从磁盘读取索引的内存,通过索引的检索和其他索引相关的操作 比如排序
    
    
    对比处理MYISAM 索引,没有指定用于cahce MYISAM表的记录 因为MYSQL依赖操作系统来
    
    提供有效的cache 当读取表的内容的时候。
    
    表cahce 持有描述符为打开的表,对于频繁使用的表 保持描述符在cache里可以避免重复的打开表。
    
    
    
    
    服务器支持 查询cache来加快处理查询,使用查询cache.
    
    
    
    host cache 持有主机名解析的结果
    
    InnoDB存储引起记录当前内存buffer里的事务信息,当一个事务提交,log buffer被刷入InnoDB log files,
    
    来避免磁盘上的记录用于重新记录事务如果主机发生crash.如果事务用回滚来代替,刷回磁盘就根本没必要做。
    
    
    
    
    
    内存存储引擎创建表在内存里,这些表很快因为没有内存磁盘的准换
    
    
    服务器可能创建内部的临时表在内存里,由于查询处理过程。如果这些表的大小超过了tmp_table_size系统允许的值
    
    服务器转换为一个MYISAM格式的表在磁盘上 增加它的Created_tmp_disk_tables
    
    
    服务器管理几种buffers 为每个客户端连接。一个作为通讯连接的buffer用于和客户端交换信息
    
    
    另一个buffer用于管理每个连接用于读取表和执行关联和排序操作。
    
    
    
    
    
    几个SHOW 语句可以让你检查各种相关内存的大小参数,SHOW VARIABLES显示服务器系统变量
    
    你可以看到服务器是如何配置的。
    
    
    SHOW STATUS 显示服务器状态变量,状态用于检查cache的运行时间状态
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    MyEclipse 中文注释乱码
    MyEclipse 代码提示设置
    Java 不使用科学计数法表示数据设置
    Java 环境变量配置
    DateTime & UTC 相互转化
    Redis--Latest Windows Version
    Oracle 锁模式
    <a>链接添加样式问题
    PowerDesigner导出表到word
    HelloWord
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351787.html
Copyright © 2011-2022 走看看