时间的鸟羽,不会被无情沙暴的晦暗遮蔽、折断。(我相信,在这个世界上,任何一个糟糕的句子,它的晦暗都不能无情地遮蔽、折断它所要表达的意思的鸟羽……)
时间,是一棵树,生长在祖国的庭院。(外国的庭院里只有空间:一个个黑洞)穿透夜之躯壳,光芒在这个时代的帷幕下璀璨呈现。
2008北京奥运结束了历史的一个轮回。面对苍凉世纪,信心又一次战胜屈辱(信心战胜的,应该是怯弱。战胜屈辱的,好象应该是荣耀……)。历史的征程仍在持续,岁月的刻痕,又让苍老的记忆焕发青春。(岁月在记忆上划了一刀,记忆一疼,就焕发了青春)全世界的海洋,第一次向中国开敞。(好吧。)
还有,太空行走的神奇。旧的边疆已被打碎、丢弃。随之而去的,是消失在辽远、空旷土地上的那些年代。新的边疆,展现在勇敢者的脚下。几千年来的神秘地图,在我们眼中发生变化。陆地从此变成宇宙的地板(微尘一般的地球,为茫茫宇宙这间上下无边的房子铺好了地板。“事情就这样成了”。)……是啊,“不管我们是否寻求,新边疆已在这里……未知的科学及太空领域,未解决的战争与和平问题,未被克服的愚昧和偏见,未找到答案的贫穷和富裕问题……”(既然你对自己的话这么激赏……)
从汶川找回,曾经弃置路边的最美好的人和事。充满困惑的年代,渐渐抛在身后。(刚找回一点东西,又把“困惑”这种美好的事物弃置到路边了)生活中最本真的东西,回到我们当中。这一年,我们纪念改革开放30周年。30年来,我们建设了一个举世瞩目的伟大经济。在物质生活的所有方面,国家都拥有空前的财富(好吧)。告别了普遍的苦难、尖锐的对抗,告别了曾经有过的最严峻的考验,时代精神的陀螺仪上,如今镌刻着古老而又年轻的自信。(陀螺仪原理:一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。人们根据这个道理,用它来保持方向,制造出来的东西就叫陀螺仪。我们骑自行车其实也是利用了这个原理。轮子转得越快越不容易倒,因为车轴有一股保持水平的力量……)
下一个30年的大屏幕正在开启,我们即将迎来建国60周年的华诞。
我们的领袖如今在世界的讲坛上宣讲着大国崛起的庄严承诺。金融海啸过后的堤岸上(原来金融海啸……已经结束了),全世界的目光聚焦在中国。不屈不挠,创业的人们,默默累加着国家的财富。
这一年的人间喜剧(前面好象刚提到过汶川……)完整昭示,一个时代过去了(又一次消失在了那辽远、空旷的土地上……),另一个时代正在降临……(旧的已经“过去了”,新的“正在降临”,那么,现在是一片虚空。)
时代周报来了,在这一年的末尾。
时代周报来了,为了见证,为了建设。为了铁肩扛起,每一个匹夫臂膀上的那份责任。(用肩膀扛起臂膀上的东西,该动作多见于顶缸等杂技表演艺术)也为了证实,新一代的新闻人,永远不曾(“从来不曾”且“永远不会”)落后于这个伟大国家、这个壮丽时代的想象力。既然新的坐标已然锁定,新的参照点指明方位,我们愿以这卷橙色的新闻纸,给锦缎般美丽的焕然一新的中国,谦卑地别上一枚新的饰针。(疏曰:中国如美人,美人如锦缎,美人的胸口别着一枚纸饰针;或曰:把一枚纸饰针别在一匹锦缎上,以增色也。两者皆通。)
时代周报来了,为了理想。为了信念。为了改变。为了超越。(这。四个。句号。用得。真有力)为了一揽子的新生和复兴……为了普天之下最豪迈的情怀,以及幽微的心灵深处,忽闪忽闪,永远不曾(“从来不曾”且“永远不会”)熄灭过的点点星光……“我不相信,存在着这个国家做不到的任何事情!”(没有。绝对没有。)
为了守护,那些不能作为代价任意丢弃的东西。(“我不相信,存在着这个国家丢弃不起的任何东西!”)为了挽救,那些正在消失的视域(“新的边疆,展现在勇敢者的脚下!”)。为了公正……也为了,更加专业。
为了,不再是无声的中国。风暴过后,地球更平(“宇宙的地板”)。太阳的芒刺如同投枪,时代的号角召唤我们,发出中国的声音。(天赐不取,必受其咎——被投枪扎死)
为了去魅和去蔽。为了洒扫庭除,拨开稗草的遮掩,持续追寻,不断接近(请注意,是“拨开稗草”,不是“拔出”,有人还要在这院中的草丛里持续追寻……)直指人心,从破碎镜像中折射而出的,最本质的真实。克服偏见,才有纯净的真相,如同天空,映照在心灵上的一片湛蓝的湖水。贴近实在本身,远离假象、骗局,拒绝戏剧化的闲言碎语。真实,是我们新闻人必须捍卫的一道生命线,它将战胜黑暗和死亡,丑陋和荒凉。时代周报的雷达屏幕上,憎恨欺骗,摒弃虚假。客观报道存在之物,反复核实的事实真相,从一开始就是我们的专业以及我们的良知,在时代周报的词典里提供的惟一参照。真实,是我们的碳分子(如果这里是在隐喻“我们是钻石”,那么,钻石是由“碳原子”组成的;也许,作者并没有以钻石自譬的意思。我在网上只查到一种叫“碳分子筛”的东西,可用于变压吸附分离空气制取氮气……算了,不查了,总之,“碳分子”是某种“存在之物”,而“反复核实事实真相”,从一开始就不是我的专业……)。
时代周报来了。橙色新闻纸,每周40大版。荟萃寰宇之内,600名专栏作者的智慧,以及中国新闻界目前为止所能提供的,最大的决心、豪情,感天动地的进取之心。(好吧……)
我们是改革的孩子。时代周报,必然是改革之报。(必然的)
我们是开放的孩子。时代周报,必然是开放之报。(必然的)
置身时代洪流,浪遏飞舟。我们要做第一张真正体现“全球视野、中国立场”的报纸。为时代立心,代精英立言。我们要做一张无愧于这个伟大时代的伟大报纸。一张中文呈现、国际品质的报纸。
这是我们的雄心。曾子曰:“士不可以不弘毅,任重而道远。仁以为己任,不亦重乎?死而后已,不亦远乎?”今天,我们迈出第一步,明天,我们要做主流之报。(豪迈的……)
报道一切重要新闻,影响有影响力的人,这是我们的口号。
政经一体化,是我们的视角。这个时代社会科学王冠的宝石(注:即哲学),为我们提供最锐利的方法论。我们要改变过时的认知世界的方式。我们要倾听贯通内外的时代潮音。我们是一个知识的共同体。我们在记录中国进步、世界精彩中塑造这个时代中坚群体的主流价值观(这句话有点读不太通,大概是现场记录得太快了……),塑造这个时代知识生产、知识流通的新的范式。
我们带着使命和读者的嘱托,走进历史的现场。我们执意走那条最为艰难的荆棘之途(好吧),要从我们的角度找寻多样化的解释世界和中国的新的话语体系(注:即“我们的话语体系”。谁要是反对我们,谁就是反对多样性。一般来说,别人从他们的“角度”号称找到的多样性体系,都是各种变相的自我中心论,因为他们不能摆脱其角度也……);我们的投射板始终注目国际政经联动、经济一体化的浪潮。以此观照时代,以此定格人心,用中国的观念,平衡这个世界。
接下来的每一周,我们都将执着奉献最优质的新闻。初生的这份报纸,也许不美。但我们真诚,我们敬业,我们每天进步一点点,一个字一个字完善,一寸一寸推进。要让足够锋利的新闻事实,要让足具穿透力的思想,毫无保留,呈现在读者面前。要让这份报纸,对祖国的传媒事业,做出一点点卑微的贡献。
接下来的每一周,我们的编辑室总会灯火通明,编辑们热火朝天。我们的记者将走遍大江南北、长城内外,去倾听,去见证,去探索,去发现,那些正在塑造国家生活的方方面面。要让这些美好的,美好的,美好的时光,永远地记得,这份报纸的存在。要让这个时代的壮丽,在我们对于当下历史不中断的记录中,得以永远再现。
接下来的每一周,读者将一同见证,一同参与,携手打造为这个时代精心思考的强大智库,向最主流的人群,传播最主流的知识。一周以来最重大的国际、国内,政经、财经新闻事件,将在这里得到高度、深度、广度的解读与分析。
4个月来,每天我们怀着当年亨利•卢斯创办时代周刊的心情,紧张忙碌着。2008年11月18日,时代周报创刊了。今天,是接受读者,不,是人民,是接受人民检阅的日子。(注:这里的人民,指的是3000万财智精英;没有影响力的人,请勿自作多情。)
4个月来,这张报纸的主创人员,熬过了一生中最多的不眠之夜。怀着惴惴不安的心情,今天,为梦想接生。
每个人心中,总有梦想之物,时代周报,就是我们的梦想。在接下来的时间里,时代周报注定会走向丰满,走向成熟。时代周报,必定会为我们带来圆梦的那一天。
我们都是平凡之人。我们梦想着不平凡的人生。办一张真正不平凡的报纸。
时代周报,和他所有的读者一样坚信,我们正在通往建设伟大社会、和谐社会的不朽征程。新的文化,这时代崭新的精神面貌,亦在破晓的钟声里降临。我们坚信,这个国家牢固地树立在千千万万平凡而又伟大的人生基石上。理性不再取代情感,现代性的危机可以征服(我总觉得,现代性的危机是情感取代了理性……),深厚传统中的那些美德再也不会变成贬值的货币……又好又快,更好更快,科学发展。生活甜美如同姊妹(好吧),必定悉心呵护每一个善良的好人。
30年前,一个“时代”开始了。30年后的今天,另一个《时代》诞生了。
时代周报来了。为了见证,为了建设。
时代周报来了。为了理想,为了信念。为了改变,为了超越。
我们真的不相信,在这个伟大的国家,存在着做不到的任何事情。(绝对绝对不存在……)
“存在着纯洁的魅惑:(情感)
崇高的和谐,深刻的和平;(理性)
我所置放的标尺(理性)
远离非尘世的竖琴……”(情感)
朋友,请接受我们吧─我们必将“满怀激情地前往,/满怀激情!就像注满洪水的大地一样”(很多很多情感,洪水一样多的情感,毁灭一切………)
(俄国诗人曼得尔斯塔姆和智利女诗人米斯特拉尔等对本文亦有贡献)
2008-11-21 Fri
It’s my favorite and told by Yong Huang.
a list of the “special” characters and their common pronunciations
~ tilde (sounds like til-da); be prepared to explain to computer-illiterate people saying “you know, the wave-shaped thingy”
! exclamation; commonly read as bang in case of #!/bin/sh
@ at
# pound; but commonly read as shee in case of #!/bin/sh, not sure why
$ dollar
% percent
^ caret; not many people know this word so be prepared to say “no, not carrot; it’s the character above 6, an arrow pointing up”
& ampersand
* star; some read asterisk
( opening parenthesis (some may shorten it saying paren)
) closing parenthesis
_ underscore; once I heard people say underbar
+ plus
- minus; as symbol before arguments in commands, some people including me read dash, easier to say one syllable
= equals
` backtick or backquote
{ opening brace
} closing brace
[ opening bracket
] closing bracket
| pipe or vertical bar
\ backslash; be prepared to explain to some computer-illiterate people
: colon
; semicolon
” double quote
‘ single quote
< less than; some may read left angle bracket
> greater than
, comma
. dot; period if in English text
? question mark
/ slash or forward slash; some computer-illiterate people may be confused about / and \
space
(), [] and {} may also be called brackets in general. In that case, they specifically call [] square brackets and {} curly brackets. I never like this. Open and Closing may also be called left and right.
Yong Huang
关于oracle的学习,在vm上搞一下可以说只是一个入门,要真正学东西还是要靠实践。。。。
一般朋友是没机会接触小型机和Unix的。本人有幸可以接触Unix,但仅限于接触,还是有很多限制。
比如说想让机房的人帮忙配个存储学学ASM,结果吃了闭门羹;想让项目上RAC又很多"主管"有意见。。。。
其实这是很多朋友都会遇到的问题,就是对于DBA的向往以及学习环境的问题。
这个问题我以前曾经说明过,昨天又写了一点我的感受:
我经常说的一句话是:如果改变不了别人,要学会改变自己。引申一下就是,当别人不能为我们创造环境时,要自己来创造。
自己做一套Linux环境,演习ASM非常简单。甚至在Windows上也可以轻易实现。
很多在测试环境折腾过的复杂问题,80%的人在生产环境中是从来不会遇到的。所以我往往觉得,真正的测试,更能成就全面的知识。
改变自己,利用一切可能,调整自我,并且加速成长!
然后机遇会接踵而至。
Kamus的回复也值得借鉴:
也跟很多年轻的朋友说起过这个问题,很多人都说,找不到环境,羡慕别人有这样那样的环境可以测试,而自己只能是简单的维护。我的想法跟eygle的观点完全一致,环境是自己创造的。实际上,在最开始我学习Oracle的时候也同样没有任何一个产品环境可以测试,RAC?能有一个单节点的数据库连上存储我就谢天谢地了,更别谈什么RAC了。
自己搭建的测试环境已经可以满足绝大多数实验的要求了。只需要一台性能比较好的台式机,就可以通过vmvare搭建各种环境。ASM(这东西不需要RAC,单节点照样可以测试ASM),dataguard,streams,partitions,backup
and recover,oracle
text,timesten,这些东西你都自己测试一遍,基本上就行了。RAC没什么高深的,在你真正面对RAC环境之前,你完全可以不碰它。通过测试环境补充自己的知识,当你有足够自信面对任何面试的时候,会发现忽然间机会成倍增长。
很多朋友的建议都值得借鉴,共同探讨,可以发现很多有价值的信息。
相关文章|Related Articles
- 如何快速的成为一个合格的Oracle DBA?
- Oracle DBA 入门、进阶学习路线图
- CURSOR_SPACE_FOR_TIME 参数废弃
- DBA警示录:Messages信息应当认真检查
- DBA警世录:威胁来自数据库之外
评论数量(0)|Add Comments
本文网址:http://www.eygle.com/archives/2008/11/dba_study_experience.html
近期遇一个省的数据库说总是繁忙,idle很小,在凌晨稍微跑几个比较大的统计脚本,idle就出现0的情况,导致业务发生堵塞。
经过连续几天的观察,发现cpu曲线大致如下:
和白鳝交流了一下,老白说cpu的user%比例过高可能是由于buffer get比较高的sql引起。可以重点找一下statspack中buffer get比较高的语句。
根据sar出来的结果,查看对应时间段的statspack:
--------- ------------------ -------- --------- -------------------
Begin Snap: 148 17-Nov-08 23:59:01 439 3,968.9
End Snap: 149 18-Nov-08 00:04:02 444 3,925.3
Elapsed: 5.02 (mins)
……
Top 5 Timed Events
~~~~~~~~~~~~~~~~~~ % Total
Event Waits Time (s) Ela Time
-------------------------------------------- ------------ ----------- --------
CPU time 495 29.68
db file scattered read 78,197 465 27.90
db file sequential read 36,235 342 20.50
PL/SQL lock timer 1 117 7.03
enqueue 108 75 4.49
……
SQL ordered by Gets for DB: XJUSER Instance: xjUSER Snaps: 148 -149
-> End Buffer Gets Threshold: 10000
-> Note that resources reported for PL/SQL includes the resources used by
all SQL statements called within the PL/SQL code. As individual SQL
statements are also reported, it is possible and valid for the summed
total % to exceed 100
CPU Elapsd
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
2,619,562 3,841 682.0 23.8 326.51 330.57 3767922078
Module: dbtrans_query@xj_svr02 (TNS V1-V3)
select provinceid into :b0 from PROBLEM_TAB where PREFIXNUM=sub
str(:b1,1,7)
1,095,641 1 1,095,641.0 9.9 7.54 8.65 1460516408
Module: dbtrans_single@xj_svr01 (TNS V1-V3)
select b.servid ,a.tb1shortname ,b.servname ,(((TO_CHAR(c.PreDel
Time,'MM')||'月')||TO_CHAR(c.PreDelTime,'DD'))||'日') ,(((TO_CHA
R(c.expectdeltime,'MM')||'月')||TO_CHAR(c.expectdeltime,'DD'))||
'日') ,b.accessmodeid from tb1 a ,inst_tab_01 b ,servdelinterfa
ce c where (((a.tb1id=b.tb1id and b.servid=c.servid) and b.servs
tatus='P') and b.servid in (select servid from instead_table_01
where (dealstatus=1 and expectdeltime<=Sysdate))) union select
b.servid ,a.tb1shortname ,b.servname ,(((TO_CHAR(c.PreDelTime,'M
M')||'月')||TO_CHAR(c.PreDelTime,'DD'))||'日') ,(((TO_CHAR(c.exp
ectdeltime,'MM')||'月')||TO_CHAR(c.expectdeltime,'DD'))||'日') ,
b.accessmodeid from tb1 a ,inst_tab_01 b ,instead_table_01 c wh
ere (((a.tb1id=b.tb1id and b.servid=c.servid) and b.servstatus='
E') and b.servid in (select servid from instead_table_01 where
(dealstatus=0 and expectdeltime<=Sysdate))) union select b.servi
d ,a.tb1shortname ,b.servname ,(((TO_CHAR(c.PreDelTime,'MM')||'
月')||TO_CHAR(c.PreDelTime,'DD'))||'日') ,(((TO_CHAR(c.expectdel
time,'MM')||'月')||TO_CHAR(c.expectdeltime,'DD'))||'日') ,b.acce
ssmodeid from tb1 a ,inst_tab_01 b ,instead_table_01 c ,tb1serv
ices d where ((((((((a.tb1id=b.tb1id and b.servstatus<>'P') and
b.servstatus<>'E') and b.type=1) and b.ServGroupId=d.ServGroupId
) and d.type=0) and d.servstatus='P') and d.servid=c.servid) and
d.servid in (select servid from instead_table_01 where (dealst
atus=1 and expectdeltime<=Sysdate))) union select b.servid ,a.ic
pshortname ,b.servname ,(((TO_CHAR(c.PreDelTime,'MM')||'月')||TO
_CHAR(c.PreDelTime,'DD'))||'日') ,(((TO_CHAR(c.expectdeltime,'MM
')||'月')||TO_CHAR(c.expectdeltime,'DD'))||'日') ,b.accessmodeid
from tb1 a ,inst_tab_01 b ,instead_table_01 c ,inst_tab_01 d w
here ((((((((a.tb1id=b.tb1id and b.servstatus<>'P') and b.servst
atus<>'E') and b.type=1) and b.ServGroupId=d.ServGroupId) and d.
type=0) and d.servstatus='E') and d.servid=c.servid) and d.servi
d in (select servid from instead_table_01 where (dealstatus=0 a
nd expectdeltime<=Sysdate)))
710,704 433 1,641.3 6.5 44.54 104.60 3049199920
Module: boss_syncstatu@xj_svr02 (TNS V1-V3)
begin pk_bossusrchgstatus_proc . nUserStatusChgProc ( :nBatchRow
s , :sTablePartName , :nRet ) ; end ;
474,094 1 474,094.0 4.3 2.91 9.39 2446775708
Module: dbtrans_single@xj_svr01 (TNS V1-V3)
select b.servid ,a.tb1shortname ,b.servname ,(((TO_CHAR(c.PreDel
Time,'MM')||'月')||TO_CHAR(c.PreDelTime,'DD'))||'日') ,(((TO_CHA
R(c.expectdeltime,'MM')||'月')||TO_CHAR(c.expectdeltime,'DD'))||
2SQL ordered by Gets for DB: XJUSER Instance: xjUSER Snaps: 148 -149
-> End Buffer Gets Threshold: 10000
-> Note that resources reported for PL/SQL includes the resources used by
all SQL statements called within the PL/SQL code. As individual SQL
statements are also reported, it is possible and valid for the summed
total % to exceed 100
CPU Elapsd
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
'日') ,b.accessmodeid from tb1 a ,inst_tab_01 b ,servdelinterfa
ce c where (((a.tb1id=b.tb1id and b.servid=c.servid) and b.servs
tatus='P') and b.servid in (select servid from instead_table_01
where dealstatus=0)) union select b.servid ,a.tb1shortname ,b.s
ervname ,(((TO_CHAR(c.PreDelTime,'MM')||'月')||TO_CHAR(c.PreDelT
ime,'DD'))||'日') ,(((TO_CHAR(c.expectdeltime,'MM')||'月')||TO_C
HAR(c.expectdeltime,'DD'))||'日') ,b.accessmodeid from tb1 a ,i
cpservices b ,instead_table_01 c ,inst_tab_01 d where ((((((((a.
tb1id=b.tb1id and b.servstatus<>'P') and b.servstatus<>'E') and
b.type=1) and b.ServGroupId=d.ServGroupId) and d.type=0) and d.s
ervstatus='P') and d.servid=c.servid) and d.servid in (select se
rvid from instead_table_01 where dealstatus=0))
364,188 535 680.7 3.3 43.21 43.90 3582277248
Module: boss_syncstatu@xj_svr02 (TNS V1-V3)
SELECT NETWORKTYPEID FROM PROBLEM_TAB WHERE PREFIXNUM = SUBSTR(:
B1 , 1, 7)
293,675 1 293,675.0 2.7 17.87 183.31 2752729414
Module: SQL*Plus
select count(*) from table_0002 where length(deviceid)>7 and sta
tus<>'D'
首先查了hash value为1460516408和2446775708的sql,因为这2个sql的执行次数不高,但是单次执行的消耗很高,查询后发现2个sql的consistent gets有47万。与开发沟通后,该sql的执行计划已经无法改变,但是由于是通过时间点触发,可以将该sql的执行时间延迟到6点之后执行。
同时hash value为3767922078之类的sql由于执行太过于频繁,要求该进程的执行频率是否能够降低一些?但是该进程由于涉及状态同步,如果降低频率会引起用户投诉,暂时无法处理该sql。
待调整后,继续观察一天。发现晚上的曲线还是大致相仿:
继续观察对应时间段的statspack:
--------- ------------------ -------- --------- -------------------
Begin Snap: 447 19-Nov-08 00:19:05 438 4,018.6
End Snap: 448 19-Nov-08 00:24:01 434 4,055.7
Elapsed: 4.93 (mins)
……
Top 5 Timed Events
~~~~~~~~~~~~~~~~~~ % Total
Event Waits Time (s) Ela Time
-------------------------------------------- ------------ ----------- --------
db file sequential read 138,603 1,651 54.24
CPU time 937 30.79
db file scattered read 22,998 337 11.08
buffer busy waits 5,000 42 1.37
log file parallel write 34,923 34 1.12
……
SQL ordered by Gets for DB: XJUSER Instance: xjUSER Snaps: 447 -448
-> End Buffer Gets Threshold: 10000
-> Note that resources reported for PL/SQL includes the resources used by
all SQL statements called within the PL/SQL code. As individual SQL
statements are also reported, it is possible and valid for the summed
total % to exceed 100
CPU Elapsd
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
4,436,086 2,070 2,143.0 30.4 147.41 150.68 2931180186
Module: boss_usersvr@xj_svr02 (TNS V1-V3)
select a.HistoryId ,a.mid ,a.SubsId ,a.ActionId ,b.umflag ,to_ch
ar(a.ActionDate,'yyyymmddhh24miss') ,a.ActionPlace ,b.tb1servid
,c.tb1code ,a.AccessModeId ,a.servid ,b.ServAttr ,b.USERID ,a.Ch
argeMid ,a.ChannelId into :s1:s2 ,:s3:s4 ,:s5:s6 ,:s7:s8 ,:s9:s1
0 ,:s11:s12 ,:s13:s14 ,:s15:s16 ,:s17:s18 ,:s19:s20 ,:s21:s22 ,:
s23:s24 ,:s25:s26 ,:s27:s28 ,:s29:s30 from instead_tab2_Histor
y a ,service b ,tb1 c where (((a.historyid=:b2 and a.servid=b.se
rvid) and a.tb1id=c.tb1id) and a.tb1id=b.tb1id)
4,148,056 101 41,069.9 28.5 367.21 1019.89 3049199920
Module: boss_syncstatu@xj_svr02 (TNS V1-V3)
begin pk_bossusrchgstatus_proc . nUserStatusChgProc ( :nBatchRow
s , :sTablePartName , :nRet ) ; end ;
2,526,128 3,702 682.4 17.3 300.70 317.37 3582277248
Module: boss_syncstatu@xj_svr02 (TNS V1-V3)
SELECT NETWORKTYPEID FROM PROBLEM_TAB WHERE PREFIXNUM = SUBSTR(:
B1 , 1, 7)
2,319,482 3,402 681.8 15.9 289.98 299.17 3767922078
Module: dbtrans_query@xj_svr02 (TNS V1-V3)
select provinceid into :b0 from PROBLEM_TAB where PREFIXNUM=sub
str(:b1,1,7)
发现consistent gets很高的那几个sql已经不再出现,但是为何user的比例还是很高呢?
此时,突然发现了执行很频繁的几个sql,cpu time(s)有300多秒!!如hash value 3582277248、3767922078这几个sql的cpu time比昨天调整的consistent gets 还高!!
其实昨天查的时候,也注意过这几个sql,这几个sql虽然是走全表扫描,不过执行的速度很快:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
---------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 11 | 64 |
|* 1 | TABLE ACCESS FULL | PROBLEM_TAB | 1 | 11 | 64 |
---------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("PROBLEM_TAB"."PREFIXNUM"=SUBSTR(:Z,1,7))
Note: cpu costing is off
14 rows selected.
11:01:41 SQL> select count(*) from PROBLEM_TAB;
COUNT(*)
----------
100415
11:01:50 SQL>
buffer get部分中cpu time这么高,估计是这几个sql影响了。查询了一下该sql在别的省的执行计划,发现是走PK索引的。这个省的主键不知道被谁删除掉了!!
建立PK后,发现user一下子就下去了。
1 ALTER TABLE "USER"."PROBLEM_TAB" ADD CONSTRAINT "PK_USERPREFIX_USERID_PREFIXNUM" PRIMARY KEY ("PREFIXNUM")
2 USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
3 STORAGE(INITIAL 524288 NEXT 524288 MINEXTENTS 1 MAXEXTENTS 2147483645
4 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
5* TABLESPACE "INDEX_DYNAMIC" ENABLE
11:02:42 SQL> /
Table altered.
11:02:38 40 2 50 8
11:02:40 40 1 51 9
11:02:42 38 1 51 9
11:02:44 42 1 45 12
11:02:46 32 1 46 20
11:02:48 25 1 50 25
11:02:50 3 0 47 50
11:02:52 6 1 59 34
11:02:54 5 2 75 19
11:02:56 3 0 67 30
11:02:58 5 1 64 31
11:03:00 4 0 65 30
总结:遇到cpu的user高问题,如果没有enqueue,latch free之类的等待,仅仅是cpu time的等待,看statspack 中buffer get中的cpu time(s)高的sql很重要。
作者:Fenng 发布在 dbanotes.net. 
这是前一段时间投稿给《程序员》的一篇文章。标题中的"道"有些大了,您可以理解为"门道"的"道"。一家之言,妄自言道,诚可笑也。
什么是网站运维(Web operations) ?运维,绝不是某些人眼中安装系统、做几根网线那么简单? 除去应用开发和业务运营之外的保障网站能运转的事儿都可能是运维工作的职责范围。运维的工作包括(但不限于) 软硬件部署、网络管理、应用程序维护、安全、容量规划、故障修复等等。
运维,有别于"运营"。在中文的语境中,运营更多和业务结合在一起的。而运维,则是偏向技术层面。
任何一个成功的站点都离不开一只优秀的运维团队,尽管他们更多时候隐身在网站背后不为人知。
网站可用性
所谓网站可用性(availability)也即网站正常运行时间的百分比,这是每个运营团队最主要的 KPI (Key Performance Indicators ,关键业绩指标)。对于 Web 站点来说,传统的那个 24x7 的说法已经不是很适用了,现在业界更倾向用 N 个9 来量化可用性, 最常说的就是类似 "4个9(也就是99.99%)" 的可用性。看一下表 1 能更为直观一些。
| 描述 | 通俗叫法 | 可用性级别 | 年度停机时间 |
| 基本可用性 | 2个9 | 99% | 87.6小时 |
| 较高可用性 | 3个9 | 99.9% | 8.8小时 |
| 具有故障自动恢复能力的可用性 | 4个9 | 99.99% | 53分钟 |
| 极高可用性 | 5个9 | 99.999% | 5分钟 |
根据墨菲定理的推论,世界上没有 100% 可靠的 Web站点(除非不运行)。业界网站的可用性都是多少?引人注目的 Web 新贵 Twitter (http://twitter.com), 2008 年前四个月的可用性只有 98.72%,有 37小时 16分钟不能提供服务,连2个9 都达不到,甚至还没达到"基本可用"状态。电子商务巨头 eBay 2007 年的可用性是 99.94%,考虑到 eBay 站点的规模与应用的复杂程度,这是个很不错可用性指标了。Web 应用类型决定了不同的站点对可用性的依赖性是不同的。 要知道 4 个 9 的可用性实际上是很难实现的目标。至于 5 个9 的 Web 站点,一半靠内功,另一半恐怕是要靠点运气。

(图1 维基百科网站的一台数据库服务器的可用情况报告, 由Nagios的监控得到的)
多数情况下,网站可用性会是 SLA (Service Level Agreement, 服务水平协议) 中的一个重要度量指标,也是运维团队向自己的客户(更多是公司老板)的正式承诺。可用性是能够持续改进的东西,KPI 制定者切不可狮子大开口,企图一步登天,拍拍脑袋提一些不太切实的指标。运维团队对可用性的承诺也不能开些空头支票,到头来两头难看。值得强调的是,如果是做第三方托管,更需要明确 SLA,明了第三方的服务能力,否则,费尽了九牛二虎之力终于保证了软硬件网络等环节都没问题了,IDC 却频繁断电或者IDC 出口网络不可用,这也绝对做不到预期的高可用性。
提高可用性的一些常规策略有消除单点,部署冗余设备(或集群),配置带外管理网络等,对可用性要求不高的网站这些可能足够了。如果要提供更高的可用性,比如 4 个 9 甚至 5 个9,就不是简单靠硬件就能做到的事情,还需要建立完善的流程制度、建立变更机制、提升事故响应速度等。正所谓是"没有最高可用,只有更高可用性"。
一般来说,所有的网站运维人员都在追求网站的更高级别的高可用性,但是必须注意,这是以额外的软硬件投入、更多的人力成本为代价的。成本与可用性之间也请做到良好的平衡,盲目追求高可用性是不可取的。
(补充:Twitter 的可用性现在已经有了很大提升,但是可以看到,可用性不佳并非一个网站的杀手,只要产品对用户足够友好,足够有粘度,足够不可或缺,那么可用性并非是第一要追求的运维目标。有些运维人员被 Amazon 的某年圣诞节期间宕机所造成的影响埋下心理阴影,其实没那么可怕,如果真的觉得可怕,那么你可能被一些厂商销售人员洗脑了。)
未完待续: 下一篇《监控与报警》
相关文章|Related Articles
- 国外 Web 站点字体是否都符合"中国国情"? - Feb 9, 2006
- OutfoxBot 是谁家的爬虫? - Jul 25, 2006
- 卓越(Joyo)与 Amazon 接轨后的'智能' - Oct 8, 2006
- Web 2.0 站点扩展性问题随感 - Apr 11, 2007
评论数(4)|添加评论 | 最近作者还说了什么? Follow Fenng@Twitter
本文网址:http://www.dbanotes.net/web/web_operations_availability.html
DBA Notes 理念: 用最简约的技术取得最大的收益...

用这些只能体现中老年人审美情趣的照片来宣传,评弹之落伍也就理所当然的了。我是无法想象,有年轻人看到那些照片会去喜欢某个演员,或进书场听上个把小时。
一种艺术,如果不能吸引年轻人,总是没出息的,我们不能指望这些年轻人有一天也会成为老人。但很多人并不以为然,他们只知道说,年轻人不懂。
那天,一位刚从评校毕业的女孩也在旁边。女孩长的不错,打扮和神情也很“非主流”。师傅在台上拍照,她在下面看着。我问她,喜欢这样的照片吗?她笑笑,然后悄悄说道,“好傻,土死了。拍一张玩玩还可以,怎么可以老是这样拍呢?”
她的回答不但如我所料,而且很合我的心意。我告诉她,知道为什么听一次评弹只要5块钱,而听一次流行歌曲的演唱会需要500块吗?因为现在的评弹听众都是老年人,没有年轻人,只有年轻人才肯花大价钱。想当年可不是这样,你师傅的师傅的师傅可是真正的超级流行偶像啊,开的是哈雷,抽的是雪茄,到香港演出一次,没有几根金条是请不动的,为什么啊?和现在的流行歌手一样,听众都是年轻人。那现在为什么就不行了呢?就是让这帮人给傻掉的!昆曲这些年开始香骚起来了,还不是因为白先勇给《牡丹亭》带来了新的理念和包装?年轻人喜欢上了,也就热闹起来了。至于到底有几个人懂,那并不重要。买票去听艾薇儿音乐会的,又有几个是听得懂英语的呢?
和其他传统曲艺想比,我觉得对评弹动手术要相对容易些,因为它不象一般戏曲那样强调“程式”要求,本身就比较活络,只要牢牢抓住它区别于其他曲艺的最根本的东西,怎么改变都可以。那么,评弹最核心的特征是什么呢?就是我们经常讲的“说、噱、弹、唱”四个字,后来,蒋月泉先生又加了一个“演”字。其中,又以“说”最为重要,乃典型的中国式叙事方式。只要保留了这些精髓,至于是否一定要穿旗袍长衫,是否一定要用苏州方言,并不重要。也只有形式放开了,内容才能放开,可以表现的余地才能真正的宽广起来。
我对女孩说,不要急,你先跟你师傅好好学,打好基本功,特别是“说”,一定要学会如何吸引观众,调动观众。等经验丰富了,你再拜我为师,我帮你写本子,咱再也不说武松红楼梦这些连咱自己都不喜欢的东西了。咱们说“正龙拍虎”。评弹演员也是演员,我很看好你哟。
女孩吧唧吧唧两只大眼睛,然后抬手在嘴巴下打了一个“V”字,喊了一句“耶”!确实很有前途的一副样子,评弹的未来就靠这帮90后的小赤佬了。
小七:时代周报创刊词点评
《时代周刊》创刊词
2008-11-20 Thu
前一篇转的体系架构的文章有提起Squid 。它相当于在浏览器和Web服务器之间的缓存代理服务器,可以缓存Web服务器上的网页图片文件等内容和资源。
效果图类似这样,Squid起着”前端页面”缓存的作用。
今天下载后简单配置,果然cache的效果不错。
C:\perl accessHTML.pl <— disable Squid
start at 2008/11/20 19:51:50
End at 2008/11/20 19:53:49
Total elasped time is 119 secondsC:\perl accessHTML.pl <— enalbe Squid by proxy
start at 2008/11/20 20:03:24
End at 2008/11/20 20:03:59
Total elasped time is 35 seconds
可以看到使用了Squid进行缓存后,网页访问时间确实有很大改进。
简单测试perl脚本
只比上次的测试,增加了proxy选择是否使用Squid的网页缓存代理服务
#!/usr/bin/perl
use Time::Local;
use LWP::UserAgent;my $endtime;
my $starttime;
my $elaspedtime;$starttime = time();
my @array=(localtime)[5,4,3,2,1,0];
$array[0]+=1900;
$array[1]+=1;
my $nowtime=sprintf(”%04u/%02u/%02u %02u:%02u:%02u”,@array);
print(”start at “.”$nowtime\n”);for($i = 1; $i < 30; $i++) {
$url=”http://www.yumianfeilong.com/”;
$ua = LWP::UserAgent->new();
$ua->proxy([’http’] => “http://127.0.0.1:3128/”);$res=$ua->request( HTTP::Request->new(’GET’,$url));
if ($res->is_success)
{
$countoflines=10000;
$randnum = int(rand($countoflines));
$dmpfile = “htmlfile.$randnum.html”;
open DMPFILE,”>$dmpfile” or die “Can not open and write to $dmpfile”;
print DMPFILE $res->content;
close(DUMPFILE);
unlink(”$dmpfile”);
}
else
{
print (”Error: ” . $res->status_line . “\n”) ;
}
}#end for loop$endtime = time();
#print “Total elasped time is ” . $endtime - $starttime . ” seconds. \n”;
my @array2=(localtime)[5,4,3,2,1,0];
$array2[0]+=1900;
$array2[1]+=1;
my $nowtime=sprintf(”%04u/%02u/%02u %02u:%02u:%02u”,@array2);
print(”End at “.”$nowtime\n”);
print(”Total elasped time is “);
print(@array2[5] + @array2[4]*60 - @array[5] - @array[4]*60 );
print(” seconds.\n”);
proxy表示我将Squid监听在本地机器的3128端口上。




