Mysql驱动的功能:在底层建立网络连接。才能够帮助我们发送请求给数据库服务器。
当我们多线程的处理请求的时候,显然不可能只用一个数据库连接,然后不停的建立连接、删除连接。效率太差了。
因此需要构建一个数据库连接池,在这个连接池子中有很多个数据库连接。
当sql语句执行结束后,不要销毁这个连接,而是放回数据库连接池中,下次再用
MySQL中有一个线程专门负责:从网络连接中读取和解析数据
MYSQL提供了一个接口:SQL Interface
这个接口专门执行接收到的SQL语句。
SQL解析器就是按照SQL的语法规则进行解析,理解这一句SQL语句到底要干嘛。
在理解SQL要干啥以后,查询优化器会给出一个最优的查询路径方案。
查询优化器会根据SQL语句生成查询路径树,然后从树中找到最优的查询路径。
执行器会根据由查询优化器得出的执行方案,不停的调用存储引擎的各种接口去完成SQL语句的执行计划。
存储引擎会根据SQL的查询方案,分别调用内存和磁盘,进行查询、更新等复杂操作。
MYSQL的架构设计中,SQL接口、SQL解析器、SQL查询优化器都是通用的,但是存储引擎可以有很多选择。
缓冲池是一个由InnoDB存放在内存中的组件,里面缓存了很多数据。
假设要查询id=10
为了满足日后回滚的需要。会把写入数据的旧值,写入undo日志文件
更新内存中的BufferPool的数据。
这时候的数据是脏数据,因为BufferPool中的数据已经修改,但是磁盘中的数据没有被修改。
为了防止此时宕机,导致修改丢失。必须把对于内存中BufferPool的修改内容,拷贝一份,写在redo日志中。
所谓redo日子主要记录了,你对于数据做了什么修改,类似于:“id=10这行记录修改了name字段的值为XXX”
当想要提交事务时,mysql会根据一定策略,把redo日志文件写回磁盘。
这个策略是通过:innodb_flush_log_at_trx_commit配置
binlog日志是归档日志,是mysqlServer自己的日志文件。redo日志文件是InnoDB的日志文件。
当我们提交策略时,同时还会把binlog日志写回磁盘文件。
binlog日志文件同样存储了对于数据更新的操作。
binlog可以通过sync_binlog参数控制策略:
redo文件中会保存:binlog文件名和位置,同时在redo文件中写入一个commit标记。
redo文件中的commit标记的意义:
MySQL后台会有一个IO线程,在未来的某个时间里,把BufferPool中的数据刷会磁盘文件中。
虽然可能的业务逻辑复杂,但是并不需要关心数据库的机器配置,随便选一个。
申请到一个数据库以后,应该在实际开发之前就对这个数据库进行压力测试。
主要原因如下:
QPS简单理解为,每秒数据库可以处理多少个sql语句。
TPS简单理解为,每秒数据库可以处理的事物数量。这个比较常用。
IOPS指的是机器的随机IO并发处理能力,代表每秒钟可以执行多少个随机IO请求。
一个很关键的指标。主要决定你内存中的脏数据写回磁盘的效率
机器磁盘存储每秒可以读写多少字节的数据量。
关键指标。关乎到每秒可以把多少的redo log等日志文件写入磁盘。
重要的指标。往磁盘里面写入一条数据的延时。
延迟越低,数据库性能越高,执行每个SQL语句和事物的速度会越快。
简而言之,看看你CPU能不能发出足够多的QPS。
简而言之,看看你的网络带宽情况支持不支持大流量的传输数据。
简而言之,看看你内存还够不够。