Alibaba DBA 全家福
有5人发表了评论 | 赶紧发表评论吧 | 作者:grassbell
DBA团队汇集了来自全国各地志同道合的22名兄弟姐妹,我们有幸把兴趣变为了自己的工作,同时承担了阿里巴巴最核心的数据库维护的重任。
09年已经过去,我们经历了太多的酸甜苦辣,面对风雨,一起成长,有问题一起解决,互相帮助,没有猜疑,没有心机。
10年是个新的开始,把收获放入历史,把遗憾甚至痛 转换为动力,给自己勇气走出“舒适区”,努力突破自我!
AIX reserve_lock的问题
有3人发表了评论 | 赶紧发表评论吧 | 作者:八神
最近在AIX的reserve_lock上连续搞出了两个故障,教训是惨痛的,记录一下
我们有套双机AIX+Oracle 11G +ASM的环境,存储是两套EMC DMX3,一主一备,非RAC,正常情况下每台主机拉起自己的ASM DG,做成data guard,ASM DISK是直接基于/dev/hdiskpower的,没有使用AIX的VG,为了方便故障切换,我们让小机同时认到了主备存储的所有LUN,同时asm_diskstring也包含了两套存储所有的数据lun,在上线前,专门修改了PV的属性,reserve_lock=no
参考 http://chj733.spaces.live.com/blog/cns!C59D3364AD37617B!161.entry
上周光纤交换机调整,导致备机的hba通道出现问题,我们将备库的powerdisk删除了重认了一次,AIX里面默认认出的pv的reserve_lock=yes,这样两边的reserve_lock信息不一致了,主库是no,备库是yes,这个时候犯了个低级错误,头脑一热 ,在备机上做了次chdev -l hdiskpower reserve_lock=no(包括主库在用的lun),马上主库的asm实例crash了,alert日志信息显示:device is busy,当时认为chdev是针对本机的ODM库的,不会修改盘头信息,后来IBM工程师解释,这个动作确实只修改ODM库,
但你备库的当前属性是reserve_lock=yes的,他会将磁盘资源lock住,而主库的是以reserve_lock=no打开的磁盘,自然就被抢了
第2次故障,种种原因,系统的状态又回到了原点,主库no,备库yes,这时不敢再修改reserve_lock了,但备库ASM还是要起来,standby还要继续使用的,在备库做完alter diskgroup dg2 mount后,主库开始出现大量的磁盘IO报警,很快DG就被强行dismount,数据库又挂了,不过这次ASM实例没挂,从理论上讲,ASM加载DG,会扫描asm_diskstring的所有磁盘,他是根据盘头信息来判断那些盘是要加载的,就算盘的顺序乱掉也没关系,为什么备库挂DG会把主库的DG搞当?后来线下做过测试,在YES的那边,做个简单的select * from v$asm_diskgroup也会把NO的那边弄挂,这个只能说明,ASM配reserve_lock=yes一起使用的时候,会对所有被检查的盘加锁,哪怕这个盘不属于你正要加载的DG,如果两边的lock属性不一致,就会存在抢断的现象,这个是比较危险的
对于这种共享磁盘的使用,建议:
保持两边的reserve_lock=no,严格控制主备磁盘不会重叠使用
出现HBA卡损坏,磁盘需要重认,最好先在powerpath中踢出磁盘,在OS上删除设备,尽量保持设备define,这样重认会重用现有的属性
可以考虑使用AIX VG,用lv作为asm disk,将控制权限交给AIX管理,这样是比较保险的,但估计很多人会觉得多包了层LVM不大爽
共享磁盘的lock属性,主要是为了控制多台主机对同一块磁盘设备的并发访问,每个厂商的设备基本都有这个设置,EMC的是reserve_lock,其他的也叫reserve_policy,大致意义是相同的,在访问这个设备的时候,会对设备打个标签,表示我已经持有了锁定,其他请求要访问时就会等待或失败,这个锁定的策略也是分好几种的
No Reserve reservation policy
这个表示不锁定
Exclusive Host Access single-path reservation policy
在san环境里面,一个LUN一般是由多条路径组成的,每条路径其实是个disk设备,他的Initiator就是光纤卡,
这些磁盘设备的锁定标志位就是以HBA卡来打的,所以HBA1打的标签,你通过HBA2是不能访问的,这个就叫single-path,
只有当HBA1失败后,切换到HBA2,标志位重新打过后,才能被访问
Persistent Reserve Exclusive Host Access reservation policy
我们上面说的hdiskpower应该就是这个策略,他是在HOST级别的,一般每个主机都会生成一个唯一的key,
标签在lun上打上后,后面只要是来自这个主机的请求,都可以访问这个lun,而其他主机由于生成的key不一样,
是没办法访问的
Oracle 11.1.0.7 ASMB进程存在内存泄露
目前还没有人发表评论 | 赶紧发表评论吧 | 作者:八神
今天在产品环境无意中通过topas发现,11G的asmb进程占用内存达到319M,对比了其他11G库的情况,都存在这个问题
ops$admin@omg>select PROGRAM,PGA_ALLOC_MEM / 1024 / 1024 as mb from v$process;
PROGRAM MB
———————– ———-
oracle@omg1 (ASMB) 319.256914
…
…
metalink上Doc ID: 6851110.8描述了这个问题,是BUG导致的内存泄露,使用11G R1 + ASM的同学可要注意了哈
这个系统是最近刚升级成11G的,运行了20天,算算下来每天泄露15M?有点恐怖了,所幸oracle提供了相关补丁,p6851110_111070_AIX5L.zip,后面找个时间应用上去看看
一个使用PC服务器的高可用性方案介绍
有10人发表了评论 | 赶紧发表评论吧 | 作者:osdba
以Intel Nehalem CPU的强劲性能和SSD盘的高iops为使用高性能pc服务器加SSD硬盘取代传统小型机加存储的方案成为可能。现在2颗4核的Intel Nelhalem cpu的性能已经达到或超过了一般的小型机的性能。单块SLC SSD硬盘的iops就可以达到10000以上,所以使用多块SSD硬盘的iops将超过或达到高端存储的IOPS的性能。
然而在pc服务器中缺乏与小型机系统上相应的成熟高可用方案,让大家对如何实现使用Intel Nehalem+SSD盘取带小型机成为困难,在这里我介绍一种目前在我们的一个应用场景中使用的一个高可用方案:
两台可插24块盘的宝德的PC服务器(Nelhalem CPU),可以混插SAS硬盘和SSD盘,我们这边大部分插了SSD盘,也插了少量SAS硬盘,混插的目的是数据库中有一些空间不是需要高IOPS的,如归档文件的空间,这样使用SAS硬盘既可以获得大空间,又可以减少成本(因为SSD盘还是比SAS硬盘贵很多),操作系统安装了Linux,数据库使用了oracle11g。
把两台机器的硬盘通过iscsi互相输出到对端机器上,iscsi是走的专用的网卡通道,然后在oracle asm中把本机的硬盘与另一台机器通过iscsi输过来的硬盘之间做镜像。正常工作时,数据库运行在一个节点上,为描述方便,本节点称为A机器,如果A机器的硬盘出现问题了,由于与另一台机器B机器的硬盘是在ASM中的做的镜像,所以数据库仍然能正常工作。如果A机器出问题了,则通过heartbeat做切换,数据库切换到B机器上运行,当A机器修好后,使用了oracle11g的快速同步功能,重新同步把A机器硬盘与B机器上硬盘进行同步,由于使用了oracle11g的快速同步功能,不需要做全量同步,只需要做一个增量同步就可以了,也就是说即使现在的数据库有2T大小,当A机器坏后到A机器修好后,数据库只发生了100G的变化量的话,重新同步只需要同步这100G的变化量的数据。这样就大大减少了恢复时间。
出现各种异常的解决办法:
假设数据库运行在A机器上:
- A机器的cpu、内存、主板坏,使用heartbeat做切换,数据库切换到B机器上运行。 等A机器修好了后,重新在asm中做磁盘同步就可以了。数据库不需要再切换回A机器运行。
- A机器操作系统出问题,使用heartbeat做切换,数据库切换到B机器上运行。
- A机器的硬盘坏,由于硬盘做了跨机器的镜像,同时Linux也支持在线换硬盘,可以在线换硬盘,换完后,再在asm中做磁盘同步。
- B机器坏,修好B机器后,在asm做快速增量同步。
11G数据库进程介绍
有2人发表了评论 | 赶紧发表评论吧 | 作者:vogts
最近DB升级到了11G,多了好多新的进程。这几天看了下,每个进程的作用。
oracle 29689 1 0 Oct29 ? 00:00:00 ora_q000_crmg
oracle 29691 1 0 Oct29 ? 00:00:14 ora_q001_crmg
queue monitor processes,可选的后台进程,主要是为流复制用的。最多能设置10个。
oracle 27720 1 0 Oct29 ? 00:02:35 ora_pmon_crmg
pmon进程
oracle 27740 1 0 Oct29 ? 00:34:14 ora_lgwr_crmg
写日志进程
oracle 27736 1 0 Oct29 ? 00:22:57 ora_dbw0_crmg
oracle 27738 1 0 Oct29 ? 00:02:43 ora_dbw1_crmg
Db writer进程
oracle 27742 1 0 Oct29 ? 00:06:23 ora_ckpt_crmg
CHECKPOINT进程
oracle 27744 1 0 Oct29 ? 00:00:58 ora_smon_crmg
smon进程
oracle 27746 1 0 Oct29 ? 00:00:00 ora_reco_crmg
Recoverer Process。这个进程主要处理分布式事务的,从rec0可以增长到recN。没有个数限制。
当和另外DB进行分布式事务的时候,就会自动增长。
oracle 27728 1 0 Oct29 ? 00:00:05 ora_dbrm_crmg
DATABASE RESOURCE manager。主要是做资源控制的,比如I/O,CPU。
我们设置了某个用户或某个session能使用多少CPU,等等,都是通过该进程来控制的。
oracle 27732 1 1 Oct29 ? 01:40:07 ora_dia0_crmg
DIA0 (diagnosability process 0) (only 0 is currently being used) is responsible for hang detection and deadlock resolution.
oracle 27726 1 0 Oct29 ? 00:00:00 ora_diag_crmg
DIAG (diagnosability) process performs diagnostic dumps and executes global oradebug commands.
oracle 28242 1 0 Oct29 ? 00:00:05 ora_fbda_crmg
flashback data archiver process。主要用于数据库回闪。保留前镜像,然后对数据进行归档用。
oracle 27734 1 0 Oct29 ? 00:00:00 ora_mman_crmg
MMAN is used for internal database tasks.
oracle 27748 1 0 Oct29 ? 00:03:58 ora_mmon_crmg
mmon进程
oracle 27730 1 0 Oct29 ? 00:00:01 ora_psp0_crmg
PSP0 (process spawner) spawns Oracle processes.
我的理解,主要是由它来产生其他processes。
oracle 29695 1 0 Oct29 ? 00:00:01 ora_smco_crmg
oracle 17037 1 0 11:04 ? 00:00:00 ora_w000_crmg
space management coordinator。主要用于空间管理,比如空间的收集,释放等等。Wnnn进程,也是通过该进程参数的。
oracle 27722 1 0 Oct29 ? 00:00:00 ora_vktm_crmg
virtual keeper of time。这个上次有篇文章说过,主要是11G的改进,以前是通过OS获取时间的,现在是通过ORACLE自己获得时间的。
每20MS重新刷一次。
oracle 27750 1 0 Oct29 ? 00:21:25 ora_mmnl_crmg
该进程主要负责性能相关数据分析,收集。比如 V$SESSION_WAIT_HISTORY 里的数据,都是通过该进程收集的。
应用DBA的价值
有16人发表了评论 | 赶紧发表评论吧 | 作者:grassbell
关于应用DBA的价值 和对团队的贡献,前几天在一个小范围作了个讨论,以下是我做的一个整理(70%引自大师):
产品DBA和应用DBA不过是阿里巴巴DBA在成长路线上的两种方式。因为我们以前都是纵向的在技能方面深入,所以最近两年比较强调横向的东西。横向的协调、沟通、推动,远比一个人去学习技能困难的多,而这种能力实际上是可以放到更多的环境中去施展的。技能却只能在这一个领域。主机、os、存储,相信以大家的悟性,1-2年经历足够让你觉得够没劲!
应用dba在当前更关注具体业务,所以涉及的范围也和具体业务部门相关。产品dba已经做到标准化,所以他们的职能是如何进一步提高所有数据库的管理效率。从长远看,应用dba不应该局限于简单的sql优化、项目跟进 甚至数据订正,更应该站在应用的角度思考数据存放和读取的问题。Cobar是一个典型的例子,这应该是应用dba今后需要关注和发展的方向。Db今后的线性扩展和高可用方案,不可能只依赖于db本身的功能,更应该依赖应用架构本身解决这些问题。所以今后应用dba应该和架构部门密切合作,不断创造和发展这样的架构模型,真正解决数据库面临的问题,这也是对团队最大的贡献。
如何让团队在公司发挥重要作用,重要的是影响其他部门,让更多的部门收益,这样dba team才能在公司赢得尊重。记得上次半年奖项评选,有个部门的头居然不推荐自己团队的人,而是要跨部门推荐DBA,这件事情未获得andy的许可,因为这个结果会给其团队的人巨大的打击,老大不认可自己部门的人认可其他部门的人!但是在这个事情的现场我是很感激团队兄弟的努力,能让dba team赢得别人的尊重和认可。 而这些事情,基本主要都是应用dba贡献的价值。
所以实际上,应用dba的价值体现在整个团队对外展现,产品dba或者技能方面提高的dba是练内功影响自己的团队更多一些。 但你要说哪个价值大或者哪个困难,不同阶段答案是不一样的。看当时哪个是短板!但你可以去学习技能提高,而技能高的人却未必能做好你的事情,比如唐牛或者范鑫,他们要做应用DBA的事情,技能再强,恐怕也很难做的好,因为他们有自身的缺点,让他们做现在的事情主要目的是扬长避短,发挥自己的价值。如果某一日你真的觉得技能才是你唯一的方向,那也没关系,人生的轨道又不是死的,主管会充分考虑每个人的需求,结合整个团队来认真划分角色。所以在这个事情发生之前,做好的你手头的工作,再做的更好一些,最受益的是你自己!
11G real time query,BUG不是一般的多
有7人发表了评论 | 赶紧发表评论吧 | 作者:八神
sys@CRMG> desc b
Name Null? Type
———————————————————————————– ——– ——————————————————–
A DATE
C
–备库:
@> desc b
Name Null? Type
———————————————————————————– ——– ——————————————————–
A DATE
C DATE
sys@CRMG>rename b to c;
Name Null? Type
———————————————————————————– ——– ——————————————————–
A DATE
C
sys@CRMG> insert into c select sysdate,sysdate from user_objects;
–备库:
@>desc c;
Name Null? Type
———————————————————————————– ——– ——————————————————–
A DATE
C DATE
Name Null? Type
———————————————————————————– ——– ——————————————————–
A DATE
C
@>select count(*) from c;
———-
8606
@>select count(*) from b;
———-
8606
@>SELECT OBJECT_NAME,object_id,data_object_id from user_objects where object_name IN (’C',’B');
———- ———- ————–
C 16799 16799
@>alter system flush SHARED_POOL;
@>select count(*) from b;
select count(*) from b
*
ERROR at line 1:
ORA-00942: table or view does not exist
@>
ASM使用AIX raw disk的问题
有7人发表了评论 | 赶紧发表评论吧 | 作者:八神
同事在10G DOCS上看到,AIX下如果绕过VG,直接使用裸盘做ASM,当设备的PVID变化时,会引起磁盘组数据丢失
今天晚上做了测试
首先清除掉了hdiskpowerx上的pvid,发现再启动ASM的时候,mount dg出错了,
–清除pvid,lspv显示pvid为none
root@crmg_pri:/>chdev -l hdiskpower12 -a pv=clear
hdiskpower12 changed
root@crmg_pri:/>chdev -l hdiskpower13 -a pv=clear
hdiskpower13 changed
root@crmg_pri:/>chdev -l hdiskpower14 -a pv=clear
hdiskpower14 changed
root@crmg_pri:/>chdev -l hdiskpower15 -a pv=clear
hdiskpower15 changed
–mount diskgroup,报错磁盘不足,盘头信息已经不对了
@>alter diskgroup dg1 mount;
alter diskgroup dg1 mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15063: ASM discovered an insufficient number of disks for diskgroup “DG1″
–查看磁盘头状态,为PROVISIONED
@>select state,mode_status,mount_status,header_status from v$asm_disk;
STATE MODE_STATUS MOUNT_STATUS HEADER_STATUS
—————- ————– ————– ————————
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED CANDIDATE
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED PROVISIONED
NORMAL ONLINE CLOSED CANDIDATE
NORMAL ONLINE CLOSED PROVISIONED
这个状态的官方解释:
PROVISIONED - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement.
The PROVISIONED header status is different from the CANDIDATE header status in that PROVISIONED implies
that an additional platform-specific action has been taken by an administrator to
make the disk available for Automatic Storage Management.
意思是现在这个盘,是完全可以作为全新的盘加入到DG的,也就是说ASM已经不认识上面的数据了,只能重用,上面的数据也就丢失了
前面是PVID从有到无的过程,下面再验证下PVID从无到有的过程,先将所有的power lun的PVID清除掉,并创建了DG,可以正常mount
然后给PV生成新的pvid
chdev -l hdiskpower13 -a pv=yes
…
…
–mount出错
@>alter diskgroup dg1 mount;
alter diskgroup dg1 mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15040: diskgroup is incomplete
ORA-15042: ASM disk “4″ is missing
–ASM disk状态已经改变
@>select state,mode_status,mount_status,header_status from v$asm_disk;
STATE MODE_STATUS MOUNT_STATUS HEADER_STATUS
—————- ————– ————– ————————
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED CANDIDATE
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED CANDIDATE
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED MEMBER
NORMAL ONLINE CLOSED CANDIDATE
NORMAL ONLINE CLOSED MEMBER
磁盘组数据仍然丢失了
可以看出,在AIX上,直接使用rhdisk,或者rpowerdisk来创建ASM后,一旦PVID有变化,ASM的数据都会丢失的,除非事先已经备份好
每个ASM磁盘头的信息,否则修复起来是很困难的,这个是使用AIX raw disk+ASM要注意的
但文档中说的ASM的格式化会破坏磁盘的PVID,当OS重启时,会从ODM库将PVID同步回磁盘,反过来会破坏掉ASM,这个情况经过测试,没有出现
也许是因为上面的测试是在11G里面做的
关于PVID
PVID是用于标识physical volumn的一个标识符,有主板序列+时间戳组成,他的本意是做到这个号码在世界上是唯一的,PVID存在于3个地方,
物理卷的磁盘头
VGDA(如果没做VG,这部分就不存在)
ODM库
PVID最初的源头是在物理磁盘头上,后面两个都是从这里读取的,所以一个LUN如果共享给多个主机使用,每台主机看到的pvid都是一样的
一般在做VG或者手工chdev -l 时,会给盘付上pvid,理论上,上面3个地方的PVID应该是高度一致的,如果人为强行破坏,可能引起数据丢失,
比如VGDA的PVID与磁盘头的PVID信息不一致时,会导致VG不能varyon和import
也有人通过DD的方式手工修改PVID,这些动作都是非常危险的
另外请参考:Doc ID: 750016.1



