学习mysql细节整理(一)

mysql管理之道自我整理(一)

mysql5.5介绍:

  1. mysql5.5开始使用默认引擎是Innodb引擎,在mysql5.5里InnodDB Plugin文件格式要调整为Barracuda。Barracuda格式支持表压缩功能,Truacate table 的速度比以前更快。

  2. 充分利用cpu多核的处理能力。使用innodb_write_io_threads 和 innodb_read_io_threads参数。调整linux平台上对cpu核数来更改相应的参数值。默认是4。可以根据读写情况来进行调整设置。

  3. 提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力。innodb_io_capacity参数来调控,默认是200。

    innodb_io_capatity  磁盘配置  

    200         单盘SAS/SATA

    2000         SAS*12 RAID10

    5000         SSD

    50000        FUSION-IO 

  4. 增加自适应刷新脏页功能,innodb_adaptive_flushing,默认是开启的。它试用了一个全新的算法,以便根据重做日志ib_logfile生产的速度和刷新频率来将脏页刷入磁盘,这样重做日志ib_logfile还没有写满时,也可以刷新一定的量。让innodb_buffer_pool缓冲池中的热数据存活更久。buffe_pool是有2个缓冲区,一个是sublist of new blocks(热数据)区域,一个是sublist of old blocks(不常访问的数据)区域。当用户访问数据是,如果缓冲区有相应的数据则直接返回,否则会从磁盘读入还从去的sublist of old blocks区域,然后在移动到sublist of new blocks区域,并通过LRU最近最少使用算法来剔出旧数据页。innodb_old_blocks_pct参数可以控制进入缓冲区sublist of old blocks 区域的数量,默认是37,占整个缓冲池的比例3/8。例如:dump时,可以修改innodb_old_blocks_pct小一些,使数据块进入少量sublist of old blocks区域,并移动到new blocks区域。从而让更多的热数据不被踢出。   

     show engine innodb status \G 状态信息如下所示:    

    old database pages 23600: 在旧区域存放着多少个页。    

    pages made young: 移动到新区域的有多少个页。    

    page made not young: 没有移动到新区域的有多少个页。    

    youngs/s: 每秒移动到新区也的有多少个页。    

    non-youngs/s: 每秒没有移动到新去也的有多少个页。    

    young-making rage:移动到新区域的比例。    

    young-making not rate: 没有移动到新区域的比例。

    如果你没有全表扫描,发现youngs/s的值很小,那么就应该增大innodb_old_blocks_pct或减小   innodb_old_bolcks_time。如果全表扫描,发现non-youngs/s值小,就应该增大innodb_old_bolcks_time。

  5. innodb同时支持多个bufferPool实例。最多支持到64个,buffer_pool_size必须大于1G,生产多实例才有效。提高默认innodb线程并发数。有请求时,如果超过innodb_thread_concurrency(5.5,默认是0,不限制并发数,为了更好的发挥多核处理能力)预先设置的并发线程数量,那么就会按照innodb_thread_sleep_delay预先设定的值休眠N秒,只有在尝试连接,充实2次的机制是为了减少cpu上下文切换的次数,以降低cpu的消耗。如果请求被接受,则会获得一个innodb_concurrency_tickets默认500次的通行证,在这些次数完成前,不需要在进行innodb_thread_concurrency的检查。如果没有接受,就会进入队列中,待处理。

  6. 提高默认innodb线程并发数。 innodb_thread_concurrency默认是0,表示不限制并发数,可以提高cpu多核利用率。限制并发数,是减少cpu上下文切换,以降低cpu消耗。

  7. 预读算法的变化。一种是线性预读,一种是随机预读。默认是线性预读:当顺序读取extent块(包含64个page)innodb_read_ahead_threshold设置的page页数数量时,出发一个异步读取请求,将下一个页提前读取到buffer_pool中。

  8. 恢复了组提交。该工作模式只支持在sync_binlog=0,innodb_support_xa=0。目的是保证innodb存储引擎的redo log事物日志与binlog日志的顺序一致。

  9. 控制自旋锁spin lock轮训间隔。对于互斥锁,如果资源被占用,资源申请者只能进入睡眠状态,但是自旋锁不会引起调用者睡眠,调用者会一直循环在那里看该自旋锁的保持着是否已经释放了锁。innodb_spin_wait_delay参数控制循环时间,每次休眠N秒。

  10. 快速创建、删除、更改索引:创建和删除非聚集索引不用复制整个表的内容。只须更新索引页。但是主键和外键就需要复制表的内容。

  11. 可动态关闭innodb更新元数据的统计功能。innodb_stats_on_metadata参数的作用是:每当查询information_schema元数据库里的表时,innodb会随机提取其他数据库每个索引页的部分数据,从而更新innomation_schema.statistics表,但你的表很大,且数量很多时,耗费时间长,还会污染buffer_pool。可以关闭掉。关闭该功能也不会造成数据统计的不精确。

  12. 中继日志relay_log可自我修复。relay_log_recovery参数为1时,当slave宕机后,relay_log损坏了,导入一部分日志没有被处理,则自动放弃所有的没被处理的relay_log,并从新从master获取日志。默认是0,关闭状态。

  13. 支持动态更改innodb锁超时时间。innodb_lock_wait_timeout=10,可以动态修改。

你可能感兴趣的:(mysql,学习,细节整理)