Tip: 订阅AnySQL | AUL许可证 | 软件下载 | DBA Tools | Sybase恢复 | Oracle SOS

优化一条UPDATE语句

    最近见到一条开发人员写的UPDATE语句, 觉得没什么不对, 可又觉得有地方不对, 因为性能低下.

UPDATE A SET
  (COL2, COL3) = (SELECT COL1,'T'
      FROM B WHERE B.COL1=A.COL1)
WHERE EXISTS
  (SELECT B.COL1 FROM B WHERE B.COL1=A.COL1)

    也就更新几十万条记录, 没这么慢的啊. 最后发现这个SQL语句可以简化为如下.

UPDATE A SET COL2=COL1, COL3='T'
WHERE EXISTS
  (SELECT B.COL1 FROM B WHERE B.COL1=A.COL1)

    说明还有很多可以提高的地方.

根据表名搜索SQL语句

    用全文索引做了一个根据表名查找SQL语句的功能. 在Statspack中有一个表存放了数据库中执行过的SQL, 虽然不是全部, 但也有差不多99.9%了. 只是由于它是分行存贮的, 不能直接用普通的SQL语句(like)来查找, 表名有可能被折分存放在两行中. 解决的方法有两种, 一是写过程, 将多行的串在一起. 二是用全文索引中的主从存贮方式, 建立全文索引来查询. 我选择的是全文索引的方式.

    先将这里面的数据拷出来, 分成两个表, 主表和从表.

CREATE TABLE SQLS AS
  SELECT DISTINCT HASH_VALUE,'X' BODY FROM STATS$SQLTEXT;
ALTER TABLE SQLS ADD PRIMARY KEY (HASH_VALUE);
CREATE TABLE SQL_DETAILS AS
  SELECT HASH_VALUE,PIECE,SQL_TEXT FROM STATS$SQLTEXT;
ALTER TABLE SQL_DETAILS ADD PRIMARY KEY (HASH_VALUE, PIECE);

    创建全文索引的存贮方式及Lexer属性.

begin
ctx_ddl.create_preference('sqltext_pref', 'DETAIL_DATASTORE');
ctx_ddl.set_attribute('sqltext_pref', 'binary', 'true');
ctx_ddl.set_attribute('sqltext_pref', 'detail_table', 'sql_details');
ctx_ddl.set_attribute('sqltext_pref', 'detail_key', 'hash_value');
ctx_ddl.set_attribute('sqltext_pref', 'detail_lineno', 'piece');
ctx_ddl.set_attribute('sqltext_pref', 'detail_text', 'sql_text');
end;
/
begin
ctx_ddl.create_preference('sqltext_lex', 'BASIC_LEXER');
ctx_ddl.set_attribute ('sqltext_lex', 'continuation', '_');
ctx_ddl.set_attribute ('sqltext_lex', 'printjoins', '_');
ctx_ddl.set_attribute ('sqltext_lex', 'index_themes', 'NO');
ctx_ddl.set_attribute ('sqltext_lex', 'index_text', 'YES');
end;
/

    接下来创建全文索引.

CREATE INDEX SQL_CTX on SQLS(body) indextype is ctxsys.context
parameters('datastore sqltext_pref LEXER sqltext_lex');

    接下来就可以查询了.

SELECT HASH_VALUE FROM SQLS WHERE CONTAINS(BODY,'tablename and ...') > 0

    接下来要好好用用这个功能了.

整合Apache和Tomcat

    先下载mod_jk模块, 放到apache的modules目录下. 然后创建一个mod_jk.conf文件.

LoadModule jk_module modules/mod_jk.so
JkWorkersFile $TOMCAT_HOME/conf/workers.properties
JkLogFile $TOMCAT_HOME/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

JkMount /webchart/* worker1

    创建上面提到的workers.properties文件, 内容如下所示.

workers.tomcat_home=$TOMCAT_HOME
workers.java_home=$JAVA_HOME
ps=/
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

    再启动Tomcat.

export JAVA_OPTS=-Djava.awt.headless=true
./startup.sh

    在Apache的配置文件中, 加入mod_jk.conf文件.

include "/path/mod_jk.conf"

    再重启一下Apache就好了.

找回126邮箱的密码

    3月24号时突然发现126邮箱不能登录了, 我发誓没有记错密码, 多年以来一直用它, 很多人都用这个电子邮箱和我联系, 丢了还是很麻烦的, 好想找回来. 一时间又记不起密码恢复的答案, 通过客服方式却发现不容易证明这个邮箱是我的, 总之好象要找回密码好象无望了, 想不通的只是3月23号晚上还可以登录的邮箱, 过了一个晚上就怎么也登不上去了.

    这可是我使用时间最长的一个免费邮箱了, 难道是免费期过了? 难道是邮箱名称取得太好了而被回收? 难道是被人黑掉了? 就象盗取QQ号一样. 总之很是有些伤感, 以前丢了一个99年在Oracle OTN上注册的帐号, 还难过了好几天呢! 也发了几次邮件去问为什么? 当然是石沉大海了.

    今天和其他三位DBA(jametong, xzh2000, ningoo)一起爬完山, 其实是从住的地方出发, 上老和山, 再经北高峰到灵隐停车站, 转了一圈回来后, 突然头脑发晕地要去试试能不能找回邮箱密码, 居然在试了三下后猜到了当时填写的密码保护问案, 真是太开心了.

    只是在设置新的密码时, 发现以前常用的"@"符号不能用了, 和当年的metalink改版一样, 所有的新密码都不允许有"@"符了, 只允许字母数字和下划线了. 有可能是网易在3月24号早上对系统作了更改, 导致了有"@"符号的老密码不能工作了, 谁知道网易126有没有在那一天作这样的变更. 做DBA做久了, 总想知道确切的原因.

    发现有很多邮件都没有及时回复, 现在也不用回了, 希望他们不要怪我, 是因为我没有办法打开邮箱才不回的, 我自已也丢掉了一次给人做数据恢复(AUL)服务的机会.

最近收到的评注:

  • blueicesir 的留言 : 中国是这样的了!软件数据都是不值钱的!我们公司就是这样,我想申请一台服务器作主备,结果非否决了!
  • 99693177 的留言 : 专业邮箱破解先破解后收费 不收任何押金 ...
  • l1t 的留言 : ThinkPad T61 ...
  • oliver留言 : 刚好这个语句比较特别,如果不是col2=col1的话,也就是刚好2张都有col1字段,而且都相等。如果需要a.col2=b.col3的话,下面的方式就不行了。
  • 木又寸migretree 的留言 : 这样有精力,难怪半夜打我电话.
  • 王涛 的留言 : 我有IBM-T61 ,有要的加我呀,哈哈 ...
  • Magic 的留言 : 我试过很多方法 用SSH工具在Unix系统和LINUX下导出状态为0的EXCHANGE_TEMP ...
  • Magic 的留言 : exp ...
  • wang 的留言 : 不就是联想融合IBM
  • 中国人 的留言 : 女博士和普通人没什么分别,想考博的女同胞们不要因为这些话放弃考博哦。学习知识对每个人都是一样的。
  • shsuit 的留言 : 法派特:源自法国巴黎,吸取欧洲西服制作精华,高雅洒脱、 个性鲜明、 ...
  • anysql留言 : 这儿讲的例子也不对,我试了一下较大的表,几百兆的,空间使用就一样了。
  • 风铃之夜留言 : 楼主可否详细讲讲,或者推荐个讲ASSM的书?
  • jacky 的留言 : 老楼作为一代专业人士,也不大习惯用客户端收发信,还要登录web看信有失dba的身份啊,哈哈。
  • anysql留言 : 每个地方可能会不一样,不同的系统环境中起决定性的因素会不一样的。
  • Tina 的留言 : 我们好多老师老师都是女博士,也都年轻漂亮,时尚呀? 我看说女博士这个那个的,就是没事找茬型的,自己不上进还不想让别人好过。典型的酸葡萄!
 

分类 | Categories

订阅本站更新:

RSS 2.0
从FeedSky订阅
从FeedBurner订阅
添加到 Google Reader
添加到 Bloglines
添加到 抓虾
添加到 鲜果
添加到 News Gator
添加到 Windows Live
添加到 Rojo
添加到 Zaptxt

友情站点连接:

本站基于MT-3.36免费版, 和Fenng设计的模板
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利. 本Blog内容仅代表个人观点, 与其他任何组织或公司无关.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql