查询语句执行流程:
- 客户端建立连接,通常使用tcp长连接
- 查询mysql缓存,默认关闭。8.0已移除
- 解析器(parser):进行词法分析和语法分析,并根据sql定义的语法规则,生成解析树(select_lex);
- 预处理器 (pro processor):检查解析树,进行权限检查和语义分析,例如检查表是否存在等,预处理之后重新生成一个新的解析树
- 优化器 (optimizer) :根据解析树,生成不同的执行计划(excution plans),根据成本(const)找到一条最优的执行计划;除了路径选择,优化器还会对sql语句进行优化(比如多张表的查询顺序、索引优化、多余逻辑优化等)//可以使用explain来查看执行计划信息
- 执行器 :利用最优的执行计划调用存储引擎的通用api操作数据(innodb维护了内存缓存区域buffer pool,用来加速数据的读写)
查看连接,每个连接sql都会生成一个线程,故查看连接:show global status like "thread%"
- thread_cached:缓存中的线程连接数
- thread_connected:当前打开的连接数
- thread_created:为处理连接创建的线程数
- thread_running:非睡眠状态的连接数,通常指并发连接数
连接超时断开设置:
- show global varibales like "wait_timeout"; //非交互式超时时间,如jdbc程序
- show global variables like "interactive_timeout"; //交互式超时时间,如数据库工具
- 默认都是28800秒,8小时时间
最大连接数:
- 默认151,最大10万
mysql参数级别:
- session,单个连接;比如set auto commit
- global,公共参数
- 永久修改参数,需要修改配置文件:/etc/my.cnf