April 8, 2013

[MySQL 5.6] mysql 5.6 timestamp类型列的改变

在5.5及之前的版本中,timestamp列的行为比较特殊: * TIMESTAMP columns not explicitly declared with the NULL attribute are assigned the NOT NULL attribute. * The first TIMESTAMP column in a table, if not declared with the NULL attribute or an explicit DEFAULT or ON UPDATE clause, is automatically assigned the DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP attributes. * TIMESTAMP columns following […]

[MySQL 5.6] Innodb page cleaner线程刷新策略

这部分内容是从http://mysqllover.com/?p=512 剥离出来,原文中为了保持整洁,将这些内容删除。   有以下几个参数会影响到Page cleaner的行为:   innodb_lru_scan_depth innodb_adaptive_flushing_lwm innodb_max_dirty_pages_pct_lwm innodb_io_capacity_max innodb_flushing_avg_loops   在函数page_cleaner_flush_pages_if_needed中会确定三个影响刷脏页行为的变量 1.    根据redo log计算比例(pct_for_lsn),当小于innodb_adaptive_flushing_lwm时,pct_for_lsn值为0,当小于异步刷redo的比例(log_sys->max_modified_age_async)时且关闭选项innodb_adaptive_flushing时,pct_for_lsn也为0,否则,计算: ((innodb_io_capacity_max/innodb_io_capacity) *(lsn_age_factor * sqrt((double)lsn_age_factor)))/7.5 其中lsn_age_factor为当前的(redo比例*100)/max_modified_age_async 2.    根据脏页计算比例(pct_for_dirty),当innodb_max_dirty_pages_pct_lwm设置为0时,和以前的行为类似,如果脏页比例大于innodb_max_dirty_pages_pct时,pct_for_dirty设置为100,否则如果脏页比大于innodb_max_dirty_pages_pct_lwm,pct_for_dirty值为 (dirty_pct * 100)/( innodb_max_dirty_pages_pct+1) 3.    最近innodb_flushing_avg_loops次平均刷脏页的数量,同时还考虑上次统计时候的平均数量,再除以2 avg_page_rate= ((sum_pages / srv_flushing_avg_loops) + avg_page_rate) / 2 另外也会计算lsn的刷新速率 lsn_rate= (cur_lsn – prev_lsn) / srv_flushing_avg_loops; lsn_avg_rate= (lsn_avg_rate + lsn_rate) / 2;   然后根据上述两个值计算要刷新的page数: pct_total = ut_max(pct_for_dirty, pct_for_lsn); n_pages = (PCT_IO(pct_total) + […]

[MySQL 5.6] MySQL 5.6 online ddl 使用、测试及关键函数栈

本文主要分为三个部分,第一部分是看文档时的笔记;第二部分使用sysbench简单测试了下性能损耗;第三部分阐述了关键函数栈,但未做深入 前言 Online DDL是MySQL 5.6的重要特性之一,特别是对于不可间断的互联网服务而言意义非凡。尽管我们已经通过工具来实现了在线DDL,但由于借助了触发器来获取增量数据,很难保证不会触发BUG,我们在5.1版本上广泛使用了内部开发的myddl,曾经触发了mysql6个以上的bug。 Innodb允许你通过设置LOCK=EXCLUSIVE | SHARED | DEFAULT/NONE 来进行完全阻塞的DDL、只阻塞DML不阻塞查询、以及完全在线DDL,这有助于你能够在性能和速度之间进行权衡 以下是从官方文档拷贝的一张关于Online ddl对于当前ddl操作的支持: Operation In-Place? Copies Table? Allows Concurrent DML? Allows Concurrent Query? Notes CREATE INDEX,ADD INDEX Yes* No* Yes Yes Some restrictions for FULLTEXT index; see next row. Currently, the operation is not in-place (that is, it copies the table) if the same index being created […]