问题背景描述: 在MySQL中执行SQL语句,比如insert,速度很慢。显然,它可能只插入一行数据。数据量小,却耗费大量时间,为什么呢?一、存储结构分析MySQL存储结构图:分析:1、读操作:内存读-->缓存缓存读-->磁盘物理读读到的数据会按照上面的顺序传回。2、写操作:内存数据直接写入缓存(很快)-->写入磁盘。从上面可以看出,缓存对MySQL读写速度快起着关键作用。①.缓存特点:-速度快-掉电数据丢失-容量有限断电后,可以将缓存中的数据写入磁盘,保证数据不丢失。如果不提供BBU或者BBU坏了,内存数据不会写入缓存,而是直接写入磁盘;与写入内存相比,写入磁盘的速度会大大降低(相差10,000倍)。同时,由于速度变慢,“写”占用了大部分“读”带宽。所以BBU问题是导致读写性能不佳的一大因素。③.缓存容量有限(4G、8G、16G、32G)。为了保持缓存有用,系统会定期将缓存的数据写入磁盘,以防止缓存被占满。2、数据库写入速度慢的分析-->写入速度慢-->系统挂Q:如何判断写入速度慢?A:1、怀疑是BBU问题。监控BBU错误。解决方法:重启BBU2,缓存已满(类似BBU坏掉的情况)。>显示全局状态,如“handler_write”;②、缓存写入磁盘速度慢(排水速度远低于注水速度)硬盘I/O异常,负载过高:数据库大量物理读(SQL异常),判断:mysql>showstatuslike'Innodb_buffer_pool_reads';3.存储性能差①,存储设备差,更新设备②,容灾同步风险,“再好的工程师也敌不过蓝翔的挖掘机,比不上民工的锄头……”3.关于BBU英文简称:BBU英文全称:BatteryBackupUnit中文全称:batterybackupunit,也就是一块电池1、功能:断电后,将缓存中的数据写入硬盘,保证数据不会丢失;意外掉电清理脏数据的保护措施;可提供备用电源支持,在系统外部电源出现故障时,保证存储阵列中业务数据的安全。2、很多存储设备都会配备BBUBBU,在电源出现故障时为RAID控制器缓存供电。当断电时,BBU电源可以将控制器中的缓存中的数据保存一段时间(取决于BBU的型号)。用户只需在BBU电量耗尽(电池有限)之前恢复正常供电,即可将缓存中的数据完整写回RAID,避免断电造成数据丢失。它与服务器电池有点不同。在服务器中,可以在配置RAID卡的同时配置电池。系统断电后,内存中的数据可以保持不丢失,但时间有限,大约12小时,如果是12小时,如果12天内没有恢复,内存中的数据将被丢失的;3、超级电容服务器还有一种叫做超级电容的保护方式,也是和RAID卡配套的。它可以在服务器断电后将数据保存在缓存中。写入电容,会永久保存,类似于写入硬盘,但实际上是写入电容,可以理解为写入U盘。优于电池,即使12小时后服务器没有恢复供电,也不会造成数据丢失。
