MySQL的CAST和IFNULL函数的问题

3 月 5th, 2010 | Posted by | Filed under 程序设计

关于MySQL的一个CAST和IFNULL函数诡异问题,不明原因,记录一下,明天继续分析。

这个是WP-PostView插件的一段SQL

SELECT p.ID, p.post_title,
IFNULL( CAST( pm.meta_value AS UNSIGNED ) , 0 ) AS views
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS pm ON pm.post_id = p.ID
AND pm.meta_key =  "views"
WHERE p.post_date <  "2010-03-05 22:19:55"
AND p.post_status =  "publish"
AND p.post_type =  "post"
AND p.post_password =  ""
ORDER BY views DESC LIMIT 5

在我的数据库上查询结果非常诡异:

ID post_title views
10 [论文]对简易几何机械化证明的进一步研究 9
32 页面总算基本修正好了 9
51 一个很好玩的钢琴Flash游戏 9
60 修改友情链接的排列方式 9
93 UML之父——Ivar Jacobson介紹SMART方法 9

选出来的views列全部是9,不知道为什么。

如果我去掉IFNULL,

SELECT p.ID, p.post_title, 
CAST( pm.meta_value AS UNSIGNED ) AS views
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS pm ON pm.post_id = p.ID
AND pm.meta_key =  "views"
WHERE p.post_date <  "2010-03-05 22:19:55"
AND p.post_status =  "publish"
AND p.post_type =  "post"
AND p.post_password =  ""
ORDER BY views DESC

得到的结果将是对的,
如果去掉CAST,

SELECT p.ID, p.post_title, IFNULL( pm.meta_value, 0 ) AS views
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS pm ON pm.post_id = p.ID
AND pm.meta_key =  "views"
WHERE p.post_date <  "2010-03-05 22:19:55"
AND p.post_status =  "publish"
AND p.post_type =  "post"
AND p.post_password =  ""
ORDER BY views DESC LIMIT 5

得到的就是错的,并且只有2位数一下的结果,2位数以上的结果出不来,但不是9或者99了。

明天继续分析这个问题。
暂时通过去掉IFNULL来解决。

标签: , ,

CPU负载的分析

3 月 3rd, 2010 | Posted by | Filed under 操作系统

最近对我的本本(4核8线程)用top命令看系统状况出现了CPU利用率超过200%的情况,非常诧异,查了下相关资料,把这个问题弄清楚了。
首先来分析下CPU Load

load average: 0.09, 0.05, 0.01

分别是1分钟、5分钟、15分钟的平均Load。
Load这个东西怎么理解呢,就像一条马路,有N个车道,如果N个进程进入车道,那么正好一人一个,再多一辆车就占不到车道,要等有一个车空出车道。
在CPU中可以理解为CPU可以并行处理的任务数,那么就是“CPU个数 * 核数”,如果CPU Load = CPU个数 * 核数 那么就是说CPU正好满负载,再多一点,可能就要出问题了,有任务不能被及时分配处理器,那么保证性能的话,最好是小于CPU个数 * 核数 *0.7。

查看CPU核数可以通过:grep ‘model name’ /proc/cpuinfo

那么以哪个平均值为准呢?如果1分钟平均出现大于CPU个数 * 核数的情况,还不用担心,如果5分钟平均也是,那就要警惕了,15分钟平均也是这样,就要分析哪里出问题了,防范于未然
CPU利用率超过100%的问题,也是差不多,top命令应该是把每个核的CPU占用率加起来,算一个和,于是多核情况下会出现超过100%。

另外Context Switch Rate也是个非常值得注意的值,因为线程间切换的代价也是非常高的。

引用一个公式:Context Switch Rate = Interrupt Rate + TPS* N

对于一个多线程的程序,我觉得准备一个控制线程来调度任务是非常必要的,免得线程过于高并发,导致资源的争用和线程切换带来性能问题,最好控制并发的线程数基本等于CPU的总核数,减少这个N,获得更好的处理器性能。

参考了如下几篇文章:
压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate
理解Load Average做好压力测试
理解 Linux 的处理器负载均值
高性能服务器架构

PS. 最近博客写得少,都要长草了。顺便赞一下阿里的食堂,比我们学校食堂四年不变菜饭还贵好多了。

每周推特 2010-02-28

2 月 28th, 2010 | Posted by | Filed under 生活轨迹
  • Discovery那位老头原来叫加来道雄,理论物理学家 #
  • 论文看得好头痛 #
  • name.com注册的域名,修改了指向,很快就在DNS里更新,新网注册,改了2小时了没动静 #
  • 测试了下MySQL使用索引的极限,如果使用索引无法筛掉80%左右的数据,MySQL会选择不走索引。还没有考虑索引长度的问题,明天继续搞清楚。 #
  • 发现MySQL索引的长度对使用索引的决策影响不是特别大,测试了int/mediumint/smallint/tinyint/varchar,大约都是在剩下20%左右结果集的时候开始使用索引。 #
  • where+sort的情况,MySQL走错索引的概率很高。 #
  • mystat脚本就快完善了,Windows下也显示正常,只是无彩色。下一步转成Curses显示,就可以通用了。然后加入socket通讯函数,就可以做成在线呈现的了 #
  • 学生就业搞不懂学校插个什么劲,非得掺和进来 #
  • 明天的人工智能,God Bless,烦死了 #
  • 从Gmail上Down课件,慢的要死,转发到QQ邮箱,下载飞速,我无语了,GFW发威了么 #
  • 天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空伐其身,行弗乱其所为,所以动心忍性,曾益其所不能。再艰难也要挺过这段时期,曾益吾所不能。 #
  • 百感交集的夜晚,要烦协议的事情,要安慰GF,还要备考明天的人工智能 #
  • GF终于睡觉去了,好好看书……博弈树Alpa/Beta剪枝其实蛮简单……代数合一就更简单了……关键要格式对,Prolog命中即终止匹配,期末这里悲剧了15分,不然就过了 #
  • 看A*算法又看到了完备性的博弈,h(x)启发函数控制纵向扩展,速度快,这样可能使搜索不完备,g(x)代价值控制横向扩展,这样可以提高完备性,但效率低。f(x)=g(x)+h(x)就可以控制好横向和纵向的扩展方向,互相牵制。 #
  • 在这个屁股决定脑袋的行政体系里,一切莫名其妙的事情都可能发生。 #
  • 终于领略了3D电影,就是眼睛痛,人工只能Passed,又做完一件事 #

Powered by Twitter Tools

标签:

每周推特 2010-02-21

2 月 21st, 2010 | Posted by | Filed under 生活轨迹
  • 看了看老外的设想,跟我们的设想几乎一致,每个有Wifi的手机,可以作为一个节点,既是客户端也是服务端,只要一个自组织网络里有一个手机能连上基站,或者互联网,那么基于P2P协议,网络内每个手机都可以连上。 #
  • 当年自己掏了那么多钱去研究这个东西,在开发板上都做好了Demo,被狗P评委给Kill了,现在老外开始搞了,还拿到了300万美金的投资,这些狗P评委还有什么可说的,不就是为了保护中国移动之类的运营商可以肆无忌惮的剥削百姓么 #
  • @wolfdeng 可惜被挑战杯Kill了,参赛资格都没有,杯具 in reply to wolfdeng #
  • @yanzisky1989 我知道了…… in reply to yanzisky1989 #
  • @51isoft 好吧,评委想的比我们远…… in reply to 51isoft #
  • 我选Linux发行版就是选包管理器,现在还是偏向于源码的包管理器,在ArchLinux和Gentoo中选 #
  • 每次听到春晚歌颂党的歌,我就感到由衷的恶心,自己做的好,要人来唱干什么,老百姓心里自然会记得,对自己作恶想掩盖,才造出一堆的歌来歌颂自己,欲盖弥彰 #
  • @yanzisky1989 吃饭去了…… in reply to yanzisky1989 #
  • 又看到金龟子了,我那时候天天看她主持节目,现在竟然还在主持~金龟子也是一代神器…… #
  • RT @tinyfool: RT @delphij: 某前同事MSN:身为一个技术人员,当不能用本职工作为公司创造生产力的时候,还可以以休年假的方法为公司增加利润 #
  • RT @hsin747: 在台灣,無論是陳水扁或馬英九都必需在過年期間發紅包給民眾,為何不見北京及香港領導人發紅包給市民呀?? #
  • RT @ma_shao_bo: 来自推外的技术指导:纯从技术角度给各位光棍出个主意:给所有你认识的异性发个短信说“我喜欢你”,然后忍三个小时,从回短信里的人里挑一个,剩下的再发一个短信“不好意思,喝多了……”。搞定。 #
  • @Natural__Light 家里呆着 in reply to Natural__Light #
  • @wolfdeng 现在还是偏向Arch Linux,既有二进制也有源码分发包 in reply to wolfdeng #
  • EMS早就可以倒闭了,限时隔天件,第四天了还不到,没打我电话就说我不在 #
  • 买个XV6800,跟卖家买的时候谈判有歧义,又被耍了,已经气的没气了,淘宝买个AA/AAA码上EVDO算了 #
  • RT @yxwlmxy: RT @yeka52: 姚滨一直是清高的,在最举步维艰的时候,他不抱怨,不指责任何人。他的原则是,有能耐你就挺住,做出成绩来给别人看。别人争利益,谈条件,他从来不争不抢。他是真的不屑,认为争那些不值。 #
  • 被称为经济适用男 #
  • RT @newsinchina: 其实很多老人在事实举证上是根本无法说服年轻人接受他们那老朽的观点的,然后他们往往会以长者和权威的态度中止和你平等地讨论下去! #
  • 才发现介川是浩二 #
  • 点优酷看到一个视频,德国高速259辆车相撞,没死一个,伤66个,这车得啥质量呀……德国车威武 #
  • 夜深人静是写技术博文的好时候 #
  • 想把Wordpress换个简约点的主题,搞的跟个八卦博客一样 #
  • RT @Aro_Carter: RT @Z1scar:~RT @crystallys: RT @singinrain: RT @Mr_Lau: CCAV不转播国足,国足夺冠了;CCAV转播冬奥会开幕式,结果火炬坏了 #
  • 如果我向黄牛买票。黄牛说:“加10元”。我肯定说:“不,我至少加您30元。”并说:“谢谢!”。警察就知道抓这种赚辛苦钱的,加300的黄牛都TMD是内部的人,警匪一家。 #
  • 搜括民财还要看刮来的钱用在什么地方,隋炀帝搜刮民力最后用在了开大运河上,罪在当代利在千秋。用在自己身上,那就是千古罪人,永世不得翻身。 #
  • 原来一次性筷子是这么回事,http://goo.gl/eN8p #
  • 还是ArchLinux用的爽,要二进制包有二进制包,要源码包有源码包 #
  • 淘宝出信用卡了?嘛时候支付宝也开个银行好了,AliBank #
  • 吴军老师的数学之美真不错,毕设的做法有些修正,基于文法的分词不如基于概率的分词 #
  • 刘谦被称为国内都市泡妞魔术青年的精神领袖,”都市泡妞魔术青年“,我觉得勺子挺像,@Natural__Light 你觉得呢? #
  • 孙茂松教授的《Chinese word segmentation without using lexicon and hand-crafted training data》写的很好 #
  • 备案网站只要TMD做的像个人类使用的网站,我也不会这么抵制备案 #
  • RT @Fenng: 保持关注 RT: @linglingfa: 今天才发现,ebay和eachnet又分开了?现在ebay.cn专心做走私,原来不用的eachnet域名又启用了。什么时候的事儿啊?这淘宝虽然强大吧,也不用如此自乱阵脚吧? #
  • 我这破神舟本装MacOS就是装不上,还是继续用Linux #
  • 时间会坍塌么?有学理论物理的推友能解释下么?时间存在加速度么? #
  • 当年Discovery讲超弦理论理论的物理学家现在头发都白了,又在Discovery讲力场防护罩,围观中…… #
  • 原来太阳是电浆…… #
  • 这位老头设计的力场除了纳米碳管还不能大量生产以外,都可以做出来,看来实现并不难 #
  • 原来Google的在线翻译并不是语义分析,而是通过概率统计,词出现的概率和句子出现的概率来计算,这实际上考虑了人类语言习惯的问题,很多时候我们说话并没有严格的语法,但是却含有很多的习惯,通过概率来反应这种习惯,做出来的翻译效果应该更接近日常用语,分词同理。 #
  • 金价、美元同时高涨,各国货币都下跌,唯独美元猛涨。看来华尔街的财主们又在狂买黄金,炒高金价,吸引各国投资者抛售本国货币购买美金来买黄金,两者同时被水涨船高。 #
  • 汇市上,美元兑各国货币全涨,各国货币兑美金全跌,金价和美金再次同时彪高,吸引投资者抛售本国货币购买美金买黄金炒高美金价格的招数老美玩过一次了,这次又这么多人跟风 #
  • 还有探亲假这种东西,从未听说……不知道阿里有没有 #
  • 我妈为啥总觉得我头大,说我们是大头儿子小头爸爸 #
  • 民企是员工养企业,没有员工的努力就没有企业的今天;国企是企业养员工,没有企业的垄断就没有员工的今天 #
  • Statistical Language Models看得我天昏地转 #
  • RT @dttoo: tooRT @yqhbp: meRT @twjacy: 推上学生多不? //me #
  • 删掉了花俏的主题,换了一个很Simple的主题,感觉好多了,而简约不简单,技术的追求。 #

Powered by Twitter Tools

标签:

Mystique主题与WP-PostViews Plus插件的冲突问题

2 月 17th, 2010 | Posted by | Filed under 程序设计

今天升级了Mystique主题到1.72版,原来的那个Bug又出现了,会在页面的顶头显示一段代码,查看了源码,发现是WP-PostViews Plus的代码和Mystique主题冲突了,我们来看原始输出的HTML

 
/*  
 
home blog col-2-right loggedin browser-chrome">

这不出问题才怪呢,正常的情况应该是

 
 
 

或者在上面。

刨根问底,元凶指向mystique_body_class这个函数,发现在core.php文件中。
问题在哪呢?

// Special classes for BODY element when a single post
  if (is_single()):
    $postID = $wp_query->post->ID;
    the_post();
    // Adds 'single' class and class with the post ID
    $c[] = 'single-post postid-' . $postID;
......
  // And tada!
  return $print ? print($c) : $c;

就是the_post()函数,调用the_post()时,WP-PostViews Plus的代码就被加入了,而body class= 已经输出了。
解决方法很简单,把the_post()转移到最后,就是print的下一行,这样就OK了。把这个函数里其他the_post()都删除,留一个在print的下一行就行。

标签: