MySQL体系结构

image.png

image.png

thread pool是在连接层处理

image.png

这里的授权是这个用户对某个表某个列是否有权限

image.png

image.png

查询缓存是全局锁 不建议使用查询缓存

关闭查询缓存:

query_cache_type=0

query_cache_size=0

2个参数都要设置

 

mysql proxy 是在最开始的连接层

handlersocket,可以绕过连接层,sql层,直接操作Innodb存储引擎所以效率非常高,后来基本上都不使用了,NOSQL流行起来了

经典的mysql体系结构图

2.jpg

  • 最前端的是各种语言与mysql相互连接的API或者是接口协议

  • 连接的pool,mysql不支持 只是用这个来表示 可以用自己开的proxy 或者是官方的proxy实现

  • SQL Interface :接收用户所有的sql指令

  • 解析器(Parser):把sql命令解析 (YACC这个语法解析器来解析sql语法)

    • 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。

    • 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的。

  • Optimizer查询优化器

  • 查询缓存

    • query_cache, key_bufer,  innodb_buffer

  • 再下面一层是存储引擎层-插拔式

Cache&Buffer的组成

image.png

上面的框:tmp_table_size & max_heap_table_size 线程创建分配 这个是会话级的内存结构

下面的框:全局内存,程序启动就分配,只分配一次,全局公用

PGA如果分配过高,可能会导致OOM(内存溢出)

mysql使用总内存=global buffers + thread_buffers

image.png

image.png

MySQL innodb引擎和myisam的引擎执行对比测试

http://www.itpub.net/thread-1902289-1-1.html