2010-03-14 Sun
赞助的图书包含三种,一本是我们的新书《Oracle DBA手记》、一本是陈吉平的《构建Oracle高可用环境》、第三本是李笑来的《把时间当作朋友》。
Piner的书出版1年多来重印多次,是一本不可多得的好书,也是Oracle DBA们必备的案头书;而笑来的《把时间当作朋友》则是帮助我们开启心智,了解自我的一本好书。
我们的《Oracle DBA手记》则还需要时间的考验。
感谢博文视点,感谢周筠老师对我们活动的支持!
这些书会分几次在我们的活动中送出,我们也欢迎其他赞助!
-The End-
相关文章|Related Articles
- 《深入浅出Oracle》一书的电子版下载
- 《Oracle DBA手记》- 第二章PDF版本下载
- 《Oracle DBA手记》一书到货上架
- IBM小型机的内存deconfigured - 数据库之风险
- 《Oracle DBA手记》一书勘误表
评论数量(0)|Add Comments
本文网址:http://www.eygle.com/archives/2010/03/acoug_broadview.html
有天下班,我跟盖小咪说,妈妈上班很累啊,盖小咪说,外公上班也很累的。
有天下班,盖小咪故意在床上尿尿,把棉被弄湿了还乐哈哈地告诉我他尿裤子了,我很生气,说,四月你就上幼儿园吧!盖小咪不吱声。夜晚他拿出小书包,幽幽地跟我说:妈妈,我要上学了,这是一条毛巾,我可以用来擦汗,还可以擦眼泪,你帮我收好吧。弄得我哭笑不得。
有天盖小咪调皮,剪了外婆一大束头发。又继续调皮,外婆打了盖小咪屁股,盖小咪突然安静下来,扭过头看着他外婆说:我以为你不会打我的!
我问盖小咪:你喜欢爸爸还是妈妈?盖小咪毫不犹豫地说:爸爸。我问,如果只有一个苹果,你给爸爸还是妈妈?盖小咪说:给爸爸,你吃橙子吧。
盖老咪没回家吃晚饭,盖小咪问:爸爸是不是去了酒店吃饭?
盖小咪刚睡醒,心情不好,哭着不去餐馆吃饭,我就假装说,好吧,我跟你留在家吃饭,让爸爸自己去吧,盖小咪哭了。
临出门,盖小咪问:带不带肥猪去?于是我们让他带上一黑一白两只玩具猪,进了电梯,盖小咪就把肥猪扔在地上,他说:让他们自己走吧。
盖小咪便便后说:我的便便真漂亮。。。
我拿着盖老咪风流倜傥的年轻时的连着的两张证件照问盖小咪知不知道这是谁,盖小咪很认真地说:这是两个搬东西的人。盖老咪伤自尊了,说,他可能以为是John。。。-_-
盖小咪喜欢穿黑色的衣服,他说这样很酷。
最近在努力给盖小咪找合适的幼儿园,晚上要逼他学习,盖老咪教三字经,我负责诗词赏识和英文单词,好累啊。
盖小咪回来北京前,元宵节,外公外婆带盖小咪去了番禺野生动物园,盖小咪回家给我打电话,细数他见到的动物,我赶着下面条,于是让盖老咪接电话。盖小咪问:妈妈呢?盖老咪转移话题,盖小咪很坚定地问:妈妈呢?于是我跑出来接电话。盖小咪质问我:妈妈,你是不是很忙啊?我支吾着,盖小咪又来了一句:妈妈你很忙是不是?问得我直冒汗。

妈妈和盖小咪都是第一次看雪,准确地说,是盖小咪懂事以来第一次看雪。盖小咪很开心,他说,雪很凉的。盖小咪常常要盖老咪陪他都楼下铲雪,不过听到鞭炮声,盖小咪就要求回家。
盖小咪因为草莓事件跟盖老咪对抗 P.S.这条裤子是盖小咪的干妈妈Hannah买的,很柔软很柔软,这么贵,我肯定不舍得买。
今天盖小菊和丰丰来家里玩,盖小菊给盖小咪买了一套很漂亮的衣服,好贵,我又是肯定不会花这个钱给盖小咪买衣服。
绿色的上衣+牛仔裤,很In。盖小咪不肯试穿,盖小菊一离开,盖小咪就说,我以后要穿这套衣服上班。于是我们给盖小咪换上新衣服。

盖小咪总要抢我的相机,本来我们一家三口每人一台,他就喜欢LX3, 镜头印满盖小咪的指纹,还磕磕碰碰,好心疼。



2010-03-13 Sat
作者:Fenng 发布在 dbanotes.net.
今天到医院拔掉了一颗让我困扰已久的智齿,现在还有点迷迷糊糊的发烧。整个过程比我想象的顺利得多,一下子如释重负的感觉。有朋友说,拔牙会影响记忆力,如果真是这样,那现在应该多写一些东西,以便在遗忘后还能让我回忆起往事。
时间真的是快,2005 年的今天,我来杭工作。那时候牙齿应该都还好好的,最起码第一年体检的时候没什么毛病,经过五年的爬摸滚打,没想到事业不立,这追随我的牙齿兄弟就已经开始掉队了。我要把我的牙扔到楼下去(这是我们老家的风俗,上牙往下扔),老婆对我说,你以为还能象小孩子那样再长出来一颗啊? 是啊,我再不可能长"智慧"了啊。
我以前从没想过会在这个城市生活这么久,杭州"离天堂太近",仍旧无法让我喜欢。这城市不停的有人来,不停的有人走。最近就有一个朋友要离开杭州去创业了,,不知道什么时候开始,"创业"这个词对年轻人有挥之不去的吸引力,我认识的一些朋友,不在创业,就是在准备去创业的路上。可看看这整个商业环境,还是挺令人寒心的。不过,千军万马,总有人杀出血路。
再过几天,我在阿里巴巴集团旗下支付宝的工作就满五周年了。在阿里巴巴,五年陈员工,会有一枚定制的戒指。五年,就这样告一段落。或许,我该记录一下过去的那些痛并快乐的日子作为纪念.....
--EOF--
最近文章|Recent Articles
本站赞助商:豆瓣网
评论数(12)|添加评论 | 最近作者还说了什么? Follow Fenng@Twitter
本文网址:http://www.dbanotes.net/mylife/Five_years_at_hangzhou.html
DBA Notes 理念: 用简约的技术取得最大的收益...
2010-03-12 Fri
作者:Fenng 发布在 dbanotes.net.
最近 Twitter 和 Digg 的技术团队都放出话来说要从 Mysql + Memcached 的组合迁移到 Cassandra 环境(Refer 1、2),这些消息又会让不少人跃跃欲试,恨不得也把自家网站迁移到 Cassandra 下面过把瘾,我相信有些公司的团队又要言必称 Cassandra 了。
Twitter 和 Digg 对数据存储引擎的需求相当独特:写操作密集,基本无修改需求,读操作则多数是分散多次读取汇总展示(想象一下你 Twitter页面上同时显示好友们的 Tweet 内容)。对 MySQL 来说,Sharding 后几乎是被当作简单的存储引擎来用的,即使是加上 Memcached ,对数据读取开销相当大(Refer),因为这时候即使是最合理用索引,I/O开销也不是最优的--走的是索引范围扫描嘛。Cassandra 则相当于预存了计算结果,这要得益于其 Flexible schema 特性,按照既定规则写入,读取直接取预排序的范围键值结果(这其实是偏 OLAP 的应用,而非 OLTP)。
Twitter 和 Digg 这两家网站的数据结构其实并不复杂,尤其是 Twitter ,相当的简约(当然并不简单)。或许有人说,把 Cassandra 开源的 Facebook 不也在用呢吗 ? Facebook 数据结构不复杂么?没错,Facebook 数据结构很复杂,不过使用 Cassandra 的场景其实和 Twitter / Digg 几乎一致的---只是用在 inbox 这个地方的数据处理而已。
不要迷恋 Cassandra ,如果应用场景不合适,那么对你来说永远都只是个传说。。
--EOF--
最近文章|Recent Articles
本站赞助商:豆瓣网
评论数(9)|添加评论 | 最近作者还说了什么? Follow Fenng@Twitter
本文网址:http://www.dbanotes.net/arch/cassandra_myth.html
DBA Notes 理念: 用简约的技术取得最大的收益...
在Oracle10g之后,提供了DBMS_ADVANCED_REWRITE包,具有强大的查询重写功能,可以让我们在数据库层面实现很多微妙的调整。假设我们有一个应用,但是现在无法直接修改应用程序的编码,但是又想能够让应用程序的某些SQL产生我们想要的变化,那么就可以使用DBMS_ADVANCED_REWRITE包。
drop table t; create table t as select object_id,object_name from dba_objects; drop table t1; create table t1 as select object_id,object_name from dba_objects where 1=0;
SQL> select count(*) from t;
COUNT(*)
----------
16636
SQL> select count(*) from t1;
COUNT(*)
----------
0
现在我们有表T和T1,表结构相同,但是表T中有1.6万记录,而表T1中没有记录,如果说我们的应用中有一个SQL多次地查询表T的总记录数,占用了大量的CPU和逻辑读,而这样的count记录数又是完全没有用处的,但是我们无法修改应用程序去掉这个SQL,那么我们就可以通过DBMS_ADVANCED_REWRITE包来讲查询表T的SQL转变为查询表T1,这样就大大减少了这条SQL的逻辑读。
首先DBMS_ADVANCED_REWRITE包的执行权限必须显式赋给需要的用户。
CONN sys/password AS SYSDBA
GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO kamus;
CONN kamus/password
BEGIN
SYS.DBMS_ADVANCED_REWRITE.declare_rewrite_equivalence (
name => 't_rewrite',
source_stmt => 'SELECT count(*) FROM t',
destination_stmt => 'SELECT count(*) FROM t1',
validate => FALSE,
rewrite_mode => 'TEXT_MATCH');
END;
/
然后需要设置会话层面的QUERY_REWRITE_INTEGRITY参数,该参数默认值为ENFORCED,表示只有重写后的SQL输出结果跟原结果完全一样时,查询才会被真正重写,在这里需要修改为TRUSTED。
SQL> ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED;
SQL> set autot on
SQL> select count(*) from t;
COUNT(*)
----------
0
Execution Plan
----------------------------------------------------------
Plan hash value: 238181912
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 |
| 1 | VIEW | | 1 | 13 | 2 (0)| 00:00:01 |
| 2 | SORT AGGREGATE | | 1 | | | |
| 3 | TABLE ACCESS FULL| T1 | 1 | | 2 (0)| 00:00:01 |
----------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
417 bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> ALTER SESSION SET QUERY_REWRITE_INTEGRITY = ENFORCED;
SQL> select count(*) from t;
COUNT(*)
----------
16636
Execution Plan
----------------------------------------------------------
Plan hash value: 2966233522
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 22 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 16639 | 22 (0)| 00:00:01 |
-------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
69 consistent gets
0 physical reads
0 redo size
420 bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>
可以看到在重写之后,执行计划中显示直接去查询表T1,而consistent gets也从查询表T需要的69减少为3。
可以从[USER|ALL|DBA]_REWRITE_EQUIVALENCES视图中获得查询重写的信息。
SQL> select * from user_rewrite_equivalences; OWNER NAME SOURCE_STMT DESTINATION_STMT REWRITE_MO ------ ---------- ------------------------- ------------------------- ---------- KAMUS T_REWRITE SELECT count(*) FROM t SELECT count(*) FROM t1 TEXT_MATCH
DBMS_ADVANCED_REWRITE包也有限制,不可以重写牵涉到SYS用户对象的SQL。
drop table t1; create table t1 as select * from all_tables where 1=0; SQL> BEGIN 2 SYS.DBMS_ADVANCED_REWRITE.declare_rewrite_equivalence ( 3 name => 't_rewrite', 4 source_stmt => 'SELECT count(*) FROM all_tables', 5 destination_stmt => 'SELECT count(*) FROM t1', 6 validate => FALSE, 7 rewrite_mode => 'TEXT_MATCH'); 8 END; 9 / BEGIN * ERROR at line 1: ORA-30354: Query rewrite not allowed on SYS relations ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 29 ORA-06512: at "SYS.DBMS_ADVANCED_REWRITE", line 185 ORA-06512: at line 2
在测试中,如果destination_stmt中包含SYS用户对象,是可以成功创建查询重写的,但是在执行SQL的时候却会报ORA-03113错误,后台出现ORA-07445错误,无法正常执行。
SQL> BEGIN
2 SYS.DBMS_ADVANCED_REWRITE.declare_rewrite_equivalence (
3 name => 't_rewrite',
4 source_stmt => 'SELECT count(*) FROM t1',
5 destination_stmt => 'SELECT count(*) FROM all_tables',
6 validate => FALSE,
7 rewrite_mode => 'TEXT_MATCH');
8 END;
9 /
PL/SQL procedure successfully completed.
SQL> select * from user_rewrite_equivalences;
OWNER NAME SOURCE_STMT DESTINATION_STMT REWRITE_MO
------ ---------- ------------------------- ------------------------- ----------
KAMUS T_REWRITE SELECT count(*) FROM t1 SELECT count(*) FROM all_ TEXT_MATCH
tables
SQL> ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED;
Session altered.
SQL> select count(*) from t1;
select count(*) from t1
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 8360
Session ID: 135 Serial number: 22









