MySQL5.6新特性深入剖析-InnoDB引擎.pptx
《MySQL5.6新特性深入剖析-InnoDB引擎.pptx》由会员分享,可在线阅读,更多相关《MySQL5.6新特性深入剖析-InnoDB引擎.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MySQL 5.6新特性深入剖析新特性深入剖析 InnoDB引擎引擎网易杭研:何登成微博:何_登成网站:深入MySQL内核OutlineMySQL 5.6简介简介MySQL 5.6新特性新特性InnoDB层新特性层新特性性能优化功能增强Server层新特性层新特性性能优化功能增强MySQL5.6简介简介MySQL5.6版本,为MySQL最新的一个大版本,相对于MySQL5.1/5.5,无论是MySQLServer层面,还是InnoDBEngine层面,都做了大量的改进(性能改进 vs功能增强)。这些改进,无论是DBA,亦或是研发人员,都值得好好的学习、深入了解;版本发布情况MySQL5.6.2
2、(2011-04-11):第一个发布版本MySQL5.6.7(2012-09-29):第一个RC版本MySQL5.6.10(2013-02-05):第一个GA版本(本本PPT使用版本使用版本)MySQL5.6.12(NotReleased):最新研发版本详见:MySQL5.6ReleaseNotesMySQL5.6简介改进总览InnoDB Engine(本期内容本期内容)性能性能Read-OnlyTransaction,BufferPoolFlushing,PageCleaner,Purge,CRC32,SSD.功能功能OnlineDDL,MemcachedPlugin,Transportab
3、leTablespace,BufferPoolDump/Restore,FTS.MySQL Server(下期内容下期内容)OptimizerSemi-Join,BKA,MRR,ICP,Join,In,OptimizerTracing,Limit.ReplicationGTID,BinlogGroupCommit,Multi-ThreadedSlaves.OthersSecurity.InnoDB性能优化(总)InnoDB性能优化性能优化Read-OnlyTransactionsBufferPoolFlushingPageCleanerPurgeCRC32CompressionDataDict
4、ionaryLRUOthersssd,mutex,spinlock,memoryallocation,readahead,undologtablespace.InnoDB-ReadOnlyTransactionRead-Only Transactions(双层优化)第一第一层层瓶颈瓶颈快照读操作,需要创建ReadView:获取trx_sys-mutex后遍历活跃事务链表,存在并发性能瓶颈;InnoDB的MVCC策略(参考此处);分析分析只读事务不会产生更新,也就不会产生历史版本;OLTP应用,读多写少;将活跃事务链表拆分为只读事务与更新事务两个链表,ReadView创建只需要遍历更新事务链表,
5、能够极大的降低ReadView创建的开销;优化优化新增SQL语法:starttransactionreadonly;事务上新增标识:trx-read_only维护两个活跃事务链表:ro_trx_listvsrw_trx_list注注:Autocommit=1时,快照读一定是Read-Only事务InnoDB-ReadOnlyTransactionRead-Only Transactions(双层优化)第二层第二层瓶颈将事务划分为只读/更新事务之后,InnoDB系统的并发效率并未有明显提升;分析在row0sel.cc:row_search_for_mysql()函数中,每读取一条记录,都会增加一
6、个count计数;多线程并发修改此count(srv_n_rows_read),就会导致cachecoherence问题;优化重新设计计数器:N个计数对象,按照CACHE_LINE_SIZE对齐;每个事务,根据事务ID映射到不同的计数对象上,进行统计,减少碰撞;Typem_counter(N+1)*(CACHE_LINE_SIZE/sizeof(Type);InnoDB-BufferPoolFlushingBuffer Pool Flushing(Flush List Flush)InnoDB的FuzzyCheckpoint策略,按照内部脏页链表(FlushList),逐步将最老的一部分脏页写
7、出磁盘,推进系统的检查点(CheckpoingLSN);(参考此文)存在的问题InnoDB原生Flushing算法不够稳定(Percona提出了3种改进策略)新的算法系统平均刷脏页速度:avg_page_rate=过去innodb_flushing_avg_loops秒+.的速度系统平均日志速度:lsn_avg_rate根据系统脏页比率与日志年龄,计算本次应该Flush的脏页数量:npages根据平均刷脏页速度进行调整:npages=(npages+avg_page_rate)/2根据lsn_avg_rate,计算本次日志应该Flush到的位置:lsn_limit最后,根据npages与lsn
8、_limit,进行本次Flush;新引入的参数innodb_adaptive_flushing_lwminnodb_max_dirty_pages_pct_lwminnodb_max_io_capacityinnodb_flushing_avg_loopsInnoDB-PageCleaner两种两种Flush策略策略LRUListFlush写出LRU链表尾部的脏页,释放足够的页面,以满足前端用户的需求;原由用户线程触发,用户线程处理;FlushListFlush:将系统中最老的部分脏页写出,推进系统的检查点(CheckpointLSN);根据CheckpointAge的不同,由不同的线程处理(
9、MasterThreadvsUserThread);InnoDB-PageCleanerPage Cleaner流程流程将LRUListFlush与FlushListFlush全部移到PageCleaner后台线程中处理,减少MasterThread与UserThread的压力;PageCleaner线程,每秒启动一次;LRUListFlush从LRU链表尾部开始遍历:将未使用的CleanPage从LRU链表摘除;将未使用的DirtyPage写出,然后从LRU链表摘除;外部参数:innodb_lru_scan_depth(控制LRU链表尾部遍历的长度);内部参数:PAGE_CLEANER_LR
10、U_BATCH_CHUNK_SIZE(默认100:控制一个处理批次的大小,防止长时间持有bufferpoolmutex,导致系统出现并发瓶颈);FlushListFlush使用前页中介绍的NewAdaptiveFlush算法;InnoDB-PurgeThreadPurge ThreadPurge操作:InnoDB读取提交事务的Undo记录,然后将事务更新所产生的历史版本(标记为删除,并且对所有活跃事务不可见的版本)从数据文件(聚簇索引、辅助索引)中删除的操作;MySQL5.1,Purge操作在InnoDBMasterThread中完成;MySQL5.5,一个Purge后台线程;存在的问题Pur
11、ge操作不及时,导致Undo空间膨胀;数据文件中存在大量历史无用记录;Multi-PurgeThreadsMySQL5.6,多个Purge线程,并发回收历史版本;新增参数:innodb_purge_threads 默认1,取值1,32innodb_purge_batch_size默认300注意注意1:innodb_purge_threads只是规定了Purge线程的上限,InnoDB会根据事务负载自动调节 (详见srv0srv.cc:srv_do_purge()函数);注意注意2:innodb_purge_batch_size可以理解为每次Purge,回收的提交事务数量;InnoDB-CRC3
12、2Page ChecksumInnoDB在其页面的头部与尾部,维护了两个Checksum(详见InnoDBPageStructure),通过页面的内容计算而来,用于校验页面内容是否被破坏;脏页从内存写出时,需要重新计算Checksum(buf0flu.cc:buf_flush_init_for_writing();页面从外存读取进内存时,需要计算页面Checksum,判断其与存储的Checksum是否相同,进而验证页面是否损坏(buf0buf.cc:buf_page_is_corrupted();原有原有Checksum算法算法软件计算(buf0checksum.cc:buf_calc_pag
13、e_new_checksum(),逐个读取4字节int,然后做运算;一个InnoDBPage,默认为16K,软件计算Checksum,性能低下;CRC32 Checksum通过CPU指令(SSE4.2)计算CRC32Checksum,提升Checksum的计算性能(ut0crc32.cc:ut_crc32_sse42()新增参数:innodb_checksum_algoritmInnoDB-CompressionCompressionInnoDB以Page为单位进行压缩,采用zlib压缩工具;优化措施优化措施新增参数innodb_compression_level控制zlib压缩级别1.9;i
14、nnodb_compression_failure_threshold_pctInnoDB的压缩页面经过更新之后,再次压缩可能会导致压缩失败,需要分裂;此参数控制压缩失败的比率,超过此比率,压缩前的页面需要进行Padding;所谓Padding,就是在16K的页内填充一些无效内容,降低页面利用率,保证压缩成功率;innodb_compression_pad_pct_max非压缩页Padding的大小;默认:50%InnoDB-DataDictionaryLRUData Dictionary每一个用户表,在InnoDB的系统表(SYS_TABLES,SYS_COLUMNS,SYS_INDEXES
15、,.)中都存储着一些元数据信息;当前端SQL操作用户表时,此表的元数据信息会被读取出来,存放于InnoDBDataDictionaryCache之中;原有问题原有问题DataDictionaryCache,会占用大量的内存表打开时,会将元数据加载入DictionaryCache,但是表关闭时,并不会从DictionaryCache中删除元数据。大量表的情况下,DictionaryCache会占用大量内存(详见此文);改进措施改进措施将DictionaryCache中的所有表元数据,维护为一个LRU链表;借用MySQLServer层的参数:table_definition_cache(默认400
16、,软限制)后台MasterThread,每SRV_MASTER_DICT_LRU_INTERVAL(47)秒,遍历一次DictionaryCache,清除LRU链表尾部不使用(refcount=0)的表(保证数量小于table_definition_cache即可);InnoDB-OthersSSDCompression优化;4K、8KPage支持;Undologtablespace;.MutexCAS原子指令Spinlock根据innodb_sync_spin_loops参数,InnoDBSpinlock在无法获取锁时,会反复重试innodb_sync_spin_loops次;改进重试前,根
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL5 特性 深入 剖析 InnoDB 引擎
限制150内