概述
在网络层的背后,每一个业务都需要数据的支撑,数据库的优化在整个系统中就显得至关重要了
虽然 NoSQL 在并发性能上要优于传统的 DBA,但由于 MySQL 在扩展性等方面的优势,MySQL 依然作为企业级数据存储的首选
MySQL 数据库内部缓存使用
建立适当索引
对于 MySQL 优化,最简单的做法就是建立索引,在表数据量较大时可以起到快速检索数据的作用
主要的成本在于其磁盘开销比较大,占用空间甚至可能比源数据更大,同时,由于需要维护和更新索引,所以 insert、update、delete 操作耗时会随之增加
对于主要以 select 操作为主的字段,合理建立索引对系统性能的提升是有明显作用的
数据库连接线程池缓存
MySQL 是一个多线程并发模型数据库,因此数据库的访问常常伴随着线程的创建和销毁,这个工作是非常耗时的
可以通过配置 thread_cache_size 选项来改变线程池的大小,减少线程的创建和销毁
还有另一种办法,那就是使用 pconnect(数据库长连接),线程一旦创建在很长时间内都保持着
但是,这样在数据库连接访问量大的时候会出现数据连接数耗尽的情况,因此,长连接的用法通常需要在CGI和MySQL之间实现一个“连接池”服务,控制CGI机器“盲目”创建连接数
建立数据库连接池服务,有很多实现的方式,PHP的话,可以使用swoole(PHP的一个网络通讯拓展)来实现
Innodb缓存设置(innodb_buffer_pool_size)
innodb_buffer_pool_size这是个用来保存索引和数据的内存缓存区,如果机器是MySQL独占的机器,一般推荐为机器物理内存的 80%
在取表数据的场景中,它可以减少磁盘IO
一般来说,这个值设置越大,cache命中率会越高
分库/分表/分区
MySQL 数据库表一般承受数据量在百万级别,再往上增长,各项性能将会出现大幅度下降
因此,当我们预见数据量会超过这个量级的