由于密码加密方式不同而导致db2连接慢得问题

 在suse10上使用c程序做连接数据库db2v9.1操作,使用top发现有三个root用户起的进程db2syscr占用大量cpu,导致性能急剧下降,完成一次打开数据库操作操作200毫秒。而在redhat上,没有该进程,并且同样程序同样的并发,完成一次只需要10来毫秒。

从网上查到的db2syscr进程的作用

db2syscr:

During instance startup, db2syscr process is started as root. It completes a number of tasks that require root privilege, then db2syscr switches to instance owner id and spawns db2sysc process

使用strace -f -p db2syscrpid 跟踪相关进程和子进程,

4926  semop(2719781, 0xbff975b0, 1)     = 0
4926  msgrcv(262149, 262149, {1, "\1\0\0\0q\32\0\0\350\17\1 \0\0\0\0iccs\0\0\0\0\0iccs12"...}, 8187, 0, MSG_NOERROR) = 92
4926  open("/etc/shadow", O_RDONLY)     = 3
4926  fcntl64(3, F_GETFD)               = 0
4926  fcntl64(3, F_SETFD, FD_CLOEXEC)   = 0
4926  _llseek(3, 0, [0], SEEK_CUR)      = 0
4926  fstat64(3, {st_mode=S_IFREG|0777, st_size=742, ...}) = 0
4926  mmap2(NULL, 742, PROT_READ, MAP_SHARED, 3, 0) = 0xb7f93000
4926  _llseek(3, 742, [742], SEEK_SET)  = 0
4926  munmap(0xb7f93000, 742)           = 0
4926  close(3)                          = 0
4926  time(NULL)                        = 1335342434

发现db2syscr进程主要是执行一些验证用户名和密码的操作,由于测试程序每次插表都要进行connect to 和disconnect,所以,db2syscr进程起作用。

之后,进一步使用下面脚本跟踪

for i in 0 1 2 3 4 5 6 7 8 9 
do  
gstack db2syscrpid > db2syscrstack.out
sleep 3  
done

发现,其主要做了如下些内容:

#0  0xb360933b in _crypt_blowfish_rn () from /lib/libcrypt.so.1
#1  0xb360afe4 in crypt_rn () from /lib/libcrypt.so.1
#2  0xb360b03e in fcrypt () from /lib/libcrypt.so.1
#3  0xb6bcd2f9 in sqlo_validate_pwd ()
#4  0xb6bceb4c in sqlockpw_daemon_main ()
#5  0xb6bcf14c in sqlockpw_daemon_init ()
#6  0xb55e3fb6 in sqloSystemControllerMain ()
#7  0xb55e2cd4 in sqloRunInstance () from /opt/ibm/db2/V9.1/lib32/libdb2e.so.1
#8  0x0804d47e in DB2main ()
#9  0x0804cd6c in main ()

从上面可以判断出,suse操作系统缺省使用blowfish加密方式,而这类加密方式相对比较慢,耗时。

修改/etc/default/passwd文件,将其中的加密方式改为md5,并且,将写blowfish文件的屏蔽掉,之后,重新修改执行并发测试用户的密码,重新执行,发现db2syscr进程在执行过程几乎可以或略,同时,访问速度大大提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章