Archive for March, 2008

全文索引的代价

Tuesday, March 11th, 2008

今天下午做了全文索引的update测试。被测试的SQL如下:
update ali_zeus_customer set OPEN_REASON=’wt’ where rownum=1 (OPEN_REASON字段是个全文索引字段)

结果做了把TRACE发现,仅仅是这条UPDATE,全文索引需要执行下面一系列的SQL,比普通INDEX字段维护的大家和成本要高很多。
update ali_zeus_customer set OPEN_REASON=’wt’ where rownum=1
DELETE “ZEUS”.”DR$ALI_ZEUS_CUST_OPEN_CIND$K” WHERE TEXTKEY = :rid RETURNING DOCID INTO :docid
INSERT INTO “ZEUS”.”DR$ALI_ZEUS_CUST_OPEN_CIND$N” (NLT_DOCID,NLT_MARK) VALUES(:docid,’U’)
INSERT INTO DR$DELETE (DEL_IDX_ID,DEL_IXP_ID,DEL_DOCID) VALUES(:idxid,:ixpid,:docid)
INSERT INTO CTXSYS.DR$PENDING (PND_CID, PND_PID, PND_ROWID, PND_TIMESTAMP, PND_LOCK_FAILED) VALUES(:1, :2, :3, SYSDATE, ‘N’)
begin ctxsys.syncrn(:idxid, :ixpid, :rtabnm); end;
select del_docid from ctxsys.dr$delete where del_idx_id = :idxid and del_ixp_id = [...]

Returnning into的使用

Tuesday, March 11th, 2008

今天在做ORACLE本身的TRACE的时候发现的。以前还真没用过。示例如下:
 @>create table wt(id number,name varchar2(200)); Table created. 
@>insert into wt values(1,’mytest’); 
1 row created. 
@>commit; Commit complete. 
@>declare  
2  va varchar2(200); 
3  begin 
4  delete from wt where id=1 returning name into va; 
5  dbms_output.put_line(’My value:’ || va); 
6  end; 
7  /
My value:mytest 
PL/SQL procedure successfully completed.

Mysql测试三:Mysql + DRBD + Heartbeat(v1)基本配置笔记及切换测试

Wednesday, March 5th, 2008

1、下载对应版本的heartbeat包
    由于安装beartbeat的rpm包需要其他一些包为前提条件,所以可能还需要下载对应版本的其他的几个rpm包,像如下:
    [root@mysql1 heartbeat]# rpm -ivh heartbeat-2.1.3-3.el4.centos.i386.rpm
    warning: heartbeat-2.1.3-3.el4.centos.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
    error: Failed dependencies:
            heartbeat-pils = 2.1.3-3.el4.centos is needed by heartbeat-2.1.3-3.el4.centos.i386
            heartbeat-stonith = 2.1.3-3.el4.centos is needed by heartbeat-2.1.3-3.el4.centos.i386
            libpils.so.1 is needed by heartbeat-2.1.3-3.el4.centos.i386
            libstonith.so.1 is needed by heartbeat-2.1.3-3.el4.centos.i386
    然后下载heartbeat-pils-2.1.3-3.el4.centos.i386.rpm和heartbeat-stonith-2.1.3-3.el4.centos.i386.rpm,
在安装这两个包之后,即可正常安装heartbeat了。
2、配置相关文件
    1) 找到安装后heartbeat的文档目录,将三个需要的配置文件样例copy到/etc/ha.d目录下准备后面的配置设
置(这样会更方便,而且有较为详细的配置说明):
    [root@mysql1 ha.d]# rpm -q heartbeat -d
    …

    /usr/share/doc/heartbeat-2.1.3/AUTHORS
    …

    [root@mysql1 ha.d]# [...]

Mysql测试二:DRBD+Mysql 高可用方案设置测试

Tuesday, March 4th, 2008

测试环境:rhel3.5,drbd 8.0.7,mysql5.0.51-rc-log
1、首先从www.drbd.org下载了源代码包(我下载的8.0.7版本的包)
2、检查主机上面有没有linux的内核源代码,如果没有,需要找到相对应版本的源代码包安装上去。
3、开始安装drbd:
    1) 解压:tar -zxvf drbd-8.0.7.tar.gz
    2) 进入drbd源码目录,根据kernel源码位置来编译drbd:
    make KDIR=/usr/src/kernel/    (如果没有更改过内核,可以直接运行make,编译程序会到/lib/module里面去自己根据相关配置寻找到kernel源码)
    make install
    如果没有报错,应该基本install好了,检查是否生成了相应的文件:/etc/drbd.conf ; /etc/init.d/drbd ; 以及./drbd/drbd.ko
    同时系统应该至少多了以下两个命令:drbdadm和drbdsetup
    不要删除此源码目录,后面还会用到里面的./scripts/drbd.conf 和 ./drbd/drbd.ko
4、现在可以加载安装drbd模块了
    insmod drbd.ko 或者 modprobe drbd
    通过lsmod检查是否已经成功
    #lsmod |grep drbd
    如果有,则表示成功了
5、更改drbd配置文件:
    /etc/drbd.conf
    [root@mysql1 ha.d]# cat /etc/drbd.conf
    …
    on mysql1 {
      device     /dev/drbd0;
      disk       /dev/i2o/hda9;
      address    10.0.65.45:8888;
      flexible-meta-disk  internal;
    }
    on mysql2 {
      device    /dev/drbd0;
      disk      /dev/sde2;
      address   10.0.65.106:8888;
      meta-disk internal;
    }
    …
6、primary node设置:
    1) 创建matadata:
    #drbdadm create-md all
    2) 启动drbd:
    #/etc/init.d/drbd start
    3) 设置为主节点:
    #drbdadm [...]

Mysql测试一:Mysql Slave群切换Master

Monday, March 3rd, 2008

测试环境:
Type           OS               Mysql
Master       rhel3.5           5.1.22-rc-log
Slave1       rhel3.5           5.1.22-rc-log
Slave2       rhel4.4           5.1.22-rc-log
切换测试过程是:1) Master down
               2) Slave1 切换成新的Master
               3) Slave2 更换Master配置为原Slave2
详细过程如下:
1、从slave(slave1)群众中选定一个slave,准备钱换成master;
2、检查slave1的复制状态:
mysql> SHOW PROCESSLIST ;
+—-+————-+———–+——+———+————+———————————————————————–+——————+
| Id | User        | Host      | db   | Command | Time       | State                                                                 | Info             |
+—-+————-+———–+——+———+————+———————————————————————–+——————+
|  1 | system user |           | NULL | Connect |      54733 | Waiting for master to send event                                      | NULL             |
|  2 | [...]

阳光,草地,足球

Sunday, March 2nd, 2008

这个周末去财经踢球了,不幸的是,在踢一个球的时候,球踢空了。结果脚踝扭了。走路不成问题,但是不好发力。
躺在草地上,面对蓝天,感觉无比的惬意。很爽,很舒服!真惬意。要是天天能这样就好了。
今天下午去了孤山,也是面对太阳,太爽了。感觉人都飘起来了爽啊!
要是天天都这样就好了,前提是大师发我工资。呵呵~··

利用块跟踪来缩短增量备份时间

Saturday, March 1st, 2008

        oracle提供增量备份数据库的功能,这个功能的大致原理就是根据上次备份记录的checkpoint scn来比较,备份自上次
备份以来,数据块头SCN变化过的块,9I版本的这个功能并不能有效减小备份时间,因为他还是要把整个文件读入缓冲区,逐个数据块进行检查和校验,只不过推入输出缓冲区的数据块会少很多,备份片会小很多,如果到备份设备的IO不存在瓶颈,花的时间可能和一次全备差不多,但是从10G版本开始,引入了BLOCK CHANGE TRACKING特性,这次算是真正的增量了。
当这个特性开启后,ORACLE会创建一个trace文件,并起用后台进程CTWR记录变化的数据块,当需要增量备份的时候,就直接读这个文件获得要备份的数据块,速度确实是有质的飞跃
–全备数据库
run
{
    allocate channel c1 device type disk format ‘/opt/oracle/rman/mydb_full_bck%u’;
    backup incremental level 0 database ;
}
allocated channel: c1
channel c1: sid=841 device type=disk
starting backup at 2008-03-01 18:19:10
finished backup at 2008-03-01 18:19:45
全备耗时35秒
–增量数据
sys@mydb>create table mytable tablespace myspace as select * from dba_objects where 1 = 2;
table created.
sys@mydb>insert into mytable select * from dba_objects;
12064 rows created.
……
sys@mydb>commit;
commit [...]

DBA