存档

2009年12月 的存档

MySQL 5.5 表分区功能增强

2009年12月26日 谭俊青 1 条评论

MySQL5.1 引入表分区功能,使得MySQL在处理大表的能力上得到增强。使用过表分区功能的朋友应该知道,MySQL5.1中使用表分区的时候,对字段是有要求的,那就是必须是整数型,或者可以将其他类型的字段通过函数转换成整数型才可以。

/* with MySQL 5.1  ivan @ MySQL实验室(mysqlab.net/blog/) */
CREATE TABLE mysqlab_net
(
  ivan DATE
)
PARTITION BY RANGE (TO_DAYS(ivan))
(
  PARTITION p01 VALUES LESS THAN (TO_DAYS(’2007-08-08′)),
  PARTITION p02 VALUES LESS THAN (TO_DAYS(’2008-08-08′)),
  PARTITION p03 VALUES LESS THAN (TO_DAYS(’2009-08-08′)),
  PARTITION p04 VALUES LESS THAN (MAXVALUE));

SHOW CREATE TABLE mysqlab_net\G
*************************** 1. row ***************************
       TABLE: mysqlab_net
CREATE TABLE: CREATE TABLE `mysqlab_net` (
  `ivan` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (TO_DAYS(ivan))
(PARTITION p01 VALUES LESS THAN (733261) ENGINE = InnoDB,
 PARTITION p02 VALUES LESS THAN (733627) ENGINE = InnoDB,
 PARTITION p03 VALUES LESS THAN (733992) ENGINE = InnoDB,
 PARTITION p04 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */

怎么样?读取的时候谁知道那个数字是多少?(不过也可以通过自定义函数实现还原)
MySQL5.5中加入了columns关键字,使得可读性好多了。看例子

/* with MySQL 5.5   ivan @ MySQL实验室(mysqlab.net/blog/) */
CREATE TABLE `mysqlab.net`
(
  ivan DATE
)
PARTITION BY RANGE  COLUMNS(ivan)
(
  PARTITION p01 VALUES LESS THAN (’2007-08-08′),
  PARTITION p02 VALUES LESS THAN (’2008-08-08′),
  PARTITION p03 VALUES LESS THAN (’2009-08-08′),
  PARTITION p04 VALUES LESS THAN (MAXVALUE);

SHOW CREATE TABLE `mysqlab.net`\G
*************************** 1. row ***************************
       TABLE: mysqlab.net
CREATE TABLE: CREATE TABLE `mysqlab.net` (
  `ivan` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE  COLUMNS(ivan)
(PARTITION p01 VALUES LESS THAN (’2007-08-08′) ENGINE = InnoDB,
 PARTITION p02 VALUES LESS THAN (’2008-08-08′) ENGINE = InnoDB,
 PARTITION p03 VALUES LESS THAN (’2009-08-08′) ENGINE = InnoDB,
 PARTITION p04 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */

另外MySQL5.5表分区(partition) columns关键字还支持多字段,比如 partition by range columns(a,b);将支持清空指定的分区TRUNCATE PARTITION。MySQL5.5有望在明年(2010)夏季GA。另外MySQL5.5支持的半同步功能在高可用上的使用,让人非常期待!

Reference: MySQL 5.5 partitioning enhancements

Note:在使用表分区的时候,并不是分区越多越好,要根据情况而定,因为会出现意想不到的问题

分类: MySQL Partition 标签:

MySQL 5.5 Released(非GA)

2009年12月16日 谭俊青 没有评论

  MySQL 5.5第一个版本释出,基于MySQL5.4,性能相对于当前MySQL5.0、5.1有很大的提升,更让人可喜的是MySQL5.5内置了Google的半同步(semi-sync-replication)补丁,以此可以搭建一个相对来说比较完美的MySQL高可用方案,之前我已经在“MySQL新版(5.x)及特性”中提到过,很是让人期待!

MySQL半同步流程设计图

MySQL半同步流程设计图

半同步的配置很简单:

master  > INSTALL PLUGIN rpl_semi_sync_master SONAME ‘libsemisync_master.so’;
slave-x > INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘libsemisync_slave.so’;

master  > SET GLOBAL rpl_semi_sync_master_enabled=1;
slave-x > SET GLOBAL rpl_semi_sync_slave_enabled=1;

对于半同步需要说明的是:
1:不需要所有的slave都确认接收到复制事件
2:slave确认并不是表示执行完成
3:如果slave没有跟上同步设置将被中断继续原来的异步模式直到跟上再重新开启

注意:当前MySQL5.4, MySQL5.5都还不是GA版本,生产环境请慎重选择,升级前也请备份好数据。

分类: MySQL HA, MySQL Replication 标签:

MySQL新版(5.x)及特性

2009年12月4日 谭俊青 没有评论

  MySQL 5.1.42 预计在今年(2009)12月18日发布,其中会包含最新的Innodb Plugin。新的InnoDB Plugin在除了支持Data compression和Fast index create特性之外,兼容之前的表空间,并加入了大量Google的patch,极大的提高了Innodb的性能

MySQL 5.4 GA 预计可能在明年夏季,roadmap如下图:
milestone_release_2

MySQL 5.5 会加入Google semi-replication patch,Google原链接

MySQL Cluster Manager 加入自动管理功能,不过应该会收费。

———————————————-
这几天去fetion看了他们的DB,服务器奢侈(可能穷惯了),性能也很强劲30k+的QPS。不过构架有些问题,以后我想应该会改;另外还去了现场帮客户解决问题。至此来北京的计划全部打乱。下次一定提前安排,组织一次MySQL实验室聚会。

MySQL Cluster Geographic Replication Deep-Dive

2009年12月2日 谭俊青 没有评论

geographic-replication-deep-dive(PDF)下载

其中异构复制的时候有些技巧,比如 不同的mysqld只复制一部分表,从而避免延时的出现。