概述
关于数据库的优化有很多种方式,今天我们为大家介绍一下数据库的一些自优化策略,通过一些简单的命令来开启数据库本身的优化,这些优化项在面试中,大家也可以拿来炫耀一下啦。
存储引擎
MySQL有很多种存储引擎,在不同的存储引擎中优化策略有所不同,在MySQL5.5.8版本开始默认是InnoDB存储引擎,在之前默认是MyISAM存储引擎;当然面对不同的业务需求,选择最适合的存储引擎,是MySQL最大的优化策略之一。
mysql>SHOW ENGINES
通过上述语句可以查看当前使用的MySQL数据库所支持的存储引擎,也可以通过查找information_schema架构下的ENGINES表。
InnoDB存储引擎
InnoDB做为默认的存储引擎,也是市面上使用最多的存储引擎,我们这里重点介绍InnoDB的一些参数和优化方案。
IO Thread
InnoDB存储引擎中大量使用了AIO(Async IO)来处理IO请求,这样可以极大的提高数据库的性能。
mysql>SHOW VARIABLES LIKE 'innodb_%io_threads'
通过上述命令可以看到IO Thread的数量,在Linux平台下,IO Thread的数量不能进行调整,但是在Windows平台下可以通过参数innodb_file_io_threads来增大IO Thread。
Purge Thread
事物被提交后,其所使用的undolog可能不再需要,因此需要PurgeThread来回收已经使用并分配的undo页。
mysql>SHOW VARIABLES LIKE 'innodb_purge_threads'
InnoDB支持多个Purge Thread,这样做的目的是为了进一步加快undo页回收。同时由于Purge Thread需要离散的读取undo页,这样也能更进一步利用磁盘的随机读取性能。
缓冲池
InnoDB存储引擎是基于磁盘存储的,缓冲池简单来说就是一块内存区域,通过内存速度来弥补磁盘速度较慢。
mysql>SHOW VARIABLES LIKE 'innodb_buffer_pool_size'
通过上述语句查看缓冲池大小,同样通过配置参数innodb_buffer_pool_size来设置大小。同样除了缓冲池大小以外,从InnoDB 1.0.X版本开始,允许多个缓冲池实例。
mysql>SHOW VARIABLES LIKE 'innodb_buffer_pool_instances'
在配置文件中将innodb_buffer_pool_instances设置为大于1的值就可以得到多个缓冲池实例。
LRU List
数据库中的缓冲池是通过LRU(Latest Recent Used,最近最少使用)算法来进行管理的,默认配置为37%。
mysql>SHOW VARIABLES LIKE 'innodb_old_blocks_pct'
通过上面的命令可以看到,新读取的页插入到LRU列表尾端37%的位置。如果用户预估自己的活跃的热点数据不止63%,那么可以通过设置innodb_old_blocks_pct参数来减少热点页可能被刷出的概率。
重做日志缓存
InnoDB存储引擎的内存区域除了有缓冲池外,还有重做日志缓冲(redo log buffer)。该值可由配置参数innodb_log_buffer_size控制,默认为8MB。在通常情况下,8MB的重做日志缓冲池足以满足绝大部分的应用。
mysql>SHOW VARIABLES LIKE 'innodb_log_buffer_size'
自适应哈希索引
InnoDB存储引擎会监控对表上各个索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)。
mysql>SHOW VARIABLES LIKE 'innodb_adaptive_hash_index'
默认是开启状态,用户可以根据实际需要禁用或启动此特性。
异步IO
为了提高磁盘操作性能,InnoDB采用异步IO(Asynchronous IO,AIO)的方式来处理磁盘操作。参数innodb_use_native_aio来控制是否启用Native AIO,在Linux操作系统下,默认值为ON;官方的测试显示,启用Native AIO,恢复速度可以提高75%。
mysql>SHOW VARIABLES LIKE 'innodb_use_native_aio'
总结
为大家介绍了MySQL基于InnoDB存储引擎的一些系统优化策略和参数;感兴趣的同学可以自己动手实验一下。
网友评论