木匠的微型博客 Charlie Twitter

    follow me on Twitter

    Thursday, February 26, 2009

    虚拟列分区可能返回错误结果Virtual Column-Based Partition-Chris译客

    TrackBack: http://antognini.ch/2009/02/virtual-column-based-partitioning-might-lead-to-wrong-results/

    Oracle 11g(11.1.0.6 和 11.1.0.7),在虚拟列分区表里面,有许多列,当虚拟列或者源数据列排在后面时,修改数据和查询数据会产生意想不到的错误结果.
    出错的情况是随机的, 比如数据被放进了错误的分区, 或者查询数据,返回错误结果

    这里是测试用例:

    SQL>
    drop TABLE t;
    CREATE TABLE t (
    d1 NUMBER,
    d2 NUMBER,
    d3 NUMBER,
    d4 NUMBER,
    d5 NUMBER,
    d6 NUMBER,
    d7 NUMBER,
    n1 NUMBER,
    n2 AS (CASE n1 WHEN 1 THEN 1 WHEN 2 THEN 2 ELSE 0 END) VIRTUAL
    )
    PARTITION BY LIST (n2) (
    PARTITION zero VALUES (0),
    PARTITION one VALUES (1),
    PARTITION two VALUES (2)
    )
    ENABLE ROW MOVEMENT;

    INSERT INTO t (n1) VALUES (1);
    commit;
    UPDATE t SET n1 = 3;
    commit;

    SELECT rowid, n1, n2 FROM t PARTITION (zero);
    SELECT rowid, n1, n2 FROM t PARTITION (one);

    数据被放进了错误的分区.
    SQL> SELECT rowid, n1, n2 FROM t PARTITION (one);

    ROWID N1 N2
    ------------------ ---------- ----------
    AAAd7XAAEAAABXCAAA 3 0


    查询数据,返回错误结果
    SQL> SELECT rowid, n1, n2 FROM t WHERE n2 = 1;

    ROWID N1 N2
    ------------------ ---------- ----------
    AAAd7XAAEAAABXCAAA 3 0



    昨天在内港Delta酒店参加领导能力培训,南望华盛顿州,奥林匹亚山.

    Tuesday, February 24, 2009

    SQL跟踪文件里面哈希值的变化 - 启动TOP作者博客翻译

    TrackBack: http://antognini.ch/2009/01/execution-plan-hash-value-in-sql-trace-files/

    在征得了Christian Antognini的同意后, 木匠准备近乎实时的(near real-time)跟踪报道他的最新研究成果. 附带的好处是极大的增加了我的博客出版频率,完成年初定的每周一篇技术贴的目标.

    在我理解有误的地方,欢迎各位DBA同仁给予指正. 木匠没有出钱买断Christian Antognini博客的中文翻译版权, 所以您也可以同时翻译相同的文章, 不过, 请一定指明原文的TrackBack.

    我只会讲每篇的主旨和总结. 从2009年一月开始,

    第一篇: SQL跟踪文件里面哈希值的变化(Execution Plan Hash Value in SQL Trace Files)

    在Oracle 11.1.0.7版本, 在PARSE, EXEC 和FETCH这些行里边, 新出现了一个"plh"属性, 我猜是 Plan Hash 的缩写. plh是为了配合ACS(Adaptive cursor sharing), ACS就是根据不同的绑定变量(binding variable)产生不同的最优执行计划.

    参见 http://antognini.ch/2008/12/automatic-evolution-of-sql-plan-baselines/ 第7个木匠的注释.

    这里是一个SQL trace file样例,

    SELECT count(pad) FROM t WHERE id < :id

    PARSE #13:c=0,e=0,p=0,cr=0,cu=0, mis=0,r=0,dep=0,og=1,plh=4270555908
    EXEC #13:c=0,e=0,p=0,cr=0,cu=0, mis=1,r=0,dep=0,og=1,plh=2966233522

    当变量取值发生变化后,优化器决定选择一个不同的执行计划. 我们看到mis=1和plh=2966233522 出现在EXEC(执行)这一行,而且的plh数值不同于PARSE一行plh的数值 SQL优化器对游标(cursor)做了一个硬解析(hard parse), 然而PARSE部分没有硬解析.

    由此改变了我们的传统认识, 不但PARSE部分会hard parse,而且EXEC部分也会hard parse.


    去阿拉斯加的邮轮,在维多利亚Ogden Point港停靠.

    Friday, February 20, 2009

    US vs Canada一位大姐眼中的美国和加拿大

    导读: 已经有很多文章比较了美国和加拿大的华人生活.

    这篇就比较片面, 居住在加拿大的木匠不免要运用一下精神胜利法,分析一下她的论点.

    1. 由于她在加拿大年景差,做了4年家庭主妇,潜意识里对加拿大产生了怨恨.
    - 如果2001~2004年她住在美国, 2005~2009年她住在加拿大,肯定有不一样的感受.
    2. 由于接触面窄,没能对加拿大华人有一个全面的了解.
    3. 我们公司华人同事的年薪均高于美国相同职位.
    4. 美国枪击案件远远超过加拿大, 安全吗?
    5. 加拿大人朴实,憨厚,资源性国家,生活节奏缓慢,惬意舒坦,平均寿命长,生活满意度高.
    6. 美国华人会对加拿大华人提出这样一些(极其片面)问题:
    • 来美国玩吧,我们这里有唐人街.
    • 你们(比如多伦多)出门上街,是不是能撞上北极熊?
    7. 大陆华人很难直接移民美国,除了走留学这条弯路,没别的办法. 所以好多华人学了洋人没兴趣的偏门专业,多数肯定不是自愿的.
    8. 加拿大的社会福利,医疗保障优于美国.
    9. 加拿大中产阶级人群收入低,生活成本高,税收高.
    - 加拿大老百姓平均收入高于美国; 不能老拿东海岸纽约/波士顿和西海岸硅谷湾区说事.
    10. 加拿大最低时薪高于美国.
    11. 移民加拿大后进出自由,五年内住满两年就可以了; 可是在美国, 留学(F1)和工作(H1b)后, 轻易不敢回中国, 不然要丢身份(证)的, 由此引发了不少和父母生离死别的悲惨故事,改天再议.

    总之,若以居住在月球/火星的华人来看的话, 不管搬到美国还是加拿大,都是想过上好生活,等中国富裕强大了,到美国/加拿大只需要落地签证,就不会有那么多华人削尖了脑袋移民美国/加拿大了. 祝福我们的祖国吧.

    我们都是这个时代的特殊产物,以后历史再不会重演,留学美国或者技术移民加拿大只会成为一个历史名词.

    ...未完待续...



    正文

    -- -- -
    http://news.wenxuecity.com/messages/200902/news-gb2312-797788.html

    本人从中国出来后曾先后在加拿大几个不同的城市共居住了四年,然后移居美国中部近四年,对新移民在二个不同国家作了一些比较,体会如下:

      1. 年龄

      一般来说,加拿大移民的年龄偏小一些,多数是90年代后期移民出来的人,年龄在30--40岁左右。而美国移民则年龄偏大一些,多数是80年代后期及90年代前期出来的,这批人年龄多已40出头了。当然也有一批幸运者,他们在30岁前就直奔美国,在这里30而立了。

      2. 技术实力

       我相信在美国的移民都会感到他们自己是各自公司或部门技术上的骨干,事实也基本如此。因为到美国的人,多数是走读书这条路的,尤其是早期出来的人,他们 本身就是国内出类拔萃的人物,到美国后艰苦奋斗,几年后几乎都持有博士学位,最起码也拿个硕士,即便是女的,博士,硕士也比比皆是。他们凭着挣来的学位, 进入各自的公司或大学,凭着他们的聪明以及读书几年闯过的各种关卡,尤其是语言关,大多能够顺利地胜任自己的高薪工作。

      回头看一 看加拿大,在加国的一部分早期留学生有着和美国移民相似的经历,他们的生活也还自在。但大批新移民却没有踏上读博这条“苦船”,他们偏于急功近利,他们比 “长辈”有较多的选择,他们可以利用国内的经验直接进入国外公司。也有迫于生计,选取短,平,快的学业,快速找到了工作,但他们多数难以进入技术“上层 ”,即便工作几年后,也较难得到像美国移民们苦熬几年学业出来的高薪。

      3. 居住

      居住环境的好坏直接反映 出移民的经济实力。由于美国移民的技术实力较强,相应他们的收入便偏高些。我周围的朋友,只要夫妇一方博士毕业,年薪基本是八万以上,这已步入当地中产以 上阶层,更不用说双方都是高学位了。我居住的这个城市中国人不少,主要集中在几个大公司和学校工作。他们几乎都是“一栋房子二部车”一族了。他们大多居住 条件不错,生活比较稳定。拿我本人来说,我的居住环境在我的一批朋友中是属中等的。因为我只持有国内本科文凭,在加拿大时属 “急功近利”一族,没有读学位,来美后由于身份问题,不能工作,后来身份解决了,有了工作,但终究薪水不高,主要靠先生的收入买房。我们量力而行,在较好 的学区内建了一栋不到30万的房屋。二年多前,我们搬进了在新开发小区内的新居。我们小区内住了几十户中国人,个个都对自己的居住条件满意,大家觉得来美 国生活,衣,食,住,行,唯有这“住”还使我们对这里有些留恋,不思“海归”。正当我为自己五个睡房的住宅陶醉时,我的好朋友(她十年前移民来美国)在离 我不远的富人区,一举建造了价值130万的住宅。这在美国中部地区就算“豪宅”了,绝对进入当地居住的上层。

      再看看加拿大的朋 友,他们多数还没有买房,因为有一部分人想往美国走,即使买了房,他们的居住条件也相对小一些。我曾在加拿大的一个小城镇居住过,虽然小城镇的房价偏低, 但也不表示人们住大房子。我的朋友,即使是我公司的老板也居住着比我现在还小的房子。而对于多伦多周围的住房,那就更小一些了。我去过一个朋友在离多伦多 一小时远的城市买的一栋新房,新房在一片新开发区内,给人的感觉是房子比较密集,房子也比较小。

      4. 心境

       美国的移民,由于他们早年的奋斗,现在多数已是苦尽甘来。他们大多已解决身份,生活平静,安居乐业。他们也很忙,忙于工作,忙于培养小孩。闲暇时考虑室 内,室外的改造。夏天更可以看见他们忙碌于前院后院的身影。他们经常聚在一起吃饭,打牌。他们更看国内的新连续剧,新电影,好多国内朋友都没听过名字的电 视剧,在这里已经传得热火朝天了。当然他们也不乏各式各样的烦恼,如何使自己的生活更上一层楼, 如何使自己的奋斗更具价值,“海归”,办公司,小孩读私校, ……… 他们有很多想法。

      而加拿大的移民,则显得要浮躁些。因为他 们当中很多人还有美国梦。他们觉得凭着在加拿大的工作经验,完全有能力在美国得到更好的发展。加拿大的冬天让他们不愿意在那里扎根,他们的目标是美国。而 美国的移民政策难度比加拿大难,这些身份问题会让他们感到心烦。另外,加拿大移民比较愿意了解美国移民的信息,而美国移民对加拿大移民的情形却不太关心。 就像在美国电视里很难见到有关加拿大的新闻一样,他们显得对加拿大比较漠然。加国移民的心情没有那么靚,因为他们还在爬坡,还有很多愿望等着他们去实现。

    Thursday, February 19, 2009

    维多利亚IT Club新技术共享-云计算(cloud晕)

    IT Club新技术共享-云计算(晕)

    给 "开吻" 做个广告,吆喝一声.

    时间是Feb21, 2:30 pm 星期六.
    地址: EBC church second floor meeting room, 2121 Cedar Hill Cross Rd.
    主讲: 开吻.

    Victoria IT Club hold free IT Seminars on 3rd Saturday 2:30pm every month

    这个交流虽然涉及技术层面, 但是我还是打算尽量让不是Developer的一般用户和非IT人士也能分享到.
    因此我这次介绍的内容60%都是非技术的, 主要的目的就是让普通的用户也可以充分利用最新的软件技术在自己的工作生活中, 提高工作效率和生活质量, 降低在IT方面的费用成本. 我相信所有来听的人都会发现原来还有这么方便和廉价(甚至免费)的方法可以让原本花费时间和金钱的工作变得如此容易.
    对于开发者而言, 我也会分享我自己的想法, 关于如何把握这个新技术的方向, 让自己重新屹立在风头浪尖.

    欢迎大家都来, 同时也更欢迎大家把自己的朋友也邀请来. 即使不是IT认识, 也一定会有收获的. 如果哪位在本周日的主日聚会时宣布邀请大家都来就更好了.
    附带的链接是我正在起草的提纲. 还在不停的更改中. 不用说, 限于本人的英文水平, 这个交流会是中文的
    http://docs.google.com/Presentation?id=dws8n3c_ 98chss92tg&invite=hkv7qgr

    当单老板邀请我来讲一下的时候, 说的是讲座, 一下子把我给吓住了. 我的水平肯定是不足以去做一个讲座的, 但是换个名头我就踏实多了, 叫做新技术学习交流与共享. 因为我自己也是正在初学的阶段, 如果大家也有同样的兴趣在这些新玩意儿, 或者自己也在学习过程中, 我很乐意邀请大家一起参加兴趣学习和讨论交流共享. 如果你已经研究了一段时间, 无论好似不是大师级别, 也请光临, 拿出你的玉, 把我这块砖给换了. 根据我的经验, 手里有玉的大师真人一般都是要等拿砖的小丑跳出来才肯露面.

    "开吻"分享的内容主要是"开吻"对于新一代操作系统和网络应用程序设计的理解和预测. 主要的技术点集中在
    RIA Rich Internet Application, 以Silverlight为例.
    Cloud Computing, 与计算, 以Windows Azure为例.
    DotNET 3.5, 以WPF和LINQ为主
    Linux 以Ubuntu为例.

    这个是一个学习分享体会, 顶多算一个走马观花式的技术介绍, 我的目的是提起大家对这些新一代或者未来一代的技术的兴趣, 和一些基本概念, 至少弄个名词清楚. 如果大家有兴趣, 我们以后可以再开专题讨论, 到时候拿着玉的可要真的出山了.

    Kevin Zhang

    读书笔记Oracle Database 10g Performance Tuning Tips & Techniques

    自讽一下: 昨晚LD限制我的上网时间,强行断网,关电脑,拔电源.我一着急,把这篇中文题目发到我的英文博客上了. 再来一遍.

    截至今晚,又读完了下面三章
    8: Query Tuning: Developer and Beginner DBA
    9: Table Joins and Other Advanced Tuning (Advanced DBA and Developer)
    10:Using PL/SQL to Enhance Performance (Developer and DBA)
    和11章 Tuning RAC and Using Parallel Features的一半.

    鄙人(IMHO)猜测这本书就是把多个人(大部分是TUSC员工)的文章,简单拼凑在一起,凑和着出版了一本书,不建议读者购买.

    不过, 第9章介绍了3个新颖的技术.

    1) Block Dump
    教会我开始使用Block Dump, 读trace文件里面的一些基本内容, 比如ITL锁, 列的数据类型和数据内容.
    下一篇文章,关于Fetch Across Commit最差实践,会引用一些Block Dump作为例证.

    2) Tuning Using Simple Mathematical Techniques
    原以为小学数学知识足以支持数据库管理和开发. 这下竟然用到了初中的数学知识.
    这部分知识讲了如何用二元一次线性方程(Simple Linear Equation),和二元二次方程(Quadratic)预测SQL的性能, 真新鲜,找机会试试.

    3) Join Tuning: Relational vs. Object-Relational Performance
    三种表连接(Nested-loop, Sort-Merge, Hash join), 把对象表作为物理存储结构的性能竟然远远好过普通表(heap table), 难以置信. 我认为写的性能比较差, 应该不适合OLTP系统, 找时间Benchmark一下.
    记得Tom的书里面不推荐Object-Relational表存储, 把Object-Relational结构拿来编程还行.

    Richard J. Niemiec 老兄讲了, 读完并理解了第9章,您就是高级数据库调优专家,并且站到了Richard J. Niemiec的高度,探索到无尽的喜悦.

    "If you’ve read and understood this entire chapter, you’re probably among the top-tuning
    professionals and you will see the heights and joys that I’ve seen with tuning Oracle."

    参考我14年的数据库经验(4年学习,10年荒废),鄙人木匠(IMHO)以为, 万里长征才刚刚开始, 读完并理解了第9章, 我才发现好多东西他都没有讲到,或者涉水太浅,要走的路还长着哩.


    BC Ferries 的轮渡缓缓驶离温哥华码头.

    Tuesday, February 10, 2009

    新学到的一些 SQL hints

    今年买了四本Oracle数据库方面的新书,其中Richard J. Niemiec的Oracle Database 10g Performance Tuning Tips & Techniques 比较旧,讲10gR2, 有1000多页,只能走马观花的快速浏览了.

    我刚刚读完前7章, 感觉内容平平,
    Chapter 1: Oracle Database 10g New Features (DBA and Developer) . . . 蜻蜓点水
    Chapter 2: Basic Index Principles (Beginner Developer and Beginner DBA) . . . 跳过
    Chapter 3: Disk Implementation Methodology and ASM (DBA) . . .飞速翻阅
    Chapter 4: Tuning the Database with Initialization Parameters (DBA) . . .没啥新鲜的
    Chapter 5: Enterprise Manager and Grid Control . . .跳过
    Chapter 6: Using EXPLAIN and STORED OUTLINES . . . 过时的内容,跳过
    Chapter 7: Basic Hint Syntax (Developer and DBA) . . .点到为止
    希望在后面这几章里找到一些实用新鲜的知识.
    8: Query Tuning: Developer and Beginner DBA
    9: Table Joins and Other Advanced Tuning (Advanced DBA and Developer)
    11:Using PL/SQL to Enhance Performance (Developer and DBA)
    15:Performing a Quick System Review (DBA)

    下面看看我新学的3个SQL Hint,
    • NO_EXPAND
    当我们的查询条件中有多个OR组合或者IN-list时, 阻止优化器将SQL转换成多个Union All查询.

    select * from emp
    where (emp_no = 1 or emp_no = 2 or emp_no = 3);


    USE_CONCAT Hint的作用正好相反.

    • PUSH_SUBQ
    当子查询返回较少数据时,并且有利于整个SQL的优化(比如降低逻辑读,减少表连接结果集,等等),优先考虑执行子查询,返回子查询的结果集.
    • QB_NAME
    当我们的查询看起来凌乱不堪,丑陋恶心时,QB_Name可以帮助你精确定位和指定需要的Hint.
    SELECT /*+ QB_NAME(qb) FULL(@qb e) */ employee_id, last_name
    FROM employees e
    WHERE last_name = 'Smith';
    参考:
    Oracle® Database SQL Language Reference
    11g Release 1 (11.1)
    Comments一节


    维多利亚的Swartz Bay码头,从这里搭船去温哥华,各种小汽车,货车就这样排着队,开进轮船的肚子里.

    这回坐上了一艘最大渡轮.轮船驶出码头,开往温哥华.


    Vancouver - Victoria (Tsawwassen-Swartz Bay) 这个航道是世界上最美丽的两个线路之一,另一个在欧洲啥地方.
    只可惜是阴天傍晚,拍不出它的壮美.

    Sunday, February 08, 2009

    BC goverment job 2 加拿大政府工作收入详解

    以下言论,纯属道听途说,毫无真凭实据,入职各行各业(三教九流)均有风险, 请谨慎参考.

    序: 上一篇讲了"加拿大政府工作收入简介", 恰好被一位在维多利亚BC省政府的DBA同仁看到,并发表了评论,这是我收到最好的留言了,干脆引用并发表成一篇正文.
    我估测网络博客的留言和阅读的人数比例是 1:100, 新的博客已经吸引了很多读者, 自我感觉良好. 由此看到今年的计划和努力有了回报, 木匠要持之以恒的写出更多实用和有趣的文字.

    下面是正文,来自一位同名的Charlie兄:



    就這標題 提供一些個人經驗

    --薪資部分
    我恰好是現職BC省政府DBA IS30(等同N30)
    政府工每一個大的Level是分為五個次level
    所以新任DBA只會拿到最低的初始薪資 也就是文中的CAD 72380
    這個工資事實上內含前幾年工會與政府協定的temporary salary adjust biweekly 2百多
    所以本薪部分 是不到7萬元的
    稅後biweekly大約可拿到1900元左右
    然後每一年提升一個次level
    也就是服務滿五年 才能拿到CAD 82867的薪資水平
    平均來說較一般private company略低15-25%
    (木匠注解: 全盘考虑退休金计划,年薪的75%; 假想有一位政府职员,年薪8万,25岁开始工作到65岁退休,活到85岁,
    $80,000 x 0.75 x (85-65)/(65-25) = $30,000, 也就是说, 实际年薪会多出大约2万至3万,
    想进商业公司的人,需要拿到比政府同级别职位多20%~30%的年薪,才能平衡.
    因为木匠从事数据库开发太久了,总想用数字说明问题. 纯属个人意见,仅供参考).
    至於management level也不一定就比技術工(staff)來的高(manager lv 1-12) 得看該manager職位的等級
    裁員時manager也因為沒有工會的保護 有可能被列為優先裁撤的對象

    --任職政府工的優點
    文中已經講到pension, flexday off
    如果不要flexday 每天工時7小時
    如果要flesday 每天工時7.78小時 就可以兩週多休一天假
    加班 staff有pay 一般是1.5-2倍時薪 但稅後略等同一般工時薪資 所以一般staff overtime的意願不高
    但DBA很常有overtime機會
    現在budget不足 老闆也就不希望overtime了
    此外的福利有MSP coverage, extend insurance coverage (dentist 80%)
    想深造的可在職進修碩博士 學費書本費幾乎100% cover(每使用一年需多服務一年) 等等
    故在政府工作 無非圖一份穩定
    (木匠注解: 好像病假不发工资,好多人带病上班. 比如从一个在卫生部工作的朋友那里听到一件事, 感冒的同事坚持上班,结果在办公室传染了一大片,上个月感冒大流行,这就是其中一个原因.)

    --缺點
    雖說穩定 還是有裁員的可能 幾年前就曾發生一次大裁員
    政府工呆太久 就很難回到private company
    一方面自我要求不夠的 技術會退步 競爭力也會退步 DBA除了DB之外全不給碰 OS Network Storage 等另有單位專管
    另有一說private company好像不大喜歡政府工做太久的 認為不夠積極
    (木匠注解: 政府论资排辈,裁员从新员工开始,老员工就很稳定啦; 如果老员工的职位被消减,他可以去顶替新员工的职位,新员工只好被挤走靠边站. 所以眼下看到政府的职位,最好不要去,不然你就是菜板上的鱼肉.)

    --怎麼申請
    文中已經有列出公告網頁

    --目前缺哪一類IT相關政府工
    Information Analyst (Lv 21/24/27) 要熟Oracle SQL, PLSQL, SAS 這部分是最常見的空缺
    DBA (Lv 27/30) 這不用多說 空缺時有時無 最近比較少些
    其他如Server Adm, Backup/Storage Adm等支援性的職位一直有缺 但這部分最近被outsource給EDS 前途未明.

    2009-Feb-05
    話才說完, 昨日獲最新消息, BC省政府將開始檢討高階管理人員的職位. 目前據說Deputy Minister/Assistant Deputy Minister江匯市第一波列入裁撤的對象, 目標是減少20%. 至於其他一線管理職或Staff尚未受影響...
    不過在BC省公開招募的website上 以往常有30+以上徵人的空位 近日居然銳減到不足5個職位 大約可預見這波recession對公職帶來的影響了..
    這年代 有工作就是一種幸福


    港口小镇:Port Alice, 在温哥华岛北部,维多利亚北边500公里,人口1000,是最喜欢的城市之一,如果以后有机会全职远程工作,打算搬过去,小住一年.

    小镇街景. 最喜欢就是这里安详宁静的气氛,太适合做软件开发了,可以帮助你最大限度的发挥你的想象力和创造力.