打算深入了解一波Mysql的底层原理,所以特在此进行一番记录。
先了解一波mysql的整体分层架构
1、先聊一波网络层,mysql的网络连接是基于BIO的,它本质上是不接受大量连接的,所以设置了max-connections这个限制。
至于为啥是BIO而不是基于NIO呢,原因大概有两点:
- JDBC不支持,JDBC出现了20多年了,它是一个行业标准,在被提出当时还没有NIO啥的呢,各家数据库驱动对JDBC实现都是BIO形式,就是采用BIO阻塞式查询。
- MYSQL不像WEB SERVER功能意义一样,它通过session作为一个连接回话,在这一个session里面需要保证执行的顺序,事务需要隔离等,DB维护这样一个session的成本很高。不像WEB-SERVER一样是无状态的,对顺序要求严格性低。
2、连接池
对于IO密集时,要减少连接数,譬如你要读写成千上万的数据,这时候你应该考虑减少连接数(和机器CPU数相等),你会发现更少连接数会带来性能数百倍的提升。