The Mirages

樱桃沟夹事

mysql的单点一直是一个让人很烦恼的事情,特别是master的单点。
现在外面的解决方案主要如下: 双master方案,heartbert(HA)+rhcs(分布式文件系统),heartbert(HA)+DRBD.
双master存在的问题是master有2个IP,这样意为着前端需要指向2个的masterIP,同时bin-log也是双向同步的,会不会比单向同步的量更多呢?
第二种方案是挺不错的,但是必须要分布式文件系统,要是实在不行就可以用NFS来代替,但是这样存在的问题就是数据文件是单点,所以必须使用分布式文件系统。
第三种是关键是DRBD,这个是在网络层做RAID1,在A机器上收到数据后DRBD会写到本地硬盘上,同时通过网络传输到另外一台机器上。这样保证了2台机器的一致。特别是DRBD传输的时候有多种协议可以选择,但是一般看到网上大家都是使用协议C(C表示收到远程主机的写入确认后,视为写入完成)
DRBD的架构如下:
今天在high scalability有个文档专门比较各种mysql HA的方案。基本上大家可以根据这个比较来做自己合适的的MySQL HA了
2010-05-09

第三章 架构优化和索引

第三章的主要是说合理使用不同的数据类型和索引。主要需要注意的内容有如下:

  1. 通用原则
    1.1. 数据类型更小通常更好。
    1.2. 数据类型越简单越好
    1.3. 尽量避免使用NULL,要是有必要用NULL,那也可考虑使用0来进行代替。 创建表的时候定义好not null default 0。
    1.4. DATETIME和TIMESTAMP都能保持同样数据类型:日期和时间,精度为妙。而且TIMESTAMP使用的空间只是DATETIME的一半,TIMESTAMP使用4个字节,DATETIME使用8个字节。而且TIMESTAMP还能保存时区,拥有特殊的自动更新能力,但是TIMESTAMP的范围要比DATETIME要小的多。TIMESTAMP类型只能保存1970年1月1日零点到2038年。而DATETIME却能保存1001年到9999年。
  2. VARCHAR和CHAR
    2.1. 大家都知道VARCHAR是可变长度的,而CHAR是定长的。
    2.2. 使用VARCHAR(5)和VARCHAR(200)保存’hello’占用的空间都是一样的。但是VARCHAR(5)只会使用较小的内存空间,因为MySQL通常会分配固定大小的内存块来保存值。
  3. 索引对于查询的性能影响是非常大的。下面先介绍下索引类型。
    3.1. B-TREE索引,大部分MySQL存储引擎都支持B-TREE。除了ARCHIVE直到5.1才支持。
    3.1.1. 存储引擎使用了不同的方式把索引保存在磁盘上,它们会影响一定的性能。例如MyISAM使用前缀压缩以减少索引,而InnoDB不会压缩索引,因为它不能把压缩索引用于某些优化。
    3.1.2. B-TREE通常意味着存储是有序的。
    3.1.3. B-TREE索引能够很好的用户全键值,键值范围或者键前缀进行查找(最左前缀)。
    3.1.3.1. 匹配全名,如 where name=’timo’
    3.1.3.2. 匹配最左前缀, 如 where name like ‘tim%’
    3.1.3.3. 匹配范围值,如 where name between ‘tim’ and ‘timo’
    3.1.3.4. 精确匹配一部分并且匹配某个范围内的另一部分,如 where name=’timo’ and age between 25 and 30
    3.1.3.5. B-TREE索引通常能支持至访问索引的查询,它不会访问数据行
    3.1.4. B-TREE索引的局限性
    3.1.4.1. 假设有如下的索引 key(first_name, last_name, age)
    3.1.4.2. 如果查找没有从索引的最左边开始,它就没有什么用处。比如where first_name like ‘%mo’ 这样的查找是不走索引的。
    3.1.4.3. 不能跳过索引中的列, 如查找 where first_name=’timo’ and age = 25, 如果建立的是上面这样的联合索引,又跨了last_name,那就不会走索引了。
    3.1.4.4. 存储引擎不能优化访问任何在一个范围条件右边的列。如查找
    where first_name=’timo’ and last_name like ‘s%’ and age=25。访问就只能使用索引的前2列,因为like是范围条件。
    3.1.4.5. 一些局限并不是B-TREE固有的,而是MySQL查询优化器和存储引擎使用索引的方式造成的。
    3.2. 哈希索引(hash index)
    3.2.1. 它值对使用索引中的每一列的精确查找有用。所以很少用,在MySQL中是有Memory存储引擎支持显式的哈希索引。
    3.2.2. 由于hash index是给每个键值建立一个哈希表,所以它的查找速度是非常快的,但是也会有很多局限性。
    3.2.2.1. 因为索引只包含了哈希码和行指针,而不是指本身,MySQL不能使用索引中的值来避免读取行。
    3.2.2.2. 不能进行排序
    3.2.2.3. 不支持部分键匹配
    3.2.2.4. 只支持使用 =, in() 和<=>的相等比较。
    3.2.2.5. 发生碰撞的时候存储引擎必须访问链表中的每个指针,然后逐行进行数据比较,以确定正确的数据。
    3.2.2.6. 如果有很多碰撞,一些索引维护操作就会很慢。
    3.3. 空间(R-TREE)索引
    3.3.1. 只有MyISAM支持,可以使用GEOMETRY这样的地理空间数据类型,必须使用MySQL GIS函数进行查找。
    3.4. 全文索引
    3.4.1. 全文索引只有MyISAM支持。是从文本中直接找关键字,而不是从索引中进行比较。全文索引用户MATCH AGAINST操作。
    3.5. 高性能索引策略
    3.5.1. 隔离列
    3.5.1.1. 下面2条语句是不会使用索引的
    1
    2
    3
    4
    5
    6
    7
    8
    9
    where actor_id + 1 = 5 where TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col) <= 10 
    ```
    3.5.1.2. 下面2条是针对上面2条进行修改使用索引的
    ```sql
    where actor_id = 4 where date_col >= DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY)
    ```
    3.5.2. 前缀索引和索引选择性
    3.5.2.1. 当某一列特别长的情况下,如果给全部长度建索引,那样会增加索引的大小,而只做很短的前缀索引,虽然节约了空间,但是会增加选择性。所以建前缀索引必须让选择性接近于全部长度的选择性。
    3.5.2.2. 平均来说前缀的选择性能接近于0.31就可以了。
    sql select count(distinct city)/count() from db_name.table_name; select count(distinct left(city, 3))/count() AS sel3, count(distinct left(city, 4))/count(*) AS sel4 from db_name.table_name;
3.5.2.3. 只看平均选择率在特殊情况是不够的,比如在数据分布非常不均的情况下。  
3.5.2.4. Alter table db_name.table_name add KEY (city(7)) 这句就是只对city这一列的前7个字母进行索引。  
3.5.3. 聚集索引(clustered indexes)  
3.5.3.1. 在InnoDB中聚集索引实际上在同样的结构中保存了B-TREE索引和数据行。聚集的含义就是指实际的数据行和相关的键值保存在一起。每个表只能有一个聚集索引,因为不可能一次把行保存在两个地方  
3.5.3.2. 在MySQL中只有SolidDB和InnoDB是支持聚集索引的。  
3.5.3.3. InnoDB是按照主键(Primary Key)列进行聚集。如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。  
3.5.3.4. 聚集索引有助于性能,但是也会导致严重的性能问题。总的来说它有如下的优点:由于把索引和数据都保存在一棵B-TREE中,因此查找数据会比通常的要快。  
3.5.3.5. 聚集索引也有如下的缺点:会导致I/O密集,插入速度慢,更新索引列慢,插入新行会进行分页,这样导致占用更多的磁盘空间。第二索引会比预想的大,第二索引访问需要两次索引查找。  
3.5.3.6. 在InnoDB中是根据主键来进行顺序插入的(这个跟InnoDB的数据布局有关),所以主键最好是一个自增的值,与应用程序无关。  
3.5.4. 覆盖索引(covering indexes)  
3.5.4.1. 包含(或者覆盖)了所有满足查询需要的数据的索引叫覆盖索引。  
3.5.4.2. 索引记录通常远小于全行大小,因此只读取索引就能极大的减少数据访问量(这个跟聚集索引的优点一样)  
3.5.4.3. 索引是按照索引值进行排序的。  
3.5.4.4. 大部分存储引擎缓存索引比缓存数据更好(除了Falcon)。  
3.5.4.5. 对于InnoDB覆盖了查询的第二索引在主键中避免了另外一次索引查找。  
3.5.4.6. 覆盖索引必须保存它包含列的数据。  
3.5.4.7. 当发起一个索引覆盖的查询,用EXPLAIN会在extra列显示Using Index  
3.5.5. 为排序使用索引扫描  
3.5.5.1. MySQL有两种产生排序结果的方式,使用文件排序(Filesort)和扫描有序的索引。如果EXPLAIN的输入type列的值是index。那说明MySQL会扫描索引。  
3.5.5.2. 只有当索引的顺序和order by字句中的顺序完全一致,并且所有列排序的方向(升序或降序)一样才可以。如果查询连接多个表,只有在order by 字句的所有列引用的是第一个表才可以。  
3.5.5.3. 假设有如下表:  
```sql 
CREATE TABLE rental ( ………… PRIMARY KEY (rental_id), UNIQUE KEY rental_date (rental_date, inventory_id, customer_id), KEY idx_fx_inventory_id (inventory_id), KEY idx_fx_customer_id (customer_id), KEY idx_fx_staff_id (staff_id), ………… ) 

3.5.5.3.1. 下面的这几个语句是使用到索引的。

WHERE rental_date='2010-05-02' ORDER BY inventory_id desc; WHERE rental_date > '2010-05-02' ORDER BY rental_date, inventory_id; 在where字句是范围的时候需要用最左前缀索引进行排序。 
阅读全文 »

今天算是把中国几个主要网站的微博都给注册上了,加上以前的twitter, fanfou, jiwai, zuosa,而现在这个队伍又增加了163, sina, qq, sohu都4大门户的。

其中QQ的还算是在内测阶段,其它都已经开放了,而之前的twitter, fanfou, jiwai都因为种种种原因在中国消失了。真是可惜了饭否,要不是新疆事件的发生,我想王兴现在应该是领跑了国内微博市场了。而现在微博只是成了极大门户之间一个小功能而已,做不做的起来那是随便,就跟SOHU的白社会现在基本算了挂了,而SINA的朋友在内测阶段就挂了。因为SNS比较容易聚集人气,一旦人家做大了,后来者很难救超越了,除非出现杀手级应用,比如KAIXIN001的MSN和QQ的好友导入功能。

从截止今天来看,SINA还是在主推它的微博产品,很多名人也被导入到微博中,而很明显SINA的微博会再次像它的BLOG产品一样沦为名人的意见栏,很多粉丝在后面留言,而粉丝们很少会在SINA上建立自己的博客。而它的微博也明显也有这样的特质,可能对于名人来说写个博客太麻烦了,要写那么多字也难为这些人,虽然估计这些博客也不是这些大忙人自己写的。

而QQ还无法在首页找到微博的影子。

163好像挺努力的推自己的微博的,还在首页最下方整了一块地方来推这个,而SOHU只有个目录链接。

4大门户的微博之战还刚开始,而微博技术上并不难实现,主要是如何实时找到最热的关键字等等。

阅读全文 »

昨天晚上世博开幕了,20多分钟的烟火表演甚是漂亮,我想我要是在现场的话估计可以更多更好的画面。本来一直说世博倒计时多少天就是离我回家还有多少天,可最终我没有回去。要是回去的我想我也在滨江大道的人群中。
其实要说世博应该算是一个早已没落的盛会了,要说它的最光辉的时刻还是刚开始举行那几届,造就了伦敦的水晶宫,巴黎的埃菲尔铁塔灯,而最近一次让我又映像的还是几十年的日本世博会。
不过对于我们很少组织过世界重大盛会的国家来说,世博会还是不错的。长达半年要是在比较小的国家估计也就前几个星期会参观的人,而在这里根本不用担心人少。
之前看过一个笑话,内容是这样的,北京举办奥运会前汶川地震,上海举办世博之前是玉树地震,国际足联有意将下届世界杯放在中国举行,帝国主义亡我之心不死啊。
其实对于普通上海市民来说世博对自己的影响很小(除了因为世博拆迁的人们)。胖子家居然还成为了世博接待人家,看来在市中心有套别墅还是很牛B的。
今日老爸从上海发来急电,今日上海交通全面瘫痪,话中无不显露出一位开电动自行车人士的得意的心情。还好上海地铁交通非常发达,而且现在有了月票的出现,对于地铁上班族影响不大,可对于公交车出行的,那简直就是悲剧了,北京今年开2会期间的2个礼拜,三环每天都是狂堵,导致上班经常迟到。
据说世博结束后有些建筑会拆,我想本来有些就应该拆了,什么可口可乐馆这样的企业馆本来留着也没有实际的意义,但是像有些国家馆比如荷兰馆和英国馆,德国馆还是有保留的价值的,据说不是市政府各个机构会在盛会结束后迁入世博园区进行办公。那人民广场那个大厦作为什么进行使用呢?
哦,今天是51劳动节了,今天家里来了客人,天气很热,不想出门,换上夏装了。好快啊,一下就感觉到了夏天了,上周还有冬天的感觉呢。时光真的很快,去年这个时候来北京才没多久呢,这就一下1年就过去了。
任时光匆匆流去,我只在乎你。亲爱的。
2010-05-01

为了省去再进行手动编译,就直接把一个编译完成的虚拟机copy成另外一个,但是mac地址却变成一样了,这样没法连接了。放狗搜索了一下找到如下方法
vim CentOS-test1.vmx
修改如下2行
ethernet0.generatedAddress = “00:0c:29:50:6f:98”
uuid.bios = “56 4d 84 12 57 12 a7 6e-64 ac 83 5c fb 50 6f 98”

我自己就修改了最后一位把7改成8就可以了。重新启动虚拟机一切正常。

2010-04-27

如何在apache中添加中文域名
比如www.中国.com
打开CNNIC的中文域名在线转码页面,选择转成punycode,输入待转中文域名,转换后再绑定。 转码地址http://cnnic.cn/html/Dir/2003/10/29/1112.htm
然后转成了 www.xn--fiQs8S.com
ServerName www.xn--fiQs8S.com
ServerAlias www.中国.com

难得会上企业的网站,但是现在是车展原因上了一下一个企业的网站,发现现在企业网站很多都是flash来完成的,这个公司的主要web server应该是IIS,至于什么版本实在看不来,但是有些静态页面是用apache的,在更前端就是CDN了,帝连还会接这样客户,看来只要是网站他们都接啊,不过这种客户应该不像我们以前每天都那么多事情的。
说说下载吧,他们居然下载也是通过flash进行控制的,虽然我装了迅雷,但是点击下载不会自动启动迅雷,弹出的目标窗口也是flash做出来的。flash下载就会在本地创建一个临时文件,至于走什么传输方式没有dump也不大清楚。而且中断如何进行控制也不知道,能否续传也不知道。呵呵,只是难得碰到这样的下载方式。
2010-04-26

对于这种片子,我的意见是还是网上下载看吧,因为没有炫目的特效,没有3D,音效也不重要。

在上映一周后我终于借助迅雷在网上下载一个比较不错的版本,虽然不是DVD。

看过片子后我大部分时间处于头脑空空,只是想着应该要写一篇观后感,不然以后就不记得自己还看过这部片子。片子是那种不会让人进行思考的类型,基本算是叙事型加点时尚的元素。看过了基本就忘记大部分的内容了,我的大脑对于记忆这些东西实在是没有什么方法,很多人可以看完电视连续剧可以头头是道的从头说到底,而我就是说不清楚。但是中心思想还能把握的住的,没有办法,中学语文老师教的比较好,把如何把握文章的中心思想的独门秘笈传授与我。

所谓时尚的元素指片中充斥着大量的广告,从开头一直到结尾。其实我们完全可以用广告片段来堆砌成一部片子,要是卖广告的话应该可以比杜拉拉更早的收回成本。

我并不是十分反感广告的人,有些广告我个人还非常喜欢,但是广告怎么加到片子中是个学问。难道都跟春晚6000同学多次举下会员果汁一样。

其次该片本末倒置,将一部本应反应职场的电影拍成了爱情电影,而且还是比较流行所谓爱情。这个老实说是我最不能容忍的,我可以容忍广告,但是无法容忍脱离主题。难道我们是要教女性只有通过这种方式才能升职吗? 这个就脱离了原作的本意了, 这次怎么没有女权主义人士出来声讨了呢?

阅读全文 »

OLTP, TCP测试,联机事务的处理性能。有DBT2(我没运行成功,它的手册中最后需要执行的文件我用find找了下也没有)
重视暖机过程和测试数据:这个是主要是为了一些缓存内容
单组件测试工具
mysqlslap
sysbench
dbt2
mysql benchmark suite(sql-bench)
super smack(支持多用户复杂测试,推荐使用)


性能分析(profilng)
使用JDBC驱动或者PHP的类在程序中嵌入mysql查询执行时间的代码。
还有就是使用mysql的慢日志查询


使用mysql-pathes 来将long_query_time时间粒度降低到毫秒。但是5.1版本之前需要自己手动进行编译进去。
将long_query_time = 0 可以记录所有的查询
手动编译这个补丁还能获得其它的慢查询的信息: 查询的连接ID,查询缓存,联接类型,临时表,排序,以及innodb的一些信息。
慢日志分析工具:
mysqldumpslow
mysql_slow_log_filer
mysql_slow_log_parser
mysqlsla

 mysqldumpslow -s c -t 20 -g select ../temp/db100-slow.log 
阅读全文 »

1.北京奥运前夕汶川地震,上海世博前夕玉树地震,上期《体坛周报》报道:国际足联有意让中国申请举办世界杯。帝国主义亡我之心不死……

2. 注意《2012》第20分钟20秒台词…美国总统对女儿说“波兰总统夫妇已经提前登机了”………

3.袁腾飞:那个。。。国民党失败的原因咱们今天就不说了 因为容易联想到今天的政局。

4.大学里有棵树,叫高数,很多人挂在上面……

5.维稳,是一种无知的理念。稳定从来就不是宇宙间万物的应该状态,万物总在混乱中趋向某种不确定的平衡,并且这种平衡会经常被打破,趋向另一种短暂的平衡。

6. 一切都可以改变,一切都不会太远。

阅读全文 »
0%