您当前的位置: 首页 > 数据库教程 > MySQL教程 > 降低CPU使用效率,将逻辑放置数据库以外处理

降低CPU使用效率,将逻辑放置数据库以外处理

作者:guanchaofeng 来源:不详 发布时间: 2009-05-09 12:44 点击:
今天碰到了性能问题,DBServer的CPU100%,vmstat的输出也很高。找到CPU高的sql语句是使用了一个将IP地址字符串转换为数字的PL/SQL自定义函数,后来将这个逻辑放到数据库外的VB程序实现,CPU使用率下降,问题解决。 其实那个函数处理并不复杂,也没有访问数据

降低CPU使用效率,将逻辑放置数据库以外处理

  今天碰到了性能问题,DBServer的CPU100%,vmstat的输出也很高。找到CPU高的sql语句是使用了一个将IP地址字符串转换为数字的PL/SQL自定义函数,后来将这个逻辑放到数据库外的VB程序实现,CPU使用率下降,问题解决。
  
  其实那个函数处理并不复杂,也没有访问数据库对象,没想到有如此大的影响。得出的结论就是:与数据库无关的处理过程放到数据库以外的调用程序来实现,即便用sql程序可以实现也应如此。
  
  还有一个要注意的问题,即不要在查询语句中调用自定义的PL/SQL函数,举个例子:
  
  自定义函数如下,输入16位整数IP地址,输出IP所属省份,ipbp中有8万条数据。
  
  CREATEORREPLACEFUNCTIONfn_ipaddr_to_province(p_ipaddrNUMBER)
  RETURNVARCHAR2
  IS
  v_retVARCHAR2(100):='';
  BEGIN
  BEGIN
  SELECTprovince
  INTOv_ret
  FROMipdb
  WHEREstart_ip<=p_ipaddrANDend_ip>=p_ipaddrANDROWNUM=1;
  EXCEPTION
  WHENNO_DATA_FOUND
  THEN
  v_ret:='';
  END;
  RETURNv_ret;
  EXCEPTION
  WHENOTHERS
  THEN
  RAISE;
  ENDfn_ipaddr_to_province;
  /
  
  根据省份确定服务器地址,DOMAINNAME中有35条数据。
  
  方法一:
  
  BEGIN
  SELECTserverip
  INTOv_serverip
  FROMDOMAINname
  WHEREprovince=fn_ipaddr_to_province(p_ip)ANDROWNUM=1;
  EXCEPTION
  WHENNO_DATA_FOUND
  THEN
  v_serverip:='mp3.u-vv.com';
  END;
  ...
  
  这种方法CPU使用率90%以上
  
  方法二:
  
  v_province:=fn_ipaddr_to_province(p_ip);
  BEGIN
  SELECTserverip
  INTOv_serverip
  FROMDOMAINname
  WHEREprovince=v_provinceANDROWNUM=1;
  EXCEPTION
  WHENNO_DATA_FOUND
  THEN
  v_serverip:='defaultDOMAIN';
  END;
  ...
  
  这种方法CPU使用率40%左右

分享到:
本文"降低CPU使用效率,将逻辑放置数据库以外处理"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4