随笔-72  评论-475  文章-0  trackbacks-7
  置顶随笔
最近我的一位好朋友,先是母亲检查出来已经是癌症晚期,然后父亲又发现胃癌,昨晚喝酒,朋友说我这些天白头发多了不少,哎,一切都是关于健康的消息,想想自己也曾经熬夜奋战,也曾经斗志昂扬,再想想健康,自己的脊椎,从颈部到腰,都时常疼痛,朋友们,工作的同时也不要忽略了自己的健康。
posted @ 2008-07-08 13:40 Keep Walking 阅读(3747) | 评论 (11)编辑
  2009年6月12日
这两天有空看了一下ppc2009大会的一些pdf,发现这次关于Replication的讨论还是很多的,很多内容都很实用,就总结了一下。本人英文水平水平有限,难免有翻译的不对的地方,有疑问欢迎讨论:)


        Replication延时的类型

1.        固定性的延时
——Slave的数据持续性的落后于Master并且一直无法与Master的数据保持一致。
——Slave的数据经常在白天落后于Master,而在晚上可以赶上并与Master的记录保持一致。
这种类型的延时通常是由于Slave服务器的负载已经到达了上限或在白天访问量大的时候到达上限造成的。

2.        非固定性的延时
——Slave的数据只是短暂的落后于Master,可在短时间内恢复
这类型的延时通常与批量任务和报表有关,效率差的查询也会导致这类延时

        Mysql Replication的限制

Mysql的Replication是单线程的,意味着只能有效的使用一个CPU内核和一个磁盘,一条复杂的查询或者事务都导致进程被阻塞,不过现在针对5.1版本的多线程Replication补丁,http://forge.mysql.com/wiki/ReplicationFeatures/ParallelSlave,还是pre版,有很多限制,感兴趣的可以去看看。

        Replication的容量

1.        理解什么是Replication的容量
可以将Replication暂停一个小时,重新启动Replication后,观察Slave的数据多久可以与Master一致。从Replication重新启动到和Master数据一致所花费的时间与Replication暂停的时间的比值就是Replication的容量。

2.        建议保持Replication的容量在3倍以上,即延迟一个小时的数据,Slave只需要20分钟就能与Master的数据一致。

        Replication的优化

1.        5.0的mysql中避免类似以下的更新语句
INSERT … SELECT <complex query>
UPDATE .... WHERE <complex clause>
复杂的查询会导致Replication线程阻塞。如果是insert或update与select结合的语句,可以讲select单独执行并保存在临时表中,然后再执行insert或者update。
如果使用的是5.1的mysql,新功能中的行级Replication(RBR)可以解决这个问题。RBR可以将在Master上通过复杂查询后更新的结果直接传给Slave,Slave可以直接将结果更新到数据库中。

2.        避免大的事务
太大的事务会造成Replication长时间阻塞,数据会严重滞后于Master。

        Slave服务器的硬件选择

更快的CPU内核,对于单线程的Replication多核CPU是没有任何优势的。
更高速的硬盘,包括更高的转速和更好的高速缓存命中率,如果有钱的话上SSD吧

        主从结构的扩展性问题

1.        如何降低写操作的频率
Master的写操作会扩散到所有的Slave上,所以高频率的写操作会降低Slave的读操作效率。
至少保持一台Slave做全库同步,其他的Slave可以只做部分表的同步。当然,这需要web应用程序的配合来分配哪些查询读哪些Slave。
将一些更新操作放到memcached中,例如session和计数器。
Slave使用myisam引擎
将一些写入量很大的更新操作直接在slave上执行,而不通过Replication。

2.        如何更有效的利用Slave的硬件资源
使用分区
有选择的对表进行同步
在Slave上对数据进行归档。
Session的持久化
为不同的应用服务器分配不同的Slave进行读操作。
或者根据查询类型的不同来分配不同的Slave。

3.        如何使你的程序最大化的利用Slave
将对数据更新不敏感的查询放到Slave上,而需要实时数据的查询则放到Master。
通过session的持久化,让做了修改的用户首先看到修改的内容,其他的用户可以等待Slave更新后再查看新内容。
对于某些数据,可以用memcached来存放数据的版本号,读Slave的程序可以先对比Slave的数据和memcached数据的版本,如果不一致则去读master。用户和博客类的信息可以用这种方法。
在查询前可以通过SHOW SLAVE STATUS检测Slave的状态,然后根据返回的结果进行服务器的选择。
posted @ 2009-06-12 17:48 Keep Walking 阅读(802) | 评论 (0)编辑

网上很多关于启用innoDB的办法,都是注释掉skip-innodb选项,实际上,你还需要删除两个文件:

C:\Program Files\MySQL\MySQL Server 5.0\data\ib_logfile*
C:\MySQL Datafiles\ibdata*

 如果仍然不能确定,可以使用语句查看:

SHOW VARIABLES LIKE 'have_%'

 

 

posted @ 2009-06-12 11:32 Keep Walking 阅读(815) | 评论 (0)编辑
  2009年6月4日
根据 mysql5.0以上版本 strict mode (STRICT_TRANS_TABLES) 的限制:
不支持对not null字段插入null值
不支持对自增长字段插入''值,可插入null值

不支持 text 字段有默认值

在my.ini中将 STRICT_TRANS_TABLES 去掉即可。

但是这个比较危险的是自增字段也可以插入null值!而自增字段一般都是主键,聚集索引,真的存在null值就完蛋了。

posted @ 2009-06-04 11:29 Keep Walking 阅读(1074) | 评论 (0)编辑

mysql的参数赋值语句必须是只能够选出一行,

SELECT username,nickname INTO Ausername,Anickname FROM userbase WHERE userid = userid LIMIT 1 ;

这样的语句必须要加上limit 1才行。

另外,这种赋值语句还有个规矩就是参数名和字段名不能冲突,不然能够执行过去,但是却没有给参数赋值,这是个很隐性的错误,可以参考手册上的:

重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column

posted @ 2009-06-04 11:00 Keep Walking 阅读(1037) | 评论 (0)编辑

mysql连接器 不支持将null参数传递给连接,所以在加入以前必须得判断是否为null,类似sqlhelper应该修改一下:

 

Code
posted @ 2009-06-04 10:45 Keep Walking 阅读(44) | 评论 (0)编辑
  2009年6月1日
这几天将sphinx+coreseek+mysql配置结合成功,就是觉得coreseek的中文好像关联度不高的都选择出来了,可能我的语法还是用得有点不对,不知哪位熟悉sphinx查询语法的能指点一二,实现精确匹配查询的呢?
posted @ 2009-06-01 23:24 Keep Walking 阅读(384) | 评论 (0)编辑
  2009年5月22日
     摘要: 最近在做mssql转换成mysql的工作,总结了点经验,跟大家分享一下。 同时这些也会在不断更新。也希望大家补充。   阅读全文
posted @ 2009-05-22 14:18 Keep Walking 阅读(2854) | 评论 (35)编辑
  2009年5月17日

最近自己忙忙叨叨,忙忙叨叨的,不知道都干了些啥,一直在围绕网站SNS建设的规划,讨论来讨论去,这个礼拜最终已经确定,虽然不是我想要的结果,但是我想时间已经不能再等人了,总要人做出牺牲,网站在排名方面一直没有太多的变化。

SNS还是准备采用discuz的UcenterHome,现有网站只能改成lamp架构,当然迁移的过程是个漫长的过程,先将数据全部转为mysql,然后再将aspnet转成php,再迁移web服务器到apache,最后迁移操作系统到linux 。数据迁移目前已经完成近200个表的创建,下一步就是如何对数据的兼容性做研究,特别是mysql不支持N类型,有些麻烦。

最近也尝试做了将ucenter+UcenterHome转换成sql server数据库,结果进度非常令我惊喜,从数据库访问层来说,很多代码只需要将my改成ms即可,另外,在数据库代码方面,只有寥寥的几个语法不兼容外,绝大部分都是不需要改动,毕竟Mssql和Mysql都是属于同一Tsql,我已经总结了如何成功实施将mssql转换到mysql的经验,等这个项目实施完毕,就公布出来跟大家分享。


posted @ 2009-05-17 17:49 Keep Walking 阅读(464) | 评论 (0)编辑
  2009年3月30日
我的vs2008,vs2008 sp1都安装好了的情况下安装Silverlight_Tools.exe还是报错显示没有安装vs2008和sp1,后来发觉可能是Silverlight_Tools.exe语言版本的问题,又下载了中文的Silverlight_Tools.exe,结果搞掂。网上搜到的很多比较折腾的安装方式,还不如多下载一次来得快。
posted @ 2009-03-30 15:20 Keep Walking 阅读(1236) | 评论 (0)编辑

看看图吧,呵呵

 

 

左边的广告很雷人吧~

posted @ 2009-03-30 15:18 Keep Walking 阅读(228) | 评论 (2)编辑