2008-09-01 Mon

06:55 在 AIX 中运行 Oracle (449 Bytes) » developerWorks 中国 : 技术文章 , 教程 AIX
系统管理员始终需要了解系统的性能。本文将深入探讨应该如何对 AIX 的各个方面进行优化,以运行 Oracle。我们将了解虚拟内存管理器 (VMM,Virtual Memory Manager)、CPU、内存和 I/O(磁盘以及网络)。我们将研究一些可用于分析瓶颈问题的工具,同时还将对系统进行某些更改。最后,我们还将回顾一些可用于帮助您进行性能优化的 Oracle 工具。
04:15 Nginx 与 Awststs (FastCGI for Perl) (2433 Bytes) » DBA notes

配置好 Nginx 后,可能有的朋友还想用 Awstats 分析日志。如果另外再起一个 Apache ,觉得费二遍事。如果在 Nginx 上跑 Awstats ,还需要 FASTCGI 支持。配置的方法有些山寨。Nginx 尽管提供 Perl 模块支持,毕竟还是实验性质的。

对比了一些文章,决定还是用 nginx-fcgi 这个脚本。作者是 Daniel Dominik Rudnicki 。这个脚本要比顺子文中提到的要好一点。

该脚本中用到如下的 Perl 模块。所以使用前要确保相关 Perl 模块已经存在。要不,手工下载安装一下。

  • perl-FCGI
  • perl-Getopt
  • perl-IO
  • perl-Socket

使用命令示意:

/usr/local/nginx/nginx-fcgi -S /tmp/fastcgi.sock -l /var/log/nginx/nginx-cfgi.log
-pid /var/run/nginx-fcgi.pid

网上常见的那个脚本必须要显示的指定最为后台进程跑。不是很完善的方法。

注意事项:不能用 root 用户执行(会提示). 要用与 Nginx 相同身份的用户执行。否则可能会在 Nginx Log 中提示 Permision Denied 。

Nginx 中配置好 Log 格式:

log_format  main          '$remote_addr - [$time_local] "$request" ' 
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" $http_x_forwarded_for';

相对应的 Awstats 中 Log 格式为:

LogFormat = "%host - %time1 %methodurl %code %bytesd %refererquot %uaquot" 

其他的配置参考一下Sunnyu 的 "为了Awstats给Nginx添加FastCGI方式的Perl支持" 应该就成了。

BTW: 应该说,Nginx 能够有效抵挡搜索引擎爬虫对网站的影响。对于 Apache 来说,这是个很大的进步。

--EOF--

更新:如果手工写脚本做 Nginx 日志 logrotate 的话,注意不要简单的用 mv 命令, cp 然后 echo ''> 的方式更好。

推荐: Sina 张宴的 Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第4版),这是目前关于 Nginx 最详细的实践文章。

01:11 入手Canon 450D (3636 Bytes) » Ricky's Blog on Testing and RAC

周末去了一趟香港,450D到手。

现在去香港还真是方便,从我家打车到西部通道20分钟不到,过关之后大巴40分钟到九龙塘。算上过关的时间,也就一个小时多点。10:30左右跟香港的同事在九龙塘地铁会合,直奔目的地旺角。

因为这事准备的充分,所以基本没浪费什么时间,同行的同事也早就准备好了攻略,先去几个比较大的店铺询价,百老汇和丰泽的价钱基本相同,港币6200左右,折成人民币跟深圳价钱一样。后去西洋菜街的久城大厦,结果碰壁,11点了都没开张,香港的夜生活比较丰富,所以店铺开张也一般较晚。路过电梯间的时候发现几个招聘广告,洗碗工/勤杂工等 月薪6500-7000,^_^

午饭之后,经过一番比较,发现久诚大厦9楼的恒康数码价钱最厚道,套机港币5880,另外送4G SD卡,相机包,电池一块,贴膜,三脚架。折成RMB也就5200多点,性价比比较高,当即入手。Canon这两个型号(450D & 40D)在香港和澳门地区的保修值的一提,一般国内的店都是全国联保1年,这两款机器在港澳地区购买,全国联保两年,而且还有一个附加意外条例,大致是说发生跌落,水浸,雷击盗窃之类的意外事件,第一年只需花600港币(40D是800港币)即可重新购置一台,第二年只需要花市价的一半即可购置一台。比较人性化哈。店铺老板在我买的过程中,反复强烈给我推荐Nikon的D60,看来也是不折不扣的Nikon的粉丝。后来我抵制住了便宜1000块的诱惑,还是入手了450,不知道日后会不会后悔 :)

去香港购物的话,付款有三种方法:1. 直接拿现金,RMB在香港很受欢迎 2. 用刷卡,我咨询过银行,如果你走Master或visa线路的话,是要收大概1.5%的手续费,如果走银联的话,不用手续费,不过店家给的汇率可能没那么高。

PS: 发文的时候,发现Ningoo老兄这两天也新入手450D :)


00:26 不要删除你所有的归档日志 (4001 Bytes) » OracleBlog.cn

今天遇到一个问题,同事来说归档目录已经全部删除了,但是归档目录的大小还是100%,且执行shutdown immediate挂死。

$ bdf
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg00/lvol3     262144  181520   80040   69% /
/dev/vg00/lvol1     314736   84360  198896   30% /stand
/dev/vg00/lvol8    4718592 1056280 3633752   23% /var
/dev/vg00/lvol7    2654208 1435160 1209576   54% /usr
/dev/vg00/lvol4    1540096 1028512  508264   67% /tmp
/dev/vg00/lvol9    10485760 4948670 5365096   48% /oracle
/dev/vg00/lvol6    94208000 7317328 86211936    8% /opt
/dev/vg00/lvol5     163840    2480  160104    2% /home
/dev/vg00/lv_arch  51216384 51112984  102632  100% /arch
$ cd /arch
$ ll
total 0
drwxr-xr-x   2 oracle     dba             96 Dec 18  2007 lost+found
$

同时alertlog中也在不断的报错:

ORA-16014: log 2 sequence# 28801 not archived, no available destinations
ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_02'
ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_12'
ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_22'
Mon Sep  1 10:28:55 2008

引起该问题的主要原因,就是在/arch目录下,使用了rm *命令来删除归档,但是当前正好有归档进程(arch)正在写出,rm后文件系统的句柄无法释放,因此空间也没有释放。

此时我们用shutdown immediate命令无法关闭数据库,这是因为,在现在的状态下,arch已经被撑爆,所有组的redolog均为非inactive状态,shutdown immediate需要做checkpoint,checkpoint会将dirty buffer中的东西写入到db buffer,lgwr的触发条件之一就是dbwr进程写db file,此时,lgwr发现所有的redolog都是非inactive状态,都不能写,继续寻求arch切出,以期待能写redolog。而此时arch目录爆满,因此就报上述的错了。

我们用shutdown abort关闭数据库后,空间就释放了。

SQL> !bdf
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg00/lvol3     262144  181520   80040   69% /
/dev/vg00/lvol1     314736   84360  198896   30% /stand
/dev/vg00/lvol8    4718592 1072672 3617488   23% /var
/dev/vg00/lvol7    2654208 1435160 1209576   54% /usr
/dev/vg00/lvol4    1540096 1028512  508264   67% /tmp
/dev/vg00/lvol9    10485760 4945978 5367702   48% /oracle
/dev/vg00/lvol6    94208000 7317328 86211936    8% /opt
/dev/vg00/lvol5     163840    2480  160104    2% /home
/dev/vg00/lv_arch  51216384  107384 50709848    0% /arch

我们在删除归档的时候,一定不能全部删除,一定要留最后一个归档,以防万一。最安全的方法,当然是在rman中用delete input删除了。

2008-08-31 Sun

22:00 HP中无法使用@符号 (12528 Bytes) » OracleBlog.cn

在一次测试中,发现在oracle用户下无法使用@符号,测试用tnsnames登录的时候,无法识别@符号:

$ sqlplus user/pwd@hnadt
sh: hnadtnot found.

但是tnsping却能ping通的,检查tnsnames.ora文件也没问题,同时,用vi打开profile时,也不能添加使用@符号。这个问题应是环境变量引起的。

在.profile中加入以下内容即可:

oracle@ha_dc01:/oracle > cat .profile
 
# @(#)B.11.11_LR       
 
# Default user .profile file (/usr/bin/sh initialization).
 
# Set up the terminal:
        
if [ "$TERM" = "" ]
        
then
                
eval ` tset -s -Q -m ':?hp' `
        
else
                
eval ` tset -s -Q `
        
fi
        
stty erase "^H" kill "^U" intr "^C" eof "^D"
        
stty hupcl ixon ixoff
        
tabs
 
# Set up the search paths:
        
PATH=$PATH:.
 
# Set up the shell environment:
        
set -u
        
trap "echo 'logout'" 0
 
# Set up the shell variables:
        
EDITOR=vi
        
export EDITOR
 
# Oracle Environment
ORACLE_HOME=/oracle/app/oracle/product/9.2.0; export ORACLE_HOME
ORACLE_SID=hamisc; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
NLS_LANG=American_america.ZHS16GBK;export NLS_LANG
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
LD_LIBRARY_PATH=$ORACLE_HOME/lib;export LD_LIBRARY_PATH
SHLIB_PATH=$ORACLE_HOME/lib32;export SHLIB_PATH
 
# Set shell search paths:
PATH=/bin:/usr/bin:/usr/sbin:/etc:/opt/bin:/usr/ccs/bin:/usr/local/bin:/oracle/OPatch:/opt/perl/bin:$ORACLE_HOME/bin
export PATH
 
OPATCH_PLATFORM_ID=59; export OPATCH_PLATFORM_ID
export PS1="$LOGNAME@`hostname`:\$PWD > "
18:56 RAC备份 (333 Bytes) » 梦想有多远
最近在做RAC系统的备份,自己的SHELL的不是太好.东拼西凑了个 #!/bin/bash export ORACLE_BASE= export ORACLE_HOME= export ORACLE_SID= export DATE=`date +”%Y%m%d”` #level 0 backup script rman target sys/oracle log=’/data/hsipccweb_db_backup/log/backup_level0_`date +”%Y%m%d”`.log’
05:25 创新,京剧,中秋,嫦娥 (545 Bytes) » 玉面飞龙的BLOG
李玉刚,唱的太好了。李玉刚就是在电影”天下第二”中扮演爱贝勒的那位京剧演员。他扮演女旦扮演的非常好,我是说,仔细看得话会还以为是个女的演唱的。他的嗓音实在太棒了! 他一定会大红大紫的。 今天还在电视上看到李玉刚为中国发嫦娥奔月计划而作的”嫦娥奔月”,非常得好看。嗓音,身段,韵调,跳舞都非常好看,可惜没有清晰的MTV。国粹就是精华。 祝贺大家中秋佳节放假快乐。
00:17 学习latch笔记 (38833 Bytes) » Alibaba DBA Team

<!– @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } –>

个人认为科学技术之间存在一定的相关性的,先举一个例子,来比较浅显的了解一下latch的一些特点。下图为一张十字路口照片,来来往往的车辆就是靠十字路口的一个交通信号灯来指挥的,当然有时候也会有按照交通警察的指令来执行。

<!– @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } –>

中国的交通,十字路口有交通信号灯,信号灯周期性的变化。当东西直行的信号灯是绿的时,东西方向的汽车可以行走,此时南北方向的车需要等待;当南北方向的信号灯是绿的时候,南北方向的车是可以行走的,东西方向的车要等待。当一个方向为绿灯时另一个方向一定是红灯,除非线路故障。看到这个图,我突然想到和latch很有一比,到底有多少呢,让我们一起看看下面几个问题:

1、那么信号灯是起一个什么作用呢?

告诉行使的车里和行人你能不能通过十字路口。

2、汽车等待的是什么?

汽车在等待交通信号灯变成绿色,这样可以通过。

3、汽车是使用信号灯呢还是使用十字路口的那一块马路呢?

汽车得到绿色信号灯之后,会立即行使通过路口,他使用的就是那一个马路。

4、 同时得到这个绿色信号灯的是不是不仅仅一辆车?

同时看到绿灯的车辆有很多,并发的比较多。

5、信号灯变化时间越长是不是就堵的更严重?

信号灯的时间越长,导致一次等待的时间过长,押车的长度会变长,通过路口的速度要明显小于正常形式的速度,这样导致车会越来越多的堵在路上。

6、是不是有的车得不到中间的道路资源他就不等待信号灯而直接右柺呢?

有些车辆在直行的时候没有得到绿灯,他们还有别的方向可以选择,就会右转来直接走掉

7、是不是车辆的个头越大,同时通过路口的车辆就越少?

一次占用整个车道,那岂不是要让后边的车没法通过?

8、当一辆车在一次信号灯没有通过路口时,是不是继续等待,下一次绿色信号灯亮的时候是不是他第一时间可以通过?

当一次绿灯正好没有通过路口,下一次绿灯到来的时候他就可以比较迅速的得到绿灯信号,而快速通过。

发现交通信号灯这个设计很有意思,和oraclelatch很像,不知道是谁学习的谁.

  • Latch到底是什么呢?

是能不能独自访问或执行某一种共享资源的信号灯。从程序上来讲就是一个变量,标记了某个资源的一个状态。

Latch有三种类型,父latch,子latch,独立latch。其中,在v$latch_parent这个表中存放的是独立latch和父latch,每一个latch存放一条记录。子latch放在 v$latch_children表中,每个子latch存放一条记录,只有少数的latch有子latch,所以在v$latch_children表中,其latch name是一样的,但是其地址不一样,表明他保护block不想同。在v$latch表中,保存了所有的latch的聚合信息,在这里能看到宏观的latch信息,在v$latch_children中可以看到微观的每个latch的信息。

根据概念理解,对于共享的数据结构都是需要使用latch进行保护的,有些数据结构使用一个latch有些数据结构使用多个latch(子latch),多个latch的使用可以增加并发度,因为不用访问一个资源而占用了整个链表的latchlatch的访问是独享的

<!– @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } –>

看了latch的概念,那么进程如何得到latch呢?

进程得到latch的方式:willing-to-waitno_wait两种方式:

Willing-to-wait方式是请求一个latch如果一次请求没有获得,然后又有经过spintry again经过多次的spin_SPIN_COUNT如果还没有得到latch则进入到sleep状态,进入sleep前,它需要先安排一下他的后事,不能一睡不起呀(如何醒来,超时和repost,还有就是通知v$session_wait自己发生了latch free wait,从这里可以知道,每次sleep都会对应着一个latch free wait eventspin也可以称之为active waitcpu时间片该进程还没有消耗完毕,那么这样进程还是在消耗cpu时间的。这样的方式请求的latch的(level)级别要比自己持有的高才可以,为什么呢?如果a进程占有一个level 5latch,它去请求一个level3latch,而进程b,占有这个level3latch,又去请求那个level 5latch,这样会有什么问题呢?因为它是可以去spin的,又是可以去sleep的,sleep之后还是继续重复?那就永远没有完没有了了。所以呢,levelrequest是有level顺序的,不能随便的请求。

为什么要spin呢?spin是对于多cpu系统而言的,一个cpu是没有必要的,因为,spin是一个进程在cpu时间片内等待一个latch,它会让spin进程去其他的cpupin一下,如果有其他的进程释放了该latch,那么就可以得到了,又因为一个cpu,在一个时刻只能处理一个进程,进程切换的代价又很高,要建立上下文环境,所以尽量在cpu没有切换的时候能得到latch最好。Spin的次数也是有一个参数来指定的,_SPIN_COUNT,文档上有一个公式说

_SPIN_COUNT * sleeps / misses 的值越小越好,但是我没有明白过来,请大牛们解释一下。

v$latch中,有getsmisses。那么gets是什么意思呢?gets是进程通过willng-to-wait得到的latch的次数,misseswilling-to-wait模式并且没有pin也没有得到latch的次数。那么经过多次的spin得到latch计作一个gets,经过多次spin没有的到latch,那就是sleep了。

Sleepwilling-to-wait模式请求latch失败了,然后就要去sleepsleep要去告诉v$session_waitV$SYSTEM_EVENT发生了latch free 等待事件。Sleep之后还是要醒来的,要么是闹钟(超时),要么就是告诉别人叫他一下(repost)。Sleep醒来之后,其下次的sleep时间要变长的,不知道为什么,睡得越多,每次睡眠的时间就越长(2s),但是当一个进程持有latch的时候睡眠的时间会很短(4厘秒)。1=1000毫秒(ms)1毫秒=11,000(s) 1=1,000,000 微秒(μs) 1微秒=11,000,000(s) 1=1,000,000,000 纳秒(ns) 1纳秒=11,000,000,000(s) 1=1,000,000,000,000 皮秒(ps) 1皮秒=11,000,000,000,000(s)

在上面看来,latch如果出现sleeps比较多,造成的影响是比较严重,因为每次request latch都会耗用cpu时间,sleep说明了白白浪费了cpu时间,这样会造成资源的浪费。

No_wait方式去请求一个latch,有两种情况:1、他请求的latch有多个类型相同的latch可以请求,会先请求一个,如果得不到,就请求下一个同样的latch,如果都扫描了一遍,还是没有得到,则转入willing-to-wait2、请求的latch级别与请求的相同或者低的时候,因为他有deadlock保护,所以可以。

No_wait方式在v$latch的记录为:IMMEDIATE_GETS IMMEDIATE_MISSES

Latchcleanup,在latch的使用过程中,可能会出现一些异常,而导致有些latch被异常占有得不到释放,这样就会有问题了,别的进程过来请求不到。出现这样的异常pmon进程会跟进处理,对于其处理的流程来说,最重要的莫过于将没有提交的事物回滚,那么就需要latch支持恢复,那么latch在开始操作前会先写一些信息去latch的恢复区。Pmon 3秒钟会自动运行一下,但是这也使很长的一段时间了,所以在进程在请求一个latch失败多次之后,会post pmon进程去check一下占有这个latchprocess是不是正常。

Spingetsmissessleepcleanup

Spin是对于多cpu系统而设计的,目的是为了能够尽量不发生进程交换的情况下得到latch,该进程去查看别的cpu有没有释放其需要的latch如果能得到就可以在一次cpu时间内处理完事情,多好呀。

Gets willing-to-wait模式的not spinspin(不论一次还是多次spin)的gets

Misses willing-to-wait fail to get without spin

Sleep 在一次cpu时间内没有得到latch,就会睡眠

IMMEDIATE_GETSno_wait模式的get

IMMEDIATE_MISSESno_wait模式的miss

Cleanup 占有latch的进程出现异常,需要PMON进行清理,以免长期占有latch。在进程得到latch之后需要先将恢复数据写到恢复区,保证出现异常之后能够正常恢复。

  • 查看latch的视图:

1select latch#, name from v$latchname

可以看到latch的名字

2、Select total_waits from v$system_event where event=‘latch free’;

2、Select sum(sleeps) from v$latch;

上面这两个的结果实一样的。

3、select name, gets, misses, immediate_gets, immediate_misses, sleeps from v$latch order by sleeps;

4select * from (SELECT file#, dbablk, class, state, TCH FROM X$BH b,v$latch_children lc WHERE b.HLADDR=lc.addr order by TCH desc) where rownum<=10;

sql可以查询一下hot block,其中 TCH touch count header? 该值大,说明了被访问的次数相当多。X$bh中的HLaddr就是说的在block头的latch地址,正好是v$latch_childrenaddr

  2008-08-30 Sat

21:14 世界真的是平的 (1511 Bytes) » Free2way@Net

  终于随手翻了翻,这本名噪一时的书.世界是平的,已经被大多数人奉为经典。虽然,我依然觉得这个作者有点罗嗦,文笔有点繁琐。但是里面大量堆砌的例子里面班加罗尔和沃尔玛的案例确实给我留下深刻的映像。这本书的观点已经被全球规模的大公司或者想成为大公司的小公司作为行动的教条。

  现在的公司也是如此,美国人拍拍脑袋在系统里面define一个task,然后下班回家睡觉。根据时差,美国的晚上就是中国的白天,我们接到task,就像工蚁一样开开忙忙碌碌。完成相应的部分后,传给印度人或者德国人。等老美一觉醒来,ok,这个task已经close了。在一个global的项目里面,精细的分工和庞大的互联网,使每个国家或者每个地区都是链条上的一环。作为个人,更是这台庞大系统里面,几乎微不可见的螺丝钉。问问周围的同事,在以前可能大家都是hero,来到这里大家也就沦为”穿着看不见的制服的面目模糊的庸才”了.

管它世界是平的,圆的,扁的,拿到工资就闭嘴吧.

 

21:11 Wish » Chanel [K]
21:00 入手Canon 450D » NinGoo.net
19:38 球迷 » NinGoo.net
11:07 浅析网购模式(3) » 淘宝数据仓库团队
11:01 浅析网购模式(2) » 淘宝数据仓库团队
10:55 浅析网购模式(1) » 淘宝数据仓库团队
10:38 数据挖掘与知识发现(2) » 淘宝数据仓库团队
05:33 EM » 梦想有多远

  2008-08-29 Fri

19:05 杀蟑螂 » 玉面飞龙的BLOG
10:30 小议compress表 » OracleBlog.cn
07:30 问题拾遗 » Chanel [K]
06:25 北飞的候鸟 » Chanel [K]

  2008-08-28 Thu

08:08 既成事实还是将成事实? » 淘宝数据仓库团队
06:05 Perl监控AIX的网卡流量 » AnySQL.net
04:36 在 IBM Network Authentication Service for AIX 中增强密码强度 » developerWorks 中国 : 技术文章 , 教程 AIX
01:47 memcached 入门到理解 » 架构研究室
01:20 继续上面的话题(分区表) » stronghearted life
00:14 Perl AIX-Perfstat-0.03编程 » AnySQL.net

  2008-08-27 Wed

22:52 安装Perl AIX-Perfstat-0.03 » AnySQL.net
22:31 普通表改分区表遇到的问题 » stronghearted life
06:44 Unix高手的另外十个习惯 » Ricky's Blog on Testing and RAC
00:06 oracle的整合力量 » OracleBlog.cn

  2008-08-26 Tue

22:15 打算入手450D » Ricky's Blog on Testing and RAC
06:44 Service Management Facility快速入门 » Ricky's Blog on Testing and RAC
06:37 scstat unexpected error问题及解决 » Ricky's Blog on Testing and RAC

  2008-08-25 Mon

06:46 OCM exam guide - Prepair » Chanel [K]
 123
 123