Sunday, April 05, 2009
Talk to COO 合理化建议和沟通
基调比较简单:
1) 改变Slow-by-slow(row-by-row)慢之又慢的数据处理模式, 启用(bulk loading)打包成批处理.
2) 合理denormalization,减少不必要的表连接.
3) BASE第一步: Function split功能拆分 和 Asynchronous process 异步处理.
异步处理,必然引出数据复制和消息系统, 我们的消息系统数据量一大,就会僵死. 我选择了数据库staging table(数据驿站)来缓存修改的数据,对于staging堆栈表,根据简单处理过的时间键,做列表分区,做到冗余数据的最高效利用 (我一向认为队列消息属于被复制的冗余数据).
关于设计时间相关的历史数据模型,数据建模宝典(Data Modeling Essentials - Third Edition)推荐了两种方法,一种是Audit Trail(记录数据偏移,从起点累积),一种是Snapshot(历史镜像),我在不同场景都有采用,以后找机会做细节示范.
有一个业务逻辑的改革遇到了较大的阻力,最后决定直接找COO商议,结果还是很理想的,清除了数据处理设计的最后一道障碍.
跟产品经理和项目经理谈了很多次,结果是"多一事不如少一事,事不关己,高高挂起",这伙人才懒得从公司盈利的高度考虑问题,所以要转向那些能做决定,能从大局着眼的人士.
下面简单介绍一下这个高投入低回报的业务功能:
就是维护书商的产品分类,上传图书数据的时候,捎带检查图书分类表. 每行图书数据里面,包含了图书分类,一个或者多个,如果是新的分类,就在书商图书分类表里增加一行.
如果删除了某个图书分类包含的所有书籍,就在书商图书分类表里删除掉这个图书分类.
经常是上传几百万本图书信息,却对书商图书分类未动毫毛,白白浪费掉系统处理能量 来做无谓的检查.
为啥雅虎没落了,谷歌兴旺了.因为Yahoo在做分类目录,Google再做搜索.
这个年代,很少有人再通过分类目录一层一层的下钻去找到感兴趣的内容了,一个关键字查询,结果根据相关性排序,一下找到结果.
有兴趣的产品经理,数据处理设计师和开发人员, 可以看看这个功能的链接:
http://www.abebooks.com/servlet/BooksBrowse?vendorclientid=65646&page=CLIENT
Tuesday, March 31, 2009
另一种方法显示ROWID扩充信息-table function
NinGoo的把常用工具打包进工具箱的方法很好.
然而木匠天生缺乏分类和组织能力,一路坚持学习,持续遗忘,自身却没有留下啥积累;好比猴子搬苞谷,抱在怀里的玉米棒永远也不会增多,郁闷.
所以鄙人决定依靠GTD方法,每周总结学到的新知识,然后放进自己的便携工具箱.
好了,鉴于本人不喜欢dbms_output.put_line,索性把NinGoo的RowID工具改造成了Table Function.
通过简单的查询,可以在任何地方使用.
后面附的PL/SQL Package源代码,包含了许多PL/SQL编程优秀实践,将来找机会慢慢展开来讲.
用法:
SQL> select * from table(UTILITY.tb_obj.rowid_info('AAARUtAAEAAABm2AAA'));
COLUMN_VALUE
--------------------------------------------------------------------------------
rowid: AAARUtAAEAAABm2AAA
file_id: 4
block_id: 6582
data_object_id: 70957
owner: INVDB
object_name: BOOK_UPLOAD_LOG
extent_id: 0
7 rows selected.
tb_ 是toolbox的缩写.
工具用户需要的对象权限:
grant select on dba_objects to utility;
grant select on dba_extents to utility;
源代码:
注意: 如果你还没有安装捕获错误工具包u$err和(instrument)代码跟踪包debug, 可以先用备注屏蔽掉相关的代码.
CREATE OR REPLACE PACKAGE UTILITY.tb_obj
/*
| Copyright Information Here
|
| File name:
|
| Overview:
|
| Author(s):
|
| Modification History:
| Date Who What
|
*/
IS
TYPE print_tab IS TABLE OF varchar2(200);
FUNCTION rowid_info (p_rowid in varchar2) return print_tab PIPELINED DETERMINISTIC;
PROCEDURE subprogram_name;
END tb_obj;
/
CREATE OR REPLACE PACKAGE BODY UTILITY.tb_obj
/*
| Copyright Information Here
|
| File name:
|
| Overview:
Tool box to get object information.
| Author(s):
|
| Modification History:
| Date Who What
31-Mar-2009 Charlie (Yi): Create the package.
It meets user requirements
It is maintainable
It runs fast enough to minimize user frustration
**) Pl/SQL development workflow, Four steps of preparing an application
- Validate program requirements
# ask lots of questions
# what users ask for is not always the easiest way to solve a problem
# consider other approaches, include business processes and programming algorithms
- Implement header of the program
# good name for the program, accurately represent the purpose of the program
# inputs and outputs
# overload sub-procedure ?
- Define the test cases
# Verify it works
# how will I know when I am done with this program
- Build test code
|
|
*/
IS
PROCEDURE initialize_pkg
IS
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE( 'tb_obj','init' );
END initialize_pkg;
FUNCTION rowid_info (p_rowid in varchar2)
return print_tab PIPELINED DETERMINISTIC
/*
| Copyright Information Here
|
| File name:
|
| Overview: Display extended rowid information.
|
| Author(s): Charlie MuJiang
|
| Modification History:
| Date Who What
31-Mar-2009 Charlie (Yi): Create the function.
Privilege:
grant select on dba_objects to utility;
grant select on dba_extents to utility;
Call example:
SQL> select * from table(UTILITY.tb_obj.rowid_info('AAARUtAAEAAABm2AAA'));
COLUMN_VALUE
--------------------------------------------------------------------------------
rowid: AAARUtAAEAAABm2AAA
file_id: 4
block_id: 6582
data_object_id: 70957
owner: INVDB
object_name: BOOK_UPLOAD_LOG
extent_id: 0
7 rows selected.
|
*/
IS
ln_block_id number;
ln_file_id number;
ln_object_id number;
ln_extent_id number;
ls_object_name varchar2(30);
ls_owner varchar2(30);
PROCEDURE initialize
IS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION( 'rowid_info' );
END initialize;
PROCEDURE cleanup
IS
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE(Null,Null);
END cleanup;
BEGIN
initialize;
/*
Main body of program
*/
debug.f('start by user %s', user);
select dbms_rowid.ROWID_BLOCK_NUMBER(p_rowid),
dbms_rowid.ROWID_RELATIVE_FNO(p_rowid),
dbms_rowid.ROWID_OBJECT(p_rowid)
into ln_block_id,ln_file_id,ln_object_id
from dual;
select owner,object_name
into ls_owner,ls_object_name
from dba_objects
where data_object_id=ln_object_id;
PIPE ROW(' rowid: '||p_rowid);
PIPE ROW(' file_id: '||ln_file_id);
PIPE ROW(' block_id: '||ln_block_id);
PIPE ROW('data_object_id: '||ln_object_id);
for c in (
select extent_id,
owner, segment_name,partition_name, segment_type,tablespace_name
from dba_extents
where
owner=ls_owner and
segment_name=ls_object_name and
file_id=ln_file_id and
ln_block_id between block_id and block_id + blocks - 1
)
loop
PIPE ROW(' owner: '||c.owner);
PIPE ROW(' object_name: '||c.segment_name);
PIPE ROW('partition_name: '||c.partition_name);
PIPE ROW(' segment_type: '||c.segment_type);
PIPE ROW(' tbs_name: '||c.tablespace_name);
PIPE ROW(' extent_id: '||c.extent_id);
end loop;
debug.f('process %s rows', SQL%RowCount);
cleanup;
EXCEPTION
WHEN NO_DATA_NEEDED THEN
cleanup;
return;
WHEN OTHERS
THEN
/* Don't forget to clean up here, too! */
cleanup;
/* Standard error logging mechanism */
u$err.err;
RollBack;
raise;
END rowid_info;
PROCEDURE subprogram_name
/*
| Copyright Information Here
|
| File name:
|
| Overview:
|
| Author(s):
|
| Modification History:
| Date Who What
|
*/
IS
PROCEDURE initialize
IS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION( 'subprogram_name' );
END initialize;
PROCEDURE cleanup
IS
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE(Null,Null);
END cleanup;
BEGIN
initialize;
/*
Main body of program
*/
debug.f('update %s rows', SQL%RowCount);
cleanup;
EXCEPTION
WHEN OTHERS
THEN
/* Don't forget to clean up here, too! */
cleanup;
/* Standard error logging mechanism */
u$err.err;
--RollBack;
raise;
END subprogram_name;
BEGIN
initialize_pkg;
END tb_obj;
/
deprecated ROWID hint 废弃的行标识提示
在一些应用场景里面利用RowID存取路径,还是很有帮助的. 比如回改, 就是在用户界面显示用户感兴趣的数据,数据被修改以后,再更新回数据库.
那么怎样强制优化器使用存取路径TABLE ACCESS BY ROWID呢? 我暂时发现了两种方法:
1) 使用No_Index SQL提示
2) 使用表达式或者运算符禁止索引扫描.
关于具体的搭建测试环境和演示, 参考文章NO_INDEX hint and deprecated ROWID hint.
测试结果
--
当查询优化器采用TABLE ACCESS BY USER ROWID存取路径时,我们发现逻辑读(Buffer列)由2降到1.
Saturday, March 28, 2009
Earth Hour 关灯一小时
各种人物提出了多种方式度过 "地球一小时".
比如看电视,点蜡烛.这不还是继续浪费能源吗? 穿了个马甲而已.
我有两个计划,8:30pm游泳完以后,直接上床睡觉. 或者在黑暗中静思冥想,想想家庭生活有哪些项目可以改进,修马桶,给外墙刷油漆,屋顶换瓦, 想想工作中的哪些数据处理逻辑可以改进,提高系统的扩展性,可靠性,应用各种11g的新特性.
去野外看星星 也不错,可惜维多利亚阴天下雨; 维多利亚(BC省西海岸)有个体育活动,夜晚健行(night hiking),可以去中国海滩(China beach) 欢德福卡野径(trail),我的同事老奔驰等人去过好几次了,下次跟上他们;
或者给多年没有联系的老朋友打电话.
Enjoy sitting in the dark!
Thank you for your support!
参考:
--
<http://www.earthhour.org/home/> Saturday March 28th @ 8:30pm!
What is it?
Switch off your lights for one hour and send a message to the world.
Reality check:
Earth Hour is a symbolic event. Turning off our lights for an hour won’t stop climate change but it does demonstrate that our individual action is important and adds up to make a big difference.
Results & photos from 2008
What’s happening in Vancouver
Here are some simple tips to make Earth Hour a success:
1. Turn off all non-essential lights on Saturday, March 28 at 8:30 pm.
2. Encourage family, friends and local businesses
3. Sign-up
10% Off @ WWF Store
As a thank you for signing up:
Enjoy 10%* off at the WWF Store where you will find unique and sustainable products. Visit wwfstore.ca and enter promo code EH2009.
So let’s get some more businesses to sign up & turn off those lights on Saturday night!

维多利亚大学(UVic)的图书馆.
Monday, March 09, 2009
Troubleshooting Oracle Performance下载文件更新
像我一样的TOP书迷们注意了, TOP脚本文件更新了, 这里是下载地址链接: http://antognini.ch/top/downloadable-files/.
供参考: 我的学习方法是这样的,先读完整本书(每周100页), 然后到附录A, 顺着每一章的脚本目录(page 552~562) ,做练习,依靠实践加深印象,巩固记忆.不然,过不了两天,学到的知识点就会忘掉大半.

加拿大西海岸三月份又下雪了,维多利亚市也不例外,预计降雪量是5厘米.
气温: -4°C~2°C. 注意保暖,行车注意安全.
今天又开始夏时制了,少睡一个小时, 困哉.
.
Thursday, March 05, 2009
Index space management索引空间管理
这里是我昨天学到的索引空间管理知识:
一个UPDATE语句,对索引来说,就是一个DELETE和一个INSERT,删掉旧键值,插入新键值.
如果是唯一索引(unique index),删掉旧键值的空槽位可以被同一个事务里面接下来的操作重用.
如果不是唯一索引(unique index),删掉旧键值的空槽位,只有在事务提交以后,才可以被重用.
索引段上,只有INSERT和DELETE操作.
如果删除了大部分数据,再没有新的数据插入,用alter index
参考
----
Oracle® Database SQL Language Reference
11g Release 1 (11.1)
ALTER INDEX ... SHRINK SPACE COMPACT 等价于 ALTER INDEX ... COALESCE.
How does insert and delete use space regarding to indexes?
查看索引空间: SQL>exec segment_space_a(P_SEGNAME=>'INDEX_Name',p_type=>'INDEX');
Skip unchanged columns when UPDATE时,如何跳过没有改动的列
只好找个类似的问题,然后跟贴评论,问一个新问题. 但是一定要和原帖主要问题紧密相关,不然,Tom兄会毫不留情的删掉你的评论. 嘻嘻.
好了,我的问题是:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1524420700346152252
先简述一下业务逻辑, 我们的业务模式类似eBay, B2C, 我们的主要商品是图书, table book, 书商每天上传文件更新他们的库存.
书商不管三七二十一,送上所有图书的信息,无论是要改动的属性,还是不需要改动的属性.
大部分情况只是改动一两个短列,比如数量,单价,ISBN;少部分情况修改长列,比如书名,作者,出版社,图书简介...等等.
这就产生了一个重复(冗余)修改的问题,会浪费PGA内存,产生十倍之多的Redo/Undo.
如何跳过这些没有修改的列呢?
今天耗费了一整天跟Tom兄切磋.
我设计的解决方案都在上面链接里面了. 还没有最后成形,处在演变进化(evolution)当中.
对了, 我的署名是Charlie MuJiang from Victoria, BC Canada, AskTom不能存中文,所以用拼音MuJiang.
再来一个维多利亚的BC省议会大楼,2005年我刚到维多利亚时,住的公寓走到议会大楼不到十分钟,每周过来散步数次.
Monday, March 02, 2009
PATH in 10053 Trace 的存取路径代码和解释
可以参考老刘(Lewis)的Cost Based Oracle Fundamentals第14章 - The 10053 Trace File.
Oracle 11g之前,PATH 用代码表示,阅读起来极不方便, 因此木匠干脆罗列出来有关表扫描的Access PATH代码含义:
# PATH in 10053 trace
-- table access path
0 parallel hint
1 no access path spec
2 table scan
3 index unique
4 index range
5 index and-equal
6 order by using an index
7 open cluster
8 hash cluster
9 rowid lookup
10 range scan backwards
11 rowid range scan
12 driving_site hint
14 cache hint
15 nocache hint
16 partitions hint
17 nopartitions hint
18 anti-join
19 index rowid range scan
20 bitmap index
21 parallel_index hint
22 noparallel_index hint
23 index fast full scan
24 swap inputs to join
25 fact table
26 not a fact table
27 merge of this view
28 do not push join predicate into this view
29 push join predicate into this view
30 no_merge of this view
31 semi-join
Thursday, February 26, 2009
虚拟列分区可能返回错误结果Virtual Column-Based Partition-Chris译客
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作者博客翻译
在征得了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. 美国华人会对加拿大华人提出这样一些(极其片面)问题:
- 来美国玩吧,我们这里有唐人街.
- 你们(比如多伦多)出门上街,是不是能撞上北极熊?
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晕)
给 "开吻" 做个广告,吆喝一声.
时间是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
截至今晚,又读完了下面三章
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
我刚刚读完前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
select * from emp
where (emp_no = 1 or emp_no = 2 or emp_no = 3);
USE_CONCAT Hint的作用正好相反.
- PUSH_SUBQ
- QB_NAME
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,是最喜欢的城市之一,如果以后有机会全职远程工作,打算搬过去,小住一年.
小镇街景. 最喜欢就是这里安详宁静的气氛,太适合做软件开发了,可以帮助你最大限度的发挥你的想象力和创造力.
Friday, January 30, 2009
BC goverment job salary 加拿大政府工作收入简介
[QUOTE=abc]请问老兄了解省府里面搞IT的工资待遇情况吗?我可能有一个机会,但是不知道是否值得去。[/QUOTE]
以下言论,纯属道听途说,毫无真凭实据,入职各行各业(三教九流)均有风险, 请谨慎参考.
政府的工资都是公开的,去政府网站溜达一圈,就都清楚了. BC Public Service - Job Opportunities
BC省政府设在维多利亚,而不是BC省最繁华拥挤的温哥华,改善交通,增加就业机会,好处多多.
(人们纷纷建议中国中央政府设在昌平或者通县,一个道理)
木匠由于住在维多利亚,近水楼台,做过几次不成功的尝试,人家政府的人就是瞧不上俺,看我不像个混混,过于讲究实干和激进,不适合政府工作. 唉, 罢了, 由此断绝了这个想法.
政府工作职位分级别, 论资排辈, 又臭又硬的门槛和台阶.(精神胜利法;吃不到葡萄,说葡萄酸,发扬阿Q精神). 以后退休可以再考虑混进去.
R18,21,24 初级 3~5万
R27 中级 6.5万 ($64,109.53 - $73,329.50)
N30 高级 8万 ($72,380.24 - $82,867.93)
在往上就是Manager了. 每个级别会有5%到10%的市场调节. 鄙人没有听说过政府有额外的奖金计划.
政府有一个Flexible Day, 每两周多休一天假.
最牛的是政府的退休金计划, 一年加年薪的3%(或者2%), 最多可以达到年薪的75%, 商业公司没有这个计划, 干巴巴的$1400,还是在你没有存款和收入的情况,明摆着领不到.
我LD他们单位是个大学科研机构(纯属浪费纳税人钱财),属于政府薪资范畴,刚刚给每人追加了$4000~$7500的市场调节,还不错. 干的政府的懒散活,却非要和商业公司员工的收入看齐,不知道他Niang的哪门子道理.
我们DBA部门2008年夏天刚刚从政府找了一个R30级的, 给了他9.5万.
感谢这位华枫(ChinaSmile.net)网友提供素材, 素材就是博客的生命线.
BC省议会大楼(现在成文物了,每天对游人开放参观),在维多利亚 Inner Harbor .
Thursday, January 29, 2009
Rocky mountain trip落基山国家公园行程
这里是2008年陪岳父岳母观赏加拿大落基山脉国家公园的行程, 包括Banff, Jasper, Revelstoke.
和BC省立公园 Wells Gray, Mt. Robson.
9/6 Saturday: 赶八点轮渡(8:00 Ferry), 不在温哥华停歇, 到Hope市吃午饭,
夜宿净水市(Clearwater).Jasper Way Inn Motel, 57 Old North Thompson Hwy East,
1-250-674-3345, 2bedroom, $105
9/7 Sunday: 游Wells grep 瀑布,Roberson公园,Mt Edith Cavell 看冰川,
夜宿Jasper. Accommodation in the Rockies,303 Aspen Avenue,tel:(780)852-4609
Rates ($CDN, per room, 2 guests) High Season - $60,Low Season -$40, Miller
9/8 Monday: 自带午餐游 medicine lake/Maligne lake, Miette 泡温泉
9/9 Tuesday: 穿过 93 号公路, 观看1. Athabasca fall, 2.哥伦比亚冰川, 3. Saskathewan午餐, 4. Mistaya Canyon 5. Bow pass(Bow summit), and Peyto lake 6.乌鸦脚雪原
夜宿Banff. Rocky Mountain Bed and Breakfast,223 Otter Street,
1 (403) 762-4811,www.rockymtnbb.com $100-$125, sheryl
9/10 Wed. 1.Go throuth 1A (Option), 2.Lake Louise,(自带简餐)
Yoho:1. Spiral tunnels 2. Takakkaw fall 3. Natural bridge 4. Emerald Lake
5. Golden 午餐
夜宿Revelstoke, Alpine Inn & Suites, 1001 W2nd St, 1800-876-8206
2 bedroom suite three double beds or two double beds and two single beds, $110
9/11 Thu. 游水库大坝, Naksup (optional)
9/12 Friday: Vernon (optional)
9/13 Saturday: 温哥华 中餐 大快朵颐, 夜宿Richmond华人家庭旅馆.
9/14 Sun.乘轮渡返回 美丽宁静的Victoria.
应该是5号(Yellow head)高速公路.
Monday, January 26, 2009
2009 Chinese new year show维多利亚春节联欢晚会
-------------------------------
時間: 2009年1月31日晚7:00
Time: 7:00pm January 31, 2009
地点: 以馬內利浸信會
Location: Emmanuel Baptist Church,
2121 Cedar Hill Cross Rd. (大学南门)
晚会内容: 中国民歌民乐民族舞蹈京剧话剧
Content: Chinese Music, Chinese Dancing,
Beijing Opera and Drama.
晚会提供少年兒童照顾: Children Program Under Grade 6
免费入场,会后提供茶点: Free admission and refreshments provided after show
赞助单位 Sponsors
Dawa News
VictoriaBBS.com
Global Travel
DFH Realtor: Ms. May / Katherine
Traditional Chinese Clinic: Dr. Chen
大华商报
维多利亚华人网
环球旅游
DFH 地产经纪:刘艳梅/李冬妮
北京传统中医诊所:陈香医生
-------------------------------
http://www.news.cn/video/2009chunjie/cw.htm
推荐给海外华人, 这里您可以看到中央台春节晚会录像.
Thursday, January 22, 2009
Solve SQL plan access path issue with 10053 trace CBO小试牛刀解决执行计划突然改变的一个办法
问题
----
如下SQL查询订单细节表,两个谓词(predicate),每个谓词列上都有索引,
为什么 SQL optimizer 挑了一个选择性差的索引.
# SQL
SELECT /* */ * FROM po_item我们的情况是,一般一个订单一本书, 应该选择订单号POID列,基本没有重复. 但是2007年初夏的一个夜晚,CBO突然改用了物品状态STATUS列上的索引, 物品状态总共只有20个不同数值.
WHERE poid = :a AND STATUS = :b
ORDER BY poitemid;
INDEX PO_ITEM_POID ON PO_ITEM(POID)
INDEX PO_ITEM_STATUS_UPDDT ON PO_ITEM(STATUS, STATUSUPDDT)
db_file_multiblock_read_count = 32
optimizer_dynamic_sampling = 2
optimizer_features_enable = 10.1.0.4
optimizer_index_cost_adj = 100
alter system set optimizer_index_caching = 25;
alter system set optimizer_mode = FIRST_ROWS_10;
幸运的是,通过构造测试案例,成功再现了当时的情况(好比侦探办案).
解决方案
--------
理解 CBO,试验,观察 and 解释说明.
With SQL session 10053 trace and dbms_xplan.display_cursor().
结果及解释
------
当列统计信息包含num_distinct和density时,少数情况下,优化器会考虑使用density.
比如这个案例,
根据谓词取值(predicate column value)在数据发布图(histogram)的水桶(bucket)里面结果集大小(cardinality) 和 num_rows * density 做比较, 理论上会取数值大的一个. 但是这个案例CBO挑了数值小的一个. 理论会随着新版本的出现而改变.
做数据库设计和管理的,英语都不赖,看官您先读一点英文吧,春节后就变成中文啦. ^_^
When database collect histogram stats on a column, it calculate a new density for the column,
and it will be extreme smaller, CBO use density as selectivity.
After we hack the column density, database will clear the histogram stats,
the CBO will use 1/NumberOfDistinct, ignore density.
When we check the output of 10053 trace,
both IO costs are same, but index selectivity (ix_sel) and table selectivity (ix_sel_with_filters)
on Index: PO_ITEM_STATUS_RANDOM_UPDDT is smaller than than it on Index: PO_ITEM_POID.
Index: PO_ITEM_POID
rsc_cpu: 17832 rsc_io: 3
ix_sel: 1.2670e-05 ix_sel_with_filters: 1.2670e-05
Access Path: index (index-only)
Index: PO_ITEM_STATUS_RANDOM_UPDDT
rsc_cpu: 17632 rsc_io: 3
ix_sel: 6.2422e-06 ix_sel_with_filters: 6.2422e-06
*) 修复: 改变列的density统计信息, 使之接近真实值.
Test case setup link 构造测试案例
10053 trace output跟踪文件输出和dbms_xplan美化的执行计划.
后记
----
CBO的水很深, 一环套一环, 好似无底洞. 研究细节和深度需要适可而止,解决完问题,赶紧撤.
参考Christian Antognini提到的DBA容易犯的强迫调优失调综合症(compulsive tuning disorder)谨防重蹈覆辙.
FYI,
Once upon a time, most database administrators suffered from a disease called compulsive
tuning disorder.3 The signs of this illness were the excessive checking of many performancerelated statistics, most of them ratio-based, and the inability to focus on what was really important.
回龙观 风雅园 飘在北京住的地方
Monday, January 19, 2009
Learn from Oracle book 读书学习数据库
开卷有益,静下心来读书是吸取知识的最快途径之一, 再结合试验,进步更是飞快.
书中自有黄金屋,书中自有颜如玉,对第二点还没啥体会,您有的话,介绍一下.
2008年上半年读完了Steven Feuerstein的Oracle PL/SQL Best Practices, 2nd Edition: October 2007, ISBN 13: 9780596514105. 感觉PL/SQL功力暴增,从菜牛一跃变为牛人,读完了Doing SQL from PL/SQL: Best and Worst Practices更是进入了超一流选手的行列,充满自信.
2008年10月11月,花了两个月时间完成了瑞士人Christian Antognini的Troubleshooting Oracle Performance. 读了一半,节奏缓慢,等读完了所有章节,才明白了前半部分铺垫的意义,盖房子要有一个好的根基. 作者虽然母语不是英语,开始读的时候稍有不适,慢慢的,发现他的文章却是平铺直叙,拿捏得体,易于理解,所以读书进度很快.
扯远一点,1994年偶然在公司(西安思维)捡到一本Code Complete(代码大全)中文译本,爱不释手,但也只是蜻蜓点水,学到一点皮毛.现在我手里正拿着Code Complete的原版.
代码大全里讲的软件开发有几种比喻(Metaphor), 比如软件书写(Penmanship,写作),软件农场(种庄稼/耕作Farming),软件堆积(养牡蛎Oyster Farming) 和 软件构造(Construction/Building,构建软件).
我同作者一样,喜欢盖房子这个比喻,房屋的根基和房屋的构造规划都很重要.
2008年5月开始读CBO Fundamentals,这本书真是难啃,内容不易理解,断断续续,每天大概5页,9月份卡在第十三章Sorting and Merge Joins,圣诞节又拾起这本书,一鼓作气,冲过难关,读完了剩余部分,特别是读完14章The 10053 Trace File,贯穿全剧,对CBO的认识又上了一层台阶.
我对英国英语不太适应,Doing SQL from PL/SQL: Best and Worst Practices的作者也是英国人,读起来相当吃力,改天我把所有20个要点及示例重新写一遍.
下一个目标是Richard J. Niemiec的Oracle Database 10g Performance Tuning Tips & Techniques, 1000页,每天十页,计划100天(3个月)读完.粗粗翻了一下,此人标准美国英语,文笔通俗易懂,按时完成目标问题不大.
2005年7月刚到加拿大时,从旅馆到办公室的路上, 距离办公室有300米,中午常到这里散步.
Friday, January 16, 2009
Kicks 近期动态
这里是我的学习动向,
宏观研究易于线性廉价扩展的数据库系统,BASE解决方案,依据功能组拆分数据库,异步处理.
微观研究SQL Optimizer是怎样工作的.弄清楚了Oracle优化器,你会发现以前各种SQL方面的疑难杂症迎刃而解,加个SQL hint,调整隐含参数,修改对象统计信息之类的技术,都是菜鸟级的功夫,但是牛人也得用.
中间层面,研究各种典型场景中处理数据的设计模式,以及SQL和PL/SQL优秀实践和糟糕实践,找出规律,重构模型. 通常我们讲最佳实践,木匠不喜欢"最佳"这个词,它也是个封闭端口,感觉不允许别人挑战你的权威一样. 质疑权威是我的行事准则之一. 而且喜欢开放端口的描述.
生活方面, 耳朵感染了,旱了两个月,这个周末开始恢复游泳锻炼,健康始终排在个人目标前三位.
2009年的密林狂奔和(国家公园)露营野游计划也该详细制定了.
股市在低谷震荡,2月底以前需要找准机会抄底,买足去年RRSP(退休金计划)的余额.
房屋贷款利率降到了2.8%,诚如玉面飞龙所述,现今房奴的日子比较舒服,不急于还本金.
职业发展方面,前CIO介绍了一个挑战性的工作,2月初确定.
还有个加州的华人中介介绍了中国的机会,如果前一个尝试失败,加拿大移民监坐完了,我可以自己回国.如果前一个尝试顺顺当当,我就把它介绍个国内的朋友.
我平均18个月换一个工作,最短的只干了一天半,1993年10月在西安用AutoCAD绘制电路图.
目前这个工作是我做的最久的,已经3年7个月了,一来就是6级工程师,我们的CIO/CTO才7级,基本没有发展空间了. Tom讲过,10年做10个项目,远远好过10年做一个项目,积累更多经验,学到更多知识.
参考木匠的座右铭,我最不缺少的就是探索尝试新技术的兴趣,好奇心,创新精神和想象力.
博客方面,一下萌发了好多主题,可是哪个也不能专心深入的展开写出来.
老爸讲过咱天生就是发散型思维,缺少组织才能,缺少的是自律和专注,排在我的座右铭前面.
人生35岁,看清了自己的优点和缺点,不容易.路漫漫其修远兮,吾将上下而求索.
突然觉得英文写起来快,中文已经慢了几节,下周赶紧把异步处理系列翻译完.
我们家苏菲 和 回龙观的冰糖燕窝家的 ??,对不起,浅棕色可卡犬的名字忘了.
Tuesday, January 13, 2009
Why to generate test data and how. 为什么要生成测试数据?如何做?
加上
create table t(a number);
insert t values(1);
这就是我知道的所谓测试,幼稚吧.
为啥需要测试数据呢?
情况太多了,我的经验是,等到你需要的时候,就是找不到,干着急.
测试数据可以用来把灵感转化为实践,验证原型是否工作(可用性,可靠性,可扩展性),性能测试,提问题和重现问题 等等. 随后有一篇介绍我是如何用完善的测试数据发现了使用MERGE SQL产生的臭虫.
还支持TDD, 测试驱动开发, 用过以后你就知道甜头了, 和异步处理一样美妙!
关于提问题, 引自Tom: You would better supply very very simple create tables and insert statements.
The SMALLEST create table possible (no tablespaces, no schema names, just like I do in my examples for you)
解决方案.
--------
*) 产生多个不同数值, 得到一定的数据分布
Mod(rownum,500)
dbms_random.value(1,500)
dbms_random.normal()
*) 产生字符串
rpad('x',500,'x')
lpad(RowNum,200,'*')
dbms_random.string('l',500)
# 'u', 'U' - returning string in uppercase alpha characters
# 'l', 'L' - returning string in lowercase alpha characters
# 'p': any printable char. this one is slow
*) 数据源
# dual connect by level <= 3000 # all_objects # WITH subquery factor *) 随机排序 ORDER BY dbms_random.random; *) 点击进入具体示例
*) 参考
1. Tom, from dba_object
2. Jonathan, + materialize subquery
3. Christian Antognini, dbms_random.string()
4. Tanel, dual join dual connect by level <= 3000
维多利亚市的天鹅湖, 湖对岸右边一点是Hatley Castle城堡, 电影X-Man(X战警)三部都是在这里拍摄的.
Wednesday, January 07, 2009
cross rows comparing行间数值比较
方法
--------
1. Hash Join
eagle’s home http://www.dbafan.com/blog/?p=176
2. Lead()/Lag() Analytic function
3. SQL Model
结果
-------
Hash Join表连接是一个好的方法, Lead() 分析函数效果更佳, 更短时间, 使用前者八分之一Latches锁,1/4逻辑读.
SQL Model可以工作, 但是数据量一大,效果就很差,惨不忍睹, :)
SQL Model 需要更多的 PGA内存和临时表空间来存储Model单元和排序.
减少Measure部分的列数有一定帮助, 需要进一步学习和调整. SQL Model的效率理应匹配Lead() 分析函数.
您有更好的手段来调优 SQL Model 吗? 请发表高见.
详细性能测试步骤和代码
PL/SQL ADT collection usage比较自定义类型数组与PL/SQL数组的性能
有了这些基础准备知识以后, 我们再来谈(big picture)整个画面: 异步处理 和 数据复制.
PL/SQL 是最好的Oracle数据库数据处理和编程语言, 这里讲讲如何提取数据并放进用户数据类型数组ADT/UDT collection. 我仅知道3种方法, 我们通过一组Benchmark找到每个方法的优缺点,帮助指导实践.
先写了英文的,然后翻译成中文. 详细初始化设置和Benchmark的代码, 请参考英文版链接, 很多关键字看英文版会更清楚.
你可以暂时忽略create table里面的list partition分区部分, 以后会用到.
欢迎提出更多更有效的方法.
Benchmark方案
-- -- ---
* RunStats
* SQL trace, 推荐使用Christian Antognini的TVD$XTAT trace 分析工具 , 读过TOP的人都知道, ^_^.
测试结果
-------
PL/SQL 内置数组(Associative Array and Nested Table) 是从数据库获取结果集的最省资源的方法.
但是有些时候,你需要把数组当作表(table),来跑一个查询, 你就必须用到ADT/用户数据类型数组.
比如:
Declare
lt_item_tab item_tab;
Begin
select item_name, qty, price from TABLE(lt_item_tab);
End;
3种方法 和 他们的优缺点:
1) 将多个列转换成用户数据类型数组, 成批放进数组.
优点: 代码简洁.
缺点: 和第二种方法相比, 多消耗50%的CPU时间; Latch锁数差不多.
2) 使用multiset, 在SQL里面直接构造出用户数据类型数组, 作为一行/一个单元放进数组.
优点: 使用较少资源, 在我的测试案例里面, 比第一种方法CPU时间少50%.
缺点: 代码有点复杂; 在版本10.1中,不支持SQL Returning语法. (明天试一下11.1.0.7).
3) 成批放进 PL/SQL 内置数组, 然后复制数据到用户数据类型数组.
优点: 使用较少资源, 67% better than approach 1 in my test case; Latch锁数少一半.
缺点: PGA内存多一倍, 合乎逻辑, 代码有点复杂, 维护性较差.
注释: ADT: Abstract Data Type, 也叫作 User Define Datatype.
鄙人以为, 以上所有代码都很简单, 复杂只是相对而言. 嘻嘻.
Sunday, January 04, 2009
Amazon.com aquired AbeBooks.com公司被亚马逊收购
2008年早些时候就开始谣传,先是说要被Chapter(加拿大最大实体书店)收购,
后来夏天漂流的路上听"老奔驰"说在两周以后要被亚马逊收购,而且全世界的人都知道了,这才倍感震惊,恍然知晓.
公司有3个华人同事,我是第一个得知,难道这"全世界"不包括我们,因此学了一课,没事多找同事聊天,即提高口语,又快速了解本公司花边新闻.
7月31日,公司宣布第二天有重要消息发布,同事们顿时感到黑云压境,不知是祸是福.
第二天亚马逊来了几个VP,宣布了收购意向,十月底完成交易,现金收购.
他们提到了三个不变: 业务,人员和办公地点.这下大伙的心才放了下来,松了一口气.
在QA问答时段,席间好多同事积极表示了去西雅图亚马逊工作的兴趣,他们的回答是公司鼓励应聘内部职位,优先考虑.本地西人同事真是直爽!
收购并不是一帆风顺,期间受到了加拿大政府遗产部门的刁难,区区一个十年历史的创业型公司,咋样也不能算作一个加拿大遗产呀!!? "老憨"(德国CEO老大)多次亲自跑到渥太华,同政府官员进行激烈的争论,终于在11月底得到政府批准,(而接待我们CEO的竟然是刚毕业的实习生毛头小伙,他知道啥呀).
结果12月1日成交,亚马逊趁机压价10%,好过收购失败,以后有大树做依靠,确保安然度过本次经济危机. 还好加币跌了,收购按美元结算,基本没有亏损.
在说说股票和期权,这是木匠第一次从期权里面得到实惠,味道不错;在Dell工作的时候,发了600股,每股标价$60,结果到走的时候,2001年IT泡沫,每股跌倒$30,味儿都没闻着.
原来的公司AbeBooks.com每人##股期权(Stock option),人人均等,共产主义.
到了亚马逊好了,发的是股票Share,而且根据职务轻重差异化,终于显示出来DBA的重要性,还是大公司规范.股票分四年兑现,算下来每年差不多一万块.这年代,要求加薪五千,难于蜀道,股票发下来倒是轻松.
号称维持三不变,其实日常工作还是受到了影响,稍微大点的项目,都要报亚马逊审批.希望今年有机会南下100公里,到西雅图亚马逊短期轮换工作.
注释1: "老奔驰", 原名Peter, 因为他有一辆80年代造的奔驰汽车,就给他起了这个绰号.在办公室用中文议论别人是不礼貌的,所以给每个同事都起了中文外号,比如沃尔沃,豆腐丝,老汤唯,二号,研究生...etc.
河狸湖(Beaver Lake)结冰了,1996年以来首次,记录一下.
Saturday, January 03, 2009
Data accuracy and consistency分布式异步数据处理的可行性
-- '大多数的事例告诉我们,我们不因才干、天赋、美丽的帮助下取得成功。反而,成功来自于最简单的"坚持"'.
好了,言归正传,谈谈当下如火如荼BASE设计架构中异步处理的可行性.
BASE (basically available, soft state, eventually consistent)
很久以来,产品经理和软件开发人员都把维护数据的一致性和准确性作为首要目标.
要想构建一个scalable线性扩展的数据库系统,必须牺牲一些数据一致性,来创造出更高的可用性和减少网络依赖性(Network Partition Tolerance, or Isolation and Loose coupling).
鄙人认为(IMHO - in my humble opinion), 除了信用卡系统和订单系统, 其余功能模块都可以异步处理,比如库存,搜索,财务,物料,后勤运输,发货...etc.
这里提供两个真实生动的素材,帮助你说服产品经理,证明构建异步数据库系统的可行性.
a) 航班订票系统
某天你去国航订票,要求买靠窗户的座位,系统里显示只有3个走道的座位,但是实际上有两个靠窗户的座位.
你会去国航找他们领导投诉吗? 答案是否定的.
b) 网上购物-在亚马逊买书
Doug(倒戈)刚刚出版了一本新书: "如何冬季漂流?".
我们快乐的客户登录亚马逊主页,输入关键字"漂流", 找到3本书,但是没有Doug那一本,客户才不在乎呢.
他们买了一本评分高的, 然后带着汽船去享受冬季漂流了.
我猜只有作者Doug非常气愤,他会打电话给亚马逊客户服务热线,要求更新库存,将他的书上线.
同样, Tom 刚刚出版了一本新书: "如何3分钟优化你的数据库?"
... ... 您自己编后边的故事吧, 嘻嘻.
以下是我发给我们产品经理的原文.
*) Air flight booking ticket system
As a passenger, if you ask a seat close to window, but system shows only 3 seats available in aisle, and actually there are 2 more seats close to window.
Will you call airplane company to complain? No.
*) Amazon book search
Doug published a book: “how to tube in winter?”
If you search the book title with keyword “tube”, show 3 book, but not Doug one, the end user won’t care. They will buy one of them, and then enjoy the tube in Winter…
I guess only editor Doug will be angry, he will call Amazon to refresh his book in Inventory.
您有什么更好的应用场景故事呢? 欢迎留言介绍.
注解1: Doug 是我们公司一个年轻贪玩的Web Developer, 每年夏天组织我们去Duncan市Cowichan 河漂流,而且可以观赏hot girl, 并且引诱你吸大麻(Weed).
注解2: Scalability - 更具体点,就是Scale Out, 这个词我翻译的不好, 欢迎批评指正.
注解3: network Partition tolerance, CAP三原则中的P, 也翻译的不好,请指正.
p.s. 参考:
1) BASE: An ACID Alternative
http://acmqueue.com/modules.php?name...owpage&pid=540
2) Scalability Best Practices: Lessons from eBay (Partition and Asynchronously)
http://www.infoq.com/articles/ebay-s...best-practices
*) Fenng 的 系统架构方面的文章汇总.
http://www.dbanotes.net/arch
从客厅窗户看我家后院.
Friday, January 02, 2009
Life quality beside salary 生活质量和生活成本
如果你今年在硅谷湾区找到了一份满意的工作,
开始找公寓租住,
一房一厅 $1200 ~ $1500
两房一厅 $1500 ~ $2200
如果你是单身,一个月$8000,不少了吧,基本吃住生活开销,就得花掉$4000, 还有30%缴税,
各种奢侈娱乐你就别指望享受了,闲暇时间,就在家上网溜溜花边新闻得了.
或者休长假,去中西部偏僻省份长途旅游.
Santa Clara中等价位房屋 $500,000
稍微好点,中上等价位房屋 > $ 1 million.
在硅谷的IT华人,基本赚着中上等的收入,住着中上等价位的房子.
维多利亚的IT华人也一样; 中等价位房屋 $40万, 中上等价位房屋 > $60万.
比如在湾区,一个家庭年收入在15万到25万,不少了吧, 每月大概一万二到两万.
上缴30%个人所得税, 每月6千.
然后谈房子, 基于正常贷款利率, 借十万,月供$500, 那么买个一百万的房子,
多年的积蓄交了20万首付,咋整也得借八十万,月供$500 * 8 = $4000, 日常生活开销, 每月2k~3k.
一般一家两个小孩, 上学加上各种知识培训(钢琴,国际象棋,游泳...等等)一个费用在1k~2k, 两个算3k,不包括玩具.
一眨眼,每月一万六千块钱没了. 该谈玩耍娱乐了, 就在自己后院陪小孩玩玩过家家娱乐吧.
最近半年房屋价格剧烈震荡, 半年前中等价位房屋 $70万.
但是好地段的房子,价格基本没变, 老道理 Location, location, location!
买房主要看位置,位置,还是位置.
总之, 硅谷湾区生活成本高, 一个家庭里边, 夫妇双方都要工作,才能生存下去.
以上素材来自一个我的客户,在硅谷湾区工作生活了15年,如今在 Mountain View 上班.
注释1: 写的有点悲观, 给一些盲动的人一个清醒的认识,比如我, 全盘考虑以后再做决定. 嘻嘻 硅谷的人们依然快乐的生活着.
Have a nice day!
Thursday, January 01, 2009
Salary review in glass_door职业规划
2008年初我的目标是年收入增加一倍, 由于客户业务量收缩,我的目标也随着一再调整,最后减到年收入增加25%. ^_^
今年经济形势差,正好找个借口,今年的目标是持平去年的收入,或者减少20%,不求上进.
(不能产生价值的技能,不是我追求的技能;参考木匠的座右铭第二条: 实用)
我三年前登录加拿大的时候,预定目标就是坐满移民监,然后南下.
估计这个月入籍考试,三月宣誓入籍,就可以走了.
资本主义经济5到10年一个高低循环, 让我赶上了经济低谷, 或许还要继续卧薪尝胆一年.
亚马逊有一个内部机会,属于Payments Services部门,
我就喜欢去最艰苦(critical business)的地方工作,提升技能,提升收入,一举两得.
先联系试试,看看可不可以远程工作两个月,然后搬过去.
关于工资调查,我推荐www.glassdoor.com, 一个由用户产生内容的Web2.0网站.
在如此经济低迷时期,它居然得到了一千万风险投资.
这里是GlassDoor网站公开的工资调查.
你注册一个帐号,然后填上你的年收入(现在的或者历史的,都行),就可以看别人的工资和公司评价了.
Microsoft
Software Development Engineer base salary: $91,464
Program Manager base salary: $89,765
Software Development Engineer In Test base salary: $84,451
Deloitte
Consultant base Salarie $73,236
Senior Consultant base Salarie $96,546
Consulting Manager base Salarie $127,002
Cisco Systems
Software Engineer IV base salary $110,904
Software Engineer III base salary $93,232
Software Engineer base salary $90,629
Accenture
Consultant base salary $73,741
Analyst base salary $58,426
Technology Consulting Analyst base salary $59,460
Yahoo!
Software Engineer base salary $97,175
Senior Software Engineer base salary $121,145
Senior Product Manager base salary $123,000
Software Engineer base salary $95,631
Senior Software Engineer base salary $123,225
Software Engineer III base salary $105,022
Amazon
QA
Salary: $84,000 Bonus(Cash+Stock): $20,500 Total $97,667
Software Engineer I
Salary: $82,416 Bonus(Cash+Stock): $18,286 Total $97,889
Software Engineer II
Salary: $98,686 Bonus(Cash+Stock): $28,140 Total $122,857
Software Engineer III
Salary: $113,54 Bonus(Cash+Stock): $58,859 Total $161,311
Yahoo! DBA
Salary: $128k~141k Bonus(Cash+Stock): $24k Total $153k~165k
QA Engineer at Yahoo!
Salary: $88,880 Bonus(Cash+Stock): $5,500 Total $90,713
Cisco Systems Software Engineer
Salary: $90,629 Bonus(Cash+Stock): $12,772 Total $98,223
eBay Principal DBA
Salary: $138k~150k Bonus(Cash+Stock): $ 20k Total $158k~171k
维多利亚的IT同仁,咋样,心动了,南下吧.
看看下面这张地图,西雅图就在维多利亚南边100公里,收入却高出我们一倍,天理何在. 哈哈.
备注: 点击看大图.
Wednesday, December 31, 2008
Motto of the year 2008座右铭
好多都是看完就忘,无法运用到日常事务当中,让人遗憾.
后来思考了一下, Simple is beautiful, 简单就是美, 常用且有用的就那么几条,足矣.
收集并简化其中的精华,贴在我办公室抬头可见的位置,每天早晚温习数遍,潜移默化到实践当中.
(通过自律和专注, 在2008年最后一周,实现了每天一篇博客)
并且希望对过路看客有帮助.
*** 按照重要性*优先级排序 ***
14:c:目标 Definiteness of Purpose
12:c:实用
11:g:计划 GTD Inbox Organize Next Action Review
10:x:合作 Master Mind Principle 完美 融洽 协作-尊重/respect
9:u:专注 Control attention
8:u:自律 Self-Discipline
8:f:Accurate Thinking 全盘考虑
7:m:Open and Listen
7:h:健康
7:e: 记录好主意 Write everything down
7:e: 真诚-信任-行事透明
7:e: 承担责任-询问意见-优雅接受批评
7:e: 批处理杂务 Batching
7:e: 感激 Gratitude. Be grateful
7:e: 努力做的更多 - 更好更多的完成工作
7:e: 主动去做 Be proactive. Personal initiative.
7:e: Don’t take things too seriously
7:c:热情
7:c:创新 Imagination
7:c:乐观开朗
7:c:Positive Mental Attitude
6:l:Learning from Adversity and Defeat 从失败中学习
5:d:素质 -- 技能,专长,理解和热爱一个领域,
5:d:灵活性 -- 初学者心态 - 好奇心
5:d:享受竞争的过程,有足够的进取精神
4:c:宇宙平衡法则 Cosmic Habitforce
-- 按照我的缺点弱点(weak point)排序 --
10:x:合作 Master Mind Principle 完美 融洽 协作-尊重/respect
9:u:专注 Control attention
8:u:自律 Self-Discipline
7:m:Open and Listen
6:l:Learning from Adversity and Defeat 从失败中学习
7:h:健康
11:g:计划 GTD Inbox Organize Next Action Review
8:f:Accurate Thinking 全盘考虑
7:e: 记录好主意 Write everything down
7:e: 真诚-信任-行事透明
7:e: 承担责任-询问意见-优雅接受批评
7:e: 批处理杂务 Batching
7:e: 感激 Gratitude. Be grateful
7:e: 努力做的更多更好 - Going the extra mile
7:e: 主动去做 Be proactive. Personal initiative.
7:e: Don’t take things too seriously
5:d:素质 -- 技能,专长,理解和热爱一个领域,
5:d:灵活性 -- 初学者心态 - 好奇心
5:d:享受竞争的过程,有足够的进取精神
7:c:热情
7:c:创新 Imagination
7:c:乐观开朗
7:c:Positive Mental Attitude
4:c:宇宙平衡法则 Cosmic Habitforce
14:c:目标 Definiteness of Purpose
12:c:实用
没有数据库,一样完成Order By的排序操作 :)
附录: 富兰克林的座右铭
1.节制——食不过饱,饮不过量。
2.寡言——除对别人或自己有益的话外,不多说话,避免与人说话。
3.秩序——用过的东西归还原处,做事情有条有理。
4.果断——该做的事,坚决执行,决定履行的,务必完成。
5.节约——除对别人或自己有益外,不乱花钱,也就是说,切勿浪费。
6.勤奋——不浪费时间,经常从事有益的事情,动作利索,不拖泥带水。
7.诚实——不欺诈,心地坦白、正直,言行一致。
8.公正——不侵害别人,不要由于你的失职而使人遭受损失。
9.中庸——避免极端,责人从宽。
*.整洁——身体、衣服以及居住的地方,保持整洁。
*.沉着——遇事不慌乱,不论是琐碎的、一般的或是不可避免的事故。
*.正直——行正言正,不要损害自己或别人的声誉。
*.谦虚——学习先哲的谦逊精神。
雪还没有融化完, 木匠就像水浒传里逼上梁山的好汉.
这是我网上购物新买的柯达照相机拍摄的我们居民小区.
Happy new year! 今天在小区散步, 各位大叔大妈就是这样打招呼的. ^_^
Tuesday, December 30, 2008
response time SLA 如何定义前端Service Level Agreement
很简单.
比如说购物篮Check out/Submit Order的最大响应时间,
200并发事务 90% < 0.7秒, 99.9% < 1.5秒
500并发事务 90% < 1.2秒, 99.9% < 3秒
我们刚刚开始采用, 作为客户端response time SLA 的达标定义.
如何检查你的应用性能有没有达到SLA定义呢? 有两种基本方法:
1. The first takes advantage of the output of instrumentation code.
2. The second one is to use a monitoring tool that checks the application by applying synthetic
transactions.
我的笨拙翻译:
1. 分析跟踪(调试)代码的输出, 生成响应时间有关的性能报表
2. 定期运行人工合成仿真事务, 监控其响应时间
附录, instrumentation说起来简单,却找不到一个合适的中文,抱歉,我考大学语文不及格. 看客您将就点儿.
比如, log4j, log4plsql, Oracle session SQL trace 和 debug.f 都是 instrumentation, 用來跟蹤運行代碼的執行結果.
Monday, December 29, 2008
Company benifit package 公司福利
今天的主要任务就是写博客.
一大早起来,想到公司福利是个很好的主题,有一大摞素材.
就说我们公司吧, 2004, 2005, 2006, 2007 & 2008 连续5年 加拿大Top100,
(North America’s top ecommerce companies) 北美(加拿大,美国,墨西哥)电子商务公司排名70.
假期: 15天; 3年以后, 18天; 5年以后, 20天. 我是2008年夏天够3年的.
病假, 一年6天, 事假(Paid Personal Days-off), 一年3天.
共计: 24~29天, 病假事假用起来和年假一样. ^_^
灵活工作时间, 作为数据库管理员,这个我用的多.
公司付3%工资额度,替员工购买退休金(RRSP), 相当于工资增加了3%.
报销: 每月汽车票或停车位 $75, 每月健身$25, 书籍照实报销.
股票: 期权大概每人1万股, 最后卖给亚马逊的价格是5块多,扣完税人均1万多;
反正成不了百万富翁,还得继续工作.
员工可以按一定百分比额度购买公司股票,Share Purchase Plan.
保险:
短期失去工作能力, 前2周 公司付100%工资,后15周 公司付70%工资; 然后交给社会保险.
牙医: 每年$2000, 就是说, 花费$4,000 乘以 50%.
公司负责购买100%医疗保险.
幼儿园: 正在筹建当中.
办公室娱乐: 桌球,乒乓球,桌上足球,Wii; 另外每周三中午利用上班时间踢一个小时足球.
小食品(tantalizing perks):
每周三免费早餐,有我的最爱牛角面包,Muffin(马粪),甜圈(Doughnut),烧饼(Bagel),果仁酥饼,还有各种叫不出名字的食品;
每周一二四供应水果, 各种饮料无限供应. 可是我主要喝冷水和豆浆.
还有免费流感疫苗,电动按摩椅...
左上角图片是我正在和一个菲律宾同事玩桌上足球, 窗户脚坐的是我们公司的二号(美女)在读书.
这是我工作过的最好的办公室建筑,四面全部是落地玻璃,维多利亚美景一览无余,我的座位可以看到海景,照片随后就到.
差不多就这些了. 象我门人事部经理说的, 现今20~30岁的年轻人,过两三年换一个工作,
不是因为工作满意度差,而是依靠换工作来构造他们的简历. 还是有很多人再次回来,有两个QA回来以后升职当了拉长(Team Lead).
因为目前大学生选修计算机IT专业的越来越少, 加上二战婴儿潮(baby boomers)开始大量退休.
提高公司福利是吸引和留住IT人才的关键一环.
附录一些报刊参考文章:
Victoria's Abebooks fights to retain job-hoppers
Happily ever after - Abebooks Inc.
Sunday, December 28, 2008
Boxing week 岁末减价周
27号天气不错,风和日丽的,我们一家出门进城购物啦.
从中国带来的登山鞋终于在这次大雪天派上了用场, 可惜鞋底磨破了,其他地方依然如新.
加拿大人力太贵, 补鞋不是办法, 就再买个新的吧.
Fenng 绿色 IT 生活 推荐一条牛仔裤穿三年, 咱的鞋子是2003年参加北京昌平回龙观野猪登山队时买的, 木匠的名字也是从那时候公开使用.
在SportsCheck找完鞋子和棉背心后, DL去MayFair看衣服,我下楼再扫一眼FutureShop.
U盘和SD卡堆了几大箱,而我网上订购的依然在路上. 今年是卖不动了.
在店里碰到了黑龙江北大才子, 这伙计去年Boxing day退掉的佳能单反相机,今年又捡回来了,有意思.
俺们维多利亚华人圈子小,搞IT的基本都互相认识.
中午在MayFair商场的快吃摊(Food court)解决了午餐,省了做饭和洗碗. 咱是出名的懒人.
沃尔玛的抢低价的人太多,就放弃了.
眼下经济低迷,以廉价著称的沃尔玛反而生意兴隆,不过他的货品质量不敢恭维.
又到Candian Tire淘货, 找到果汁搅拌机,记忆泡棉枕头($5,野外露营用).
一套两个保温不锈钢水杯$15.
两个可以承重135公斤的小板凳$7,岳母回国之前一直惦记着去街道Yard Sale 后院跳蚤市场 捡几个回来,未果, 因为夏天宝贵的周末都被LP安排出门游玩了.
还有咱多年苦苦寻找的大沿儿太阳帽,可以跟开吻野战军形象看齐了.
您在Boxing week淘到什么了? 欢迎共享.
Saturday, December 27, 2008
LifeHacker top 5生活客工具推荐
http://lifehacker.com/385929/best-text-editors
Notepad++ (Windows)
Emacs (All Platforms)
UltraEdit ($49.95)
TextMate (Mac OS X)
vim
TextPad(Windows) $32.50, 木匠喜欢用.
最佳找工作网站
http://lifehacker.com/5114814/five-best-online-job-search-sites
Indeed.com
Craigslist.org 木匠经常使用
HotJobs.com
CareerBuilder.com
LinkedIn.com
Monster.com
Friday, December 26, 2008
A white snow holiday 2008 白色圣诞节
随着全球变暖,会出现越来越多的恶劣天气.
维多利亚,这个全加拿大最温暖的地方,开始下大雪了.
记得2005你刚来的时候,整个冬天气温在零度以上,连阴天加毛毛雨,草地一片绿色.
12月19日,从北极来了一股寒流.
因此,从东海岸到西海岸,整个加拿大50年以来首次迎来飘雪的白色圣诞节.
美国大部分地方也享受到了白雪圣诞节.
维多利亚和温哥华均降雪70多毫米,部分房子被压塌.
我家北边的河狸湖(Beaver Lake)湖面结冰,整个公园一片白色,踩得脚印都是那么干净.
记得在中国时,大不了也就西伯利亚来股寒流,看来还是北极的寒流威力大,更猛烈.
路面积雪打滑,出行不易,减少采购, 就在图书馆借了好多DVD,包括电影,足球集锦,
肥皂剧('sex and city', 据说有利于提高英语口语 ^_^)
我们圣诞节也吃了大餐, 就是包素饺子, 吃了两天,再次减少了出门采购.
今天又下了雨夹雪(Flurry,新学一个词,和我的计算机同名), LP还惦记着SportsCheck(体育用品店)的长筒靴促销, 估计明天去,连断码也买不到了, 嘻嘻.
祝各位朋友新年吉祥!
Thursday, December 25, 2008
Shopping online 2008 网上购物
还真有点难为了木匠,可恨的rb日货横行,都是木匠打击对象. 还好柯达幸存.
昨天在staples.ca订购了一个柯达照相机, $65.00, C713 Digital Camera, 7.0MP, 3x Optical, 5x Digital Zoom
这个配置足够我用了,拍照1024 x 768尺寸的照片就行了.
话说华人男子最喜欢购买电子产品,
在加拿大西海岸,网上购物一般可以去,
dell.ca, futureshop.ca, bestbuy.ca, amazon.ca, staples.ca
一般我推荐去dell.ca, 90%情况下物美价廉,送货也快,优于其他网站.
可以在Amazon看看产品介绍和使用评价,亚马逊的强项是数据,包括数据仓库,(商务智能)数据挖掘 和 关联产品推荐;
amazon.ca里面的货物品种比较少, 优点是以加币计算,运费合理.
amazon.com里面的物品齐全, 可以用关键字搜索商品,然后顺着used & new链接,
进入Featured Merchants,找价格实惠的商品.
Dell的强项是物流和进货渠道,所以Dell的货,成本低. 我2000年在Dell做DBA,那时Dell的口号是零库存.
staples.ca 第二天送货到家,送货免费($50以上),可惜电子产品种类太少,而且贵,还蒙你,说他的已经打过狠狠的折扣.
一些极端情况, Future Shop 还是有亮点, 以下就是我淘沙淘到的两个内存卡,
Future Shop的送货极其的慢,耐心等待个把月.
明天是Boxing Day(大减价日), 我们去城里买点鞋子和衣服.
老婆为了准备这个"火拼"日,做足了功课,遍历筛选了各种Flyer(广告传单).
您是在哪个网站购物的? 欢迎留言投票评选.
附号外一则,
SQL and Hadoop
听说Hadoop最终会结合进数据库,而你不再用作出选择:所有主流数据库系统将同时拥有SQL层、查询优化引擎和MapReduce能力。
作为 Oracle DBA, 我就等着Oracle下一个版本 12.0 集成Hadoop啦,也省得提前单独学习它了.
Sunday, December 21, 2008
Getting Things Done notes 2008 学习与共享笔记
如果GTD分为5级, 我刚好到InBox 和 Next Action之间的1.5级.
时间管理:
Set goal
Set priority
执行步骤(原则):
Collect
Process
Organize
Review
Do
计划 --> 一种自然方法:
Defining the purpose and principles
Envisioning the outcome
Brainstorming
Organizing
Identifying next actions
组织任务(文件夹):
InBox
Next Action
Project
Waiting for/On hold
Idea/Inspiration/灵感
Some Day/Maybe
Reference
Delegate
Complete box
Trash box
推荐GTD工具:
Paper and Pen
Text file
Spread sheet
Action Outline
Monkey GTD (http://monkeygtd.tiddlyspot.com/#MonkeyGTD)
后续, 下次谈如何做计划.
不同层次的远景和焦点,
Current actions
Current projects
Areas of responsibility
Yearly goals
5 year vision
Life goals
Saturday, December 20, 2008
Beat rb_jp products"今天,你搞日了没有?"
日前和几位编辑朋友吃饭,吃到中间,有两位工作比较狂热的家伙抛开梅菜扣肉又讨论起了稿子,中间冒出一句 – “今天,你搞日了没有?”
嗯? 这什么词儿阿?
好 奇之下一问才知,“搞日”一词原来是个典故,在北京编辑界颇为流行。可能近来穿越流行,仓颉经常在北京的大街上游荡,三天两头创造出“BT”“雷倒”之类 新词,让字典追着改都来不及。大环境如此,作为文化人的一员,编辑们自然也不甘人后,这“搞日”一词,竟然是报纸上出了错字的意思。
这个词兴起来没多久。原来,某大报前些天发了篇历史评论,编辑一个疏忽,竟把“抗日”排成了“搞日”,一直到报纸上市了才发现。上头老总看见“搞日救亡运动”,抱着脑袋在屋里转圈,心说我们当年确实抗过他们一回,可是我们并没搞他们阿!
Friday, December 19, 2008
Bald Eagle 白头鹰
它越飞越近,才看清楚白色的头 和 白色的尾巴, 原来是只白头鹰.
希望这个景象预示着2009年有个好的开端.
这是我最近距离观赏白头鹰了, 大概十米.
心想这伙计要是攻击我,可麻烦了,赶紧拉近了帽子.
老鹰悠闲地飞进了北边的树林,竟然没有任何表示.
12月15号, 有了 亚马逊 的邮箱, 这下简历好看一些了, 可以靠亚马逊唬人了, 嘻嘻.
Thursday, December 04, 2008
Speaking English 学英语口语和英语面试
这里是我的一个简单解决方案, Simple is beautiful.
Oracle iSupport: 你当时是怎么学习的英语?
Charlie木匠: Watching "Friends", 纽约肥皂剧
Oracle iSupport: 你学了多久?
Charlie木匠: 依然很差, 词不达意
Oracle iSupport: 比如别人要面试我,有没有同样的情景英语?
Charlie木匠: 情景英语: 参考 monster.com
Charlie木匠: 专业 更重要!
Oracle iSupport: 我专业重要。但是表达不好. 问我东,我回答西
Charlie木匠: 英语再好, 比本地人还差一大截
Oracle iSupport: 那肯定了。但最起码得过面试这一关啊。只有给老外干,工资才高些
Charlie木匠: 对头, 到经济最发达的地区.
Oracle iSupport: 呵呵,嗯。那只有北京了。或者国外任何一个发达国家
Charlie木匠: 好了, 包下我一个月的午饭.
Charlie木匠: 找几本外语生活新闻杂志, 每天早晚大声朗读一篇文章.
一个月下来, 准行. 这是以前DoubleBridge老板Joe 教我的.
Friends(老友记) 看3遍
第一遍: 中文字幕
第二遍: 英文字幕
第三遍: 无字幕
只要功夫深(就是)铁杵磨成针
黄天不负你这样的有心人
另外可以参考西安老乡开吻的学习经验:
http://13910841932.spaces.live.com/blog/cns!786C11C2EE11258E!4263.entry?&_c02_owner=1
星期一二傍晚在加拿大和美国可以看到月亮金星木星(Venus,Jupiter)组成的笑脸,可惜维多利亚是阴天.
昨天是晴天,嘴巴(月牙儿)已经跑到眼睛上边高处去了.
Monday, October 27, 2008
过周末autumn weekend
等到了以后,才知道广告车型只剩下一辆,还是老鼠黑色(深青色),
选来选去,中意一个2008款四驱白色和一个2009款前驱大理石色,都是$26,000多, 36个月0%利息,月供$900. 想想眼下糟糕的经济, 最终放弃了.
折腾完了,都两点多了,按照A计划,到红谷仓(Red Barn)农贸市场买了大半个星期蔬菜水果.
为了让岳父岳母快速适应加拿大,我们给很多地名起了中文名, 比如贝壳山,橡树湾,皇家橡树,说给同龄人,他们反而丈二和尚摸不着头脑. 我们住的小区叫链条,更觉古怪.
周日上午顺着新家北面的仙湖(马鹿湖Elk lake)来回走了5公里(转一圈是10公里), 仙湖的名字是西安老乡"开吻"给起的.来加拿大3年多了,坐满了移民监,才开始享受免费图书馆福利,新家紧挨着一个图书馆,就顺便办理个借书证.
周日下午看了一张陈冲的DVD, 一般都是糟蹋中国人, 又一次得到验证.
故事讲的是纽约华人48岁寡妇与20多岁小伙热烈相爱,寡妇怀了小伙的孩子,寡妇的女儿(一个医生)却是个同性恋, 寡妇还喜欢看毛片, 角色们全是华人.
我岳父岳母,一个月走之前讲过,二三十年前他们工作时,每周只有星期天一个休息日,周末就像打仗,拆洗被子,打蜂窝煤,忙忙碌碌一整天,喘不了一口气,比上班还累.
到底社会进步了, 使我们有更多的时间玩耍和娱乐.
Friday, October 24, 2008
Translate root cause "问题根源"分析
http://jonathanlewis.wordpress.com/2008/09/26/root-cause/
标签: 架构, 解难, 幽默
现今有一些(计算机)行业的表达方式惹恼了我 - 不必有一个好的理由,仅仅因为听起来极端的自命不凡,并且被做市场的放到一起. (狂妄自大, moi !)
比如: "问题根源分析","整体全面方法" 等等 - 不过是重复在讲 "我们和别人解决问题的方法是一样的, 但要起一个好听的名字,使人们相信我们做的会更好,更有意义".
每当他们提供这些无价值东西的时候, 我总是喜欢用相反的观点来比较,看看会得到什么印象:
"我们采用全面整体方法" = "别人只看局部"
"我们重点放在问题根源分析上" = "别人不会发现真正的问题在哪里"
像这样, 只是换个说法, 没有任何额外价值. 你渐渐识破他的诡计和谎言.
不过, 我近期看了一篇有才气的问题根源分析. 他是这样开始的:
问题: "为什么我们开始 长时间等待 log file sync(同步写日志文件)?"
答案: "因为经济衰退, 笨蛋."
的确 - 这就是问题根源 (尽管我想引用 克林顿 1992年竞选宣言)
说说他的来龙去脉.
房价下滑(因为经济), 银行紧缩贷款(贷款多数是用来购买房地产)**.就是说他们放慢了贷款申请的处理速度.
贷款申请有四种状态: 新申请,在线处理,批准,拒绝. 突然间很多申请被滞留在"正在处理"状态.
办公室职员上班时间的多数工作集中在"正在处理"状态的申请, SQL 访问请求急剧增加, 使用更多的CPU. CPU负荷增长, 尽管(写)事务量没有变,写日志个数没有变, 日志文件同步的往返信号传输时间就会延长.
因此 - 当房价下滑, log file sync(日志同步)等待时间延长. 这就是所谓的根源分析.
脚注 - 这不是一个有关信息系统的准确描述, 但是经济变化可以影响数据库性能.
** 近期一份时代杂志指出, 银行相互竞争, 看谁能给出最低的交易.
大概因为他们不得不继续发放贷款, 在市场上继续生存, 而不愿被别人摘牌(收购).
经济危机
[09:34] 队长: 还没感觉到
[09:34] 队长: 你那情况如何
[09:35] 木匠: 这个月, 才开始, 加拿大慢一点, 1~2 年滞后
[09:35] 队长: 那慢慢熬吧
[09:35] 队长: 不成就回来躲几年
[09:36] 木匠: 一个可选项,
[09:36] 木匠: 不过国内也不好过了, 大批南方工厂关门大吉
[09:37] 队长: 说实话国内情况也不会好
[09:38] 木匠: 或者休假, 或者再教育
[09:38] 队长: 年纪大了, 再教育不动了
[09:39] 木匠: 没啥好招了
[09:39] 队长: 睡觉去了, 改天聊
上下文注解:
木匠 在加拿大一家书店工作,刚刚被亚马逊收购. 预计2009年图书销售会下降40%.
队长 在国内思科工作.
昨天跟老朋友Chao也聊了好久,他那里情况同样不容乐观.
由于涉及到一些心情文化隐私, 就不发表了.
一介小民,难以回天,帮一个算一个.
Sunday, October 19, 2008
Amazon DBA team info exchange 书店DBA技术交流
(Amazon上个月收购了我们公司AbeBooks, 下文详解)
我其实想问问 西雅图(Seatle)那边的DBA市场, 当时人多, 没有好意思问.
听说维多利亚这边一些华人去了微软,那边生活成本低,房子便宜,收入又好,去的人基本不打算回来了.
希望以后人员交流, 派我过去工作几个星期.
维多利亚(Victoria)距离西雅图比较近, 隔着欢德福卡海峡(Strait of Juan de Fuca),坐船一个小时.
内容如下,
*) suggest move away from RAC for OLTP database, remove one big central database, function split to many small databases, Amazon got 100+ databases.
- Cluster ware down, database down
- one instance hang, database hang
- painful global lock control
- Lot’s of issues with RAC
# Add database file make RAC database hang (happened in Amazon)
# enq-US (undo segment management) cause slow Global cache/message transfer
*) Suggest Open source Linux over other Unix
*) Suggest cross platform and cross Oracle version standby database to help upgrade, will check the configuration certification to confirm it.
*) Suggest batch commit (SQL> COMMIT BATCH NOWAIT) for Inventory data loading row-by-row auto commit jobs
*) Oracle Active Data Guard Option enables real-time read-only access to a physical standby database to offload queries, sorting, reporting, web-based access,
*) Enable fast-start failover to fail over automatically when the primary database becomes unavailable, proven stable,
we’ll implement above 2 options after upgrade to 11.1.0.7 in 2009 spring.
亚马逊的OLTP数据主要跑在10.2.0.4, 他们对11g第一个补丁集还不够放心.
今日提示: 来自 Pythian Group Blog » Log Buffer #119
Oracle 刚刚发布是早期Data Modeling工具, 这里下载, modeling download
main data modeling page: Modeling
Friday, October 17, 2008
2009 OOW
终于领导建议并批准我明年前往, 暗自窃喜.
这里是预算, 去过的DBA同行, 看看够不够?
Oracle Openworld Conference 2009
a. Conference Name – Oracle Openworld Conference 2009
b. Conference Date –Oct 11-15, 2009
c. Number of Attendees – 1 x Dev - Charlie
d. Conference Cost - $2600 US
e. Flight Cost - $1000 – Estimated
f. Hotel Cost - $1200 – Estimated
g. Taxi Cost - $200 – Estimated
h. Meals - $250 – Estimated
另外咱非常喜欢红色的边境牧羊猎犬(Border Colli), 原以为维多利亚就能找到培育场,
偶然碰到公园玩耍的(Border Colli)狗友介绍, 需要远道 拉斯维加斯 才能够拿到优良品种的幼犬, 近一点也要到多伦多, 而且价格高,质量差.
所以这一趟还可以顺便接回几只小狗.
Wednesday, October 15, 2008
成功投标 win bid project
这是今年接到的第三个项目, 可以帮助我完成年收入增加25%的目标(经过矫正, 以前是+100%),
咱的小时工资又涨了,这次是$90,逐步靠近$120每小时的理想时薪. ^_^ :)
该项目主要研究美国和加拿大西海岸海底生物,以后会补上他们的网站地址.
下面是标书节选
- a total of ##hours of Oracle expert consulting.
- on-site support of our systems team for setting up and configuring Oracle 11g servers for high availability, including replication to an outside system and performance optimization for the type of data we are storing
- other technologies in which the consultant should be proficient include: storage use strategies, partitioning, warm-standby and replication using DataGuard or other systems
- provide basic Oracle 11g on-site training to developers and DBA.
下篇预告, 翻译老刘的 "Root Cause"
Tuesday, October 14, 2008
Victoria IT Club 维多利亚IT俱乐部 节目单
10月18日,本周六的知识共享主题是: 可扩展性网站架构
-- 之 如何构建一个低成本线性扩展的数据库系统.
-- To scale the transactional throughput of a web-based system.
11月主题: 爬山 Mount. Finlayson, 体力差的,观赏三文鱼洄游.
12月主题: TDD(Test Driven) and QA自动化, 正在寻找主讲的志愿者, ...,欢迎您主讲.
-- 报酬: 木匠 请您到 温哥华 Richmond 老四川 暴食.
有钱的捧个前场,没钱的捧个人场. ^_^.
Victoria IT Club hold free IT Seminars on 3rd Saturday 2:30pm every month at
EBC church second floor meeting room. After each seminar we'll play
basketball at Church Gym. www.ebcvictoria.ca
Address: 2121 Cedar Hill Cross Rd.
p.s. 参考:
1) BASE: An ACID Alternative
http://acmqueue.com/modules.php?name...owpage&pid=540
2) Scalability Best Practices: Lessons from eBay (Partition and Asynchronously)
http://www.infoq.com/articles/ebay-s...best-practices
*) 老朋友 Fenng 的 系统架构方面的文章汇总.
http://www.dbanotes.net/arch
3) 金鱼溪
http://www.goldstreampark.com/
Monday, August 25, 2008
老妈的创业故事
以下引自我老爸的另外两封家信.
<< 这个邮件专说你妈。 昨天是星期天,我们两人去洛南玩了一天。洛南最北边的巡检镇有个老君山,处华山之阳,数峰并立,山势陡峭,墨绿青翠。传说道教鼻祖老子曾在此活动。我的看法,洛南县相学商南县造金丝峡、山阳县造月亮湾旅游景观一样,和一外地人签约,合伙开发。眼下开发公司成立,在商洛市区办公。工程已经启动,理想远景不次,登山道路草成。同行的30几个人,包了5个面包车,两个小时行程,9.30到达,稍事休息,10点登山,午时到顶峰,个把钟头下山。中午美餐一顿,5点到家。你妈参与了这公司,每天上班,月薪600。景点下有泉水流出 ,他们想办个饮水厂,将来生产饮用水。你老妈现集资5000,憧憬着以后捞个大元宝。当然呀,不用说我这次去,还是沾了你妈的光。她还向我吹嘘,过几天还有去河南南阳机会。我这个家属当然等待着这“宝贵时刻”的到来! 你老妈花甲之年已过,仍雄心壮志,似有魏雄曹操诗“烈士暮年,壮心不已。老骥伏枥,志在千里”之心!也好。人活着就得有个事干,总比无所事事好。 (上午你来了电话,我到河里洗衣服去了。昨天上山出了几身汗,那个路呀,好几处用壁立形容不为过。想象做成水泥台阶之坚啦!) 前一所告,洛南县的老君山景点在华山之阳,规划两景点修一条公路,游了华山,顺便就到了老君山,它的远景许是可观的。老白集资一万,签订半年合同,也参与其内,成了那个公司的一名员工,宣扬集资,往返洛南,每天忙个不停。曾因登山得奖200元,上月奖金收入一千多元,不说那几百元工资了。然她这山望着那山高,前一阵经熟人绍介,已经面试,想到西安南郊某酒店当大堂经理,工资千多,加奖金月收两千多,住有一间小室,吃就包了。对她来说,这无疑是很诱人的。但是,违约自退,集资不给,损失也是够大的;酒店答应给补5000,自损一半。后经请教别人,还有我的“训示”,西走的念头慢慢打消了。现“安”下心来,到旅游公司上班。 商洛学院已放假,女子却忙着改卷子。咸阳地区的中考试卷商洛包了,大概再有四、五天结束。她还准备到上海、苏杭一游,学校组织的。都很忙,就我闲了。 >>
嘻嘻, 咱老妈也要做大堂经理啦. 以后路过西安住店, 遇到麻烦事,就找老妈投诉好了.
老爸的奥运评论 结局篇
16天的奥运盛事,昨天晚上落下了帷幕。不管是开幕式,还是闭幕式,异常精彩。这,也许因为我们是中国人,很欣赏东方的文化,然国际奥委主席罗格先生称本届奥运“无与伦比”,废弃了以前俗气的赞扬。昨天下午2.30,美国对西班牙的男篮决赛,更是引人入胜,是我多年来未欣赏到的一场经典之战,也算是无以伦比吧。16天,加上开幕式,有半个来月,我每天上午、下午、晚上观赏不止,精彩之处赏心悦目,但也确实累了,我将用两三天休息弥补之。
明天就是你的生日了,女子中午吃饭时还在述说。我,就以奥运会的圆满结束这一盛事,聊以记之。
Thursday, August 14, 2008
老爸的奥运评论 - 续1
由于在加拿大看不到中央台奥运会直播, 老爸就在中国想评论,然后Email给我看.
Wednesday, August 13, 2008
我老爸的奥运会评论
昨天看了两场比赛。上午10点开始的男团体操决赛,中国队的表演真是美轮美奂,令人叹为观止。内中有个四川的小子,个头不高,年龄不到20,是个新秀,表现尤为出色。当然啊,中国获得了金牌,洗雪了上届雅典奥运会的逊色。另一场是下午中国对阵西班牙的男篮预赛。这次奥运中国男篮抽签运气不好,组内有美国、西班牙、德国强手,稍次的安哥拉,也虎视眈眈。头一场就对阵天字号美国队,开场还可,不用多说是会输的,但打出了点气势。中西对赛真是好看,中国一反前态,一直压着西班牙打,到了最后几分钟,它才超了几分,但终场打了平手。中国队员使尽了力气,5分钟加时赛才输了球,犹如解说嘉宾所言,虽败尤荣。
Friday, May 16, 2008
买房记 第二年
中国又是藏独,紧接着地震,人灾天灾. 还要靠信心毅力坚持把奥运办好,这是我们祖国由懦弱到富强的转折点.
( 我淮河(岳母)也是第一次在中央台见到雪山狮子旗, 作为土生藏族人, 从不知道有这么个蓝色旗子存在. )
木匠的大年撞上了加拿大经济形势的小年,该冒进,还是稳守,不好判断. 以后有机会再介绍人生大小年定律.
说到移民, 理想生活景象是: 一个房子两辆车, 两个孩子一条狗.
说到买房子, 经历了2007年的屡次挫败, 步入2008年春夏之交, 终于全家老小又大力投入了买房子斗争当中.
由于经济形势在变差, 昨天吃完饭时问及泰山泰水(岳父母), "买涨还是买跌", 泰山答道, 通常人们都在追涨买涨,只有慧眼有远见之士会买跌. 因此我们也加大砍价力度,一口气压下5万,屋主竟然答应了.
作为家庭第二主力,马上开足马力,花了整晚时间浏览小区委员会给的3年维修记录,
谁家门口台阶楼梯加个扶手, 哪家延伸木板凉台, 哪家浇水喷头坏了,哪家修篱笆,哪家种树预防高尔夫球砸碎窗户 等等.
最有意思的是我们要买的58号, 从头到尾在说一件事情,就他家的Staffordshire terrier狗.
比如说拉屎不清理,毁坏草坪,吠叫,恐吓居民, 结果被小区居民控告举报, 而且举报内容非常详细,包括年龄,性别,品种,尺寸和重量,一一写进小区委员会例会记录里面. 老加(加拿大人)真是实诚.
最重要的是,新屋近靠Commonwealth Pool, 郭晶晶曾在这个池子里跳过水. 本木匠酷爱游泳,曾梦想横渡长江,可惜长江水污染日趋严重,随后放弃了.等日后清理干净了,再畅游.
身体是革命的本钱, 各种人生长短期宏伟目标,都要依赖一个健康的身体.
等我们搬进了新屋,再续生活感受.
Monday, April 28, 2008
2008的职业转换 Work from home
Tom 很久没有更新博客了, 我也是, 在等待灵感. "Was waiting for inspiration I guess".
自从接了老客户的电信数据仓库项目,Work from home, 开始part time Remote DBA顾问工作.
更是少了时间与本地社区,Oracle社区分享生活与工作的乐趣.
还记得跟AnySQL谈起Oracle DBA consultant在美国的行情, 普通在$85~$120每小时, 卓越的DBA加上RAC服务会达到$200~$350每小时. AnySQL还就这个主题发了一篇贴子,并且没有声明出处,令我不快,嘻嘻!
去年底和客户谈工钱时,考虑的新职业起步,就自砍一刀,报了个最低价$80, 结果客户还嫌贵,硬要和老印的外包价格比较,也就是$25一小时, 顿时令我很伤心, 咱木匠起码也是北美地区Top N的拔尖DBA, 在维多利亚在这个偏僻小镇,做着$##每小时的全职工作, 好赖也相当于硅谷,纽约的17万年薪了. 咋能这么贱买了呢?!!...
最后还是以低于$80的价格成交. 等干两个月,客户发现了我的价值以后,再从新议价,只能如此了.
在译言(http://www.yeeyan.com/)看了一篇如何制定目标和计划的文章,很受启发.
写下今年的目标:
*) 搜寻到3个以上客户, 动态平衡,旱涝保收.
*)年收入增加一倍.
后来跟领导和加拿大智囊一合计, 已经调整到50% 啦.
*)多爬山,多进球,多游泳(这周就开始,每周两次)
Tuesday, February 05, 2008
在维多利亚Oracle用户组学到的东西
组织的技术交流活动. 题目是 Database Gems: 9i, 10g, and 11g.
VicOUG 请来了著名Oracle 技术网站的http://www.psoug.org/的作者: Dan Morgan,
--最常用的是 Morgan's Library http://www.psoug.org/library.html, 可以找到各种语法和函数用例.
这个伙计自称因为人员好, 被评为Oracle Ace Director.
言归正传, 以下是我学到的3点,
1)
ALTER SYSTEM SET PLSQL_WARNINGS='ENABLE:ALL';
建议在所有的开发(Development)及测试(Test)环境设置.
有啥好处呢? 编译PL/SQL的时候,给出有用的警告信息.
a) 严重问题, 比如参数混淆 (这点我还没有理解, 需要一个示例)
b) 性能问题, 一个INSERT语句,传递一个VARCHAR2值给一个NUMBER列
c) 提示信息, 比如有一段代码 永远不会被执行
详细说明, 请参考:
Oracle® Database PL/SQL Language Reference
11g Release 1 (11.1)
- 第十一章: 11 Handling PL/SQL Errors
-- Overview of PL/SQL Compile-Time Warnings
2)
wmsys.wm_concate
你可以Sum() 数字列, 也可以 Sum() Varchar2 字符串列,
我们叫作String Aggregate, 以后会有一长篇文章介绍.
这里有一个示例, 自己在 SQL*Plus 或者SQL Developer里面跑一下吧,
select DEFAULT_TABLESPACE,
translate(wmsys.wm_concat(username),',','|')
from dba_users
group by DEFAULT_TABLESPACE;
3)
FBI index, virtual column index and SHRINK clause
有个听众提个问题, 说在10.2以下版本, 有Function Based Index的表不能做空间回收-Shrink.
Dan Morgan这位老大自己没测试过, 随口就说11g上,在一个表的虚拟列上的构建索引,这张表可以Shrink, 岂不是犯了和 老旦一样的错误.
(老旦:Dan. 你们都知道是谁, 曾被老刘 Lewis 严肃的教育过, 以后有另外一篇文章评论,关于PGA 和 Parallel execution)
第二天到办公室一测试, 发现11.1也不行.
以下是测试用例:
--drop table scott.y1;
create table scott.y1(sal number, comm number);
drop index scott.yi_fbi1;
create index scott.yi_fbi1 on scott.y1(sal + comm)
--tablespace data_auto
;
alter table scott.y1 enable row movement;
alter TABLE scott.y1 shrink space compact;
alter TABLE scott.y1 shrink space;
ERROR at line 1:
ORA-10631: SHRINK clause should not be specified for this object
drop index scott.yi_fbi1;
alter table scott.y1 add (income AS (sal + comm));
drop index scott.yi_vi1;
create index scott.yi_vi1 on scott.y1(income);
alter TABLE scott.y1 shrink space;
ERROR at line 1:
ORA-10631: SHRINK clause should not be specified for this object
Sunday, February 03, 2008
在加拿大给美国客户远程工作, 相关流程总结
如果你是搞IT系统维护或开发的,这样的话VPN远程接入美国客户应该是通常的手段了.至于远程会议等要看对方要求了.一般公司都有WEBEX之类的.
填一份 W-8BEN表格, 给美国客户寄去 备案, 就行了. 美国客户/雇主就可以开始给你付工钱了. (如果在美国工作, Independent Contractor 需要填w9 form)
另外,对方有可能要求签一个安全保密协议, Non-Disclosure-Agreement.
如果你觉得有必要, 再跟美国雇主签一个Offer(工作合同)
美国公司如何支付工钱: 美国公司 "电子转帐或寄支票" 来 支付工钱
纳税:
1) 美国缴税 - 不用
问过会计师了 无需向美国缴税
刚刚打电话,问了会计师, 确认不用向美国缴税.
下来就是明年报税, 找会计的问题了.
加拿大居民/公民, 不用给美国缴税.
If you perform the service from Canada, the income is not US source of income and is not taxable by US government.
http://www.irs.gov/businesses/small/...=96459,00.html
A nonresident alien (NRA) usually is subject to U.S. income tax only on U.S. source income.
http://www.irs.gov/businesses/small/international/article/0,,id=96459,00.html
Nonresident Aliensa
A nonresident alien usually is subject to U.S. income tax only on U.S. source income.
http://www.irs.gov/publications/p519/ch02.html#d0e1779
如果你是美国公民, 绿卡持有人,
根据w8 form 指南, 美国客户(Payor)会预先扣缴 30% 的税
See: http://taxes.about.com/od/taxplanning/qt/form_W8BEN.htm
>>
2)加拿大缴税
如果是 Independent Contractors, 交加拿大这边的30%~50%的个人所得税.
注册公司:
年收入在$30,000以下, 不需要在加拿大注册公司.
(我个人觉得, 20万以下, 都不需要成立公司)
注册个公司很容易,拿着公司注册号去开个银行帐号,然后就等对方电子转帐或寄支票了.
http://www.smallbusinessbc.ca/bizResources-name.php
http://www.bcbusinessregistry.ca/introduction/index.htm
财务税务最好找个专业会计师.一年千把来块钱的开支,都可以打入公司运营成本, 还可以要回美国预扣的30%的税钱, 提交Form 8233.
如果你恰好组织BC省府维多利亚市,我还可以给你介绍一个有这方面经验的华人专业会计师.
也可以参考
华枫论坛> ◆主题论坛◆> 创业者俱乐部.
http://www.chinasmile.net/forums/showthread.php?t=303814
下面是一些英文原文资料摘要:
US Withholding for Canadian Independent Contractors
Using Form W-8BEN to Claim US-Canada Tax Treaty Benefits
American companies generally withhold income taxes on income being paid to foreign nationals. You may qualify for reduced withholding if meet some rules. Basically, there are three steps to this process. First, you must clarify in which country you are a resident. Second, you must decide where your "fixed place of business" is located. Third, you must notify your clients of your tax status using Form W-8BEN.
Withholding
The tax treaty specifically allows for US companies to withhold income taxes on self-employed Canadian residents (Article XVII, paragraph 1). Withholding will be 10% on the first $5,000 of income, and 30% on income over that threshold. The client and independent contractor may agree on a lesser percentage of withholding if these amounts are considered "excessive" (Article XVII, paragraph 2).
Normally, US companies are required to "withhold 30% of any payment of an amount subject to withholding made to a payee that is a foreign person" (Instructions for Form W-8BEN). Form W-8BEN is used to inform the US company that you are "a beneficial owner that is a foreign person entitled to a reduced rate of withholding." You qualify for a reduced rate of withholding if you meet the residency and fixed place of business rules
Filling out Form W-8BEN
Provide your name in Line 1 and check "individual" in Line 3. However, if you are working under a business name, provide your business name in Line 1 and check the appropriate type of entity in Line 3.
See: http://taxes.about.com/od/taxplanning/qt/form_W8BEN.htm
Claiming Tax Treaty Benefits
Exemption From Withholding
If a tax treaty between the United States and your country provides an exemption from, or a reduced rate of, withholding for certain items of income, you should notify the payor of the income (the withholding agent) of your foreign status to claim the benefits of the treaty. Generally, you do this by filing Form W-8BEN, Certificate of Foreign Status of Beneficial Owner for United States Tax Withholding with the withholding agent.
Rules that Apply to Compensation for Personal Services
Independent contractors. If you perform personal services as an independent contractor (rather than an employee) and you can claim an exemption from withholding on that personal service income because of a tax treaty, submit Form 8233 to each withholding agent from whom amounts will be received.
See: http://www.irs.gov/businesses/small/international/article/0,,id=96438,00.html
Instructions for the Withholding Agent
Requirement To Withhold
A withholding agent must withhold 30% of any payment of an amount subject to withholding made to a payee that is a foreign person unless it can associate the payment with documentation (for example, Form W-8 or Form W-9) …
Responsibilities of the Withholding Agent
If you are a withholding agent making a payment of U.S. source interest, dividends, rents, royalties, commissions, nonemployee compensation, other fixed or determinable annual or periodical gains, profits, or income, and certain other amounts (including broker and barter exchange transactions, and certain payments made by fishing boat operators), you are generally required to obtain from the payee either a Form W-9, Request for Taxpayer Identification Number and Certification, or a Form W-8. These forms are also used to establish a person's status for purposes of domestic information reporting (for example, on a Form 1099) and backup withholding. If you receive a Form W-9, you must generally make an information return on a Form 1099. If you receive a Form W-8, you are exempt from reporting on Form 1099, but you may have to file Form 1042-S and withhold under the rules applicable to payments made to foreign persons. See the Instructions for Form 1042-S for more information.
Generally, you must withhold 30% from the gross amount paid to a foreign person unless you can reliably associate the payment with a Form W-8. You can reliably associate a payment with a Form W-8 if you hold a valid form, you can reliably determine how much of the payment relates to the form, and you have no actual knowledge or reason to know that any of the information or certifications on the form are unreliable or incorrect.
Do not send Forms W-8 to the IRS. Instead, keep the forms in your records for as long as they may be relevant to the determination of your tax liability under section 1461. Use the information on Forms W-8 to prepare Forms 1042-S.
See: http://www.irs.gov/instructions/iw8/ch01.html