首页 | 摘要显示 | 上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下一页

DBA Archives

January 15, 2008

推荐Piner的新书

    周末去参加了IT168 / ITPub / IXPub在北京九华山庄举行的2008中国IT技术精英年会, 第二个(第一个是eygle, 前后脚关系, 应当说是不分先后的)拿到了piner花了一整年时间仔细编写的图书 -- Oracle高可用环境.

    在侯车室里, 在回程的路上, 我已经看了四分之一的篇幅, 可以告诉大家谁应当看这本书.

    1, 我应当看这本书. 由于目前公司的分工详细, 接触的范围较狭小, 看这本书可以开拓我的视界. 其他想扩大知识面的人也应当看这本书.

    2, 企业的IT部门经理及相关人员应当看, 看淘宝如何选择平台及解决方案, 从而成功地合理地部署企业的信息平台.

    3, 广大的IT技术支持工程师应当看, 可以学习如何专业的提供支持, 以为公司接到淘宝这样级别的大客户打下技术基础.

    4, 广大的DBA应当看这本书, 可以了解要做一个好的DBA需要多少知识, 想要当Manager的DBA更要看, 看看一流企业的DBA经理是如何工作的.

    这是一本很不错的书. 也让想写一本书了, 当然我没有那么大的知识面, 想写Oracle及程序优化(比较偏向数据库开发人员)方面的一本书, 在那儿我还有一点点专长.

分析用户所有表之后

    随着Oracle对CBO的进一步增强和改进, 对表进行分析已经成为一种常用的调优的手段, 当发现某个表的相关SQL语句的执行计划有问题时, 首先会想是不是统计信息过旧的问题, 如果的确是过旧, 则对这个表进行分析, 以让Oracle重新选择准确的最优执行计划, 以达到调优的目标. 用不合适的方式对表进分析, 则会造成十分严重的后果, 如对一个用户下的所有表进行分析, 或一下子分析多个表. 看到网友的一篇贴子, 让我想起二年多前帮别人处理过的一个案例, 有位DBA对某用户下的所有表进行了分析.

    基本情况是, IBM P570, 16CPU, 32GB内存, 24GB的SGA, 支持不了一个50G的9i数据库(OLTP类型), 二百个以内的会话. 在分析之前CPU利用率是50-70%左右, 在分析后则一直是100%. 面临这样的情况后, 由于没有做统计信息(Statistics)的备份, 因此无法恢复以前的情况, 首先做的是删除所有非分区表的统计信息, 对分区表做更精确的统计信息分析, 使之运行于RULE方式, 情况稍有好转, 但用户还是不能接受, 相信Oracle的CBO没有那么差, 因此性能问题的关键并不在于统计信息了. 在处理了以下几个问题之后, 成功地降底了CPU的利用率.

    1, 发现繁烦的并行进程, 发现一个几有几十MB大小的表, 它的并行度不为1, 因此导致了这个表上的一个执行比较繁烦SQL采用了并行处理, 将并行度改成1后, CPU利用率降低了20%, 基本上恢复到了分析前的水准.

    2, 发现一个后台发票打印程序的SQL有太多的逻辑读, 对发票打印模式进行分析后, 建议将执行繁率从每10秒执行一次降底到1分钟执行一次, 因为从售货台到打印发票的地方取发票需要走1分钟左右. 再检查其SQL, 发现其中的日期条件默认是两年, 也就是要查最近两年的销售记录, 再找出没有打印过的记录进行处理, 通过询问销售人员有没有人会来要求打印两周以前的发票, 当然是很少的了, 后来将这个默认的日期条件改成了最近一个月. 做了这个改动后, 系统的CPU利用率下降到了50%.

    3, 接下来处理了一个库存查询有关的SQL, 对这个SQL本身没有作任何修改, 因为用户可以自定义条件(动态构造WHERE条件)进行查询, 发现很多用户只选了最少的条件进行过滤, 导致了这个SQL运行效率极低, 解决办法就是培训前台用户, 让他们使用这个功能时, 尽可能地提供比较准确的查询条件. 这样一来, CPU利用率下降到了35%左右.

    4, 调整了一些SQL后, 新的SQL又出现了, 这一次的问题是, 看这个SQL的执行计划, 居然用了INDEX合并(Combine), 在where条件中用到了两个列, 开发人员在这两个列上分别建了索引, 但从单个列的角度来看, 效率不高, 但一组合效率则很高, 因此用复合索引解决此事. CPU利用率再次小降5%.

    5, 后面又调了几个SQL, 这次是创建了几个新的索引, CPU的利用率已经下降到了20-25%, 目标完成.

    总地来说, 分析表从来都不是优先考虑的调优手段, 从个人角度来看, 只有发现Oracle在某个表上选择了错误的执行计划后, 才会对单个表进行分析(分析之前先做备份, 除非很确定), 然后观察, 再分析下一个表.

January 16, 2008

SQL Server Express 2005

    为了抵抗开源数据库(MySQL, PostgreSQL等)的进攻, 为了拉拢开发人员, 各家数据库都出了Express版本, 今天突发兴趣地装了一个Microsoft SQL Server Express Edition 2005, 发现很小巧, 安装软件才36MB, 比Oracle 10g Express小巧多了. 想当年我还做过MCDBA中的SQL Server管理和开发课程老师呢, 去年还帮一家房产网站(用的也是SQL Server)去解决性能问题, 最近又看到有人问如何从SQL Server向Oracle迁移图片数据, 因此装一个玩玩吧! 顺便测试一下我的asyncdata数据迁移角本.

    安装的过程很简单, 因为是Express版本, 所以根本不让你有选择的余地, 就装完了. 装完后要改两处, 一是允许远程连接, 二是要改监听端口. 前者在Surface Area Configuration中改, 选择配置服务和连接, 再点中远程连接, 允许允许本地和远程连接, 只允许TCP/IP的远程连接, 就可以了. 第二个到Configuration Manager中去配置, 选中SQLEXPRESS协义, 双击TCP/IP, 在IP地址这一页的最下面, IPALL部份, 清掉TCP动态端口设置, 在TCP端口处填入1433(SQL Server默认的端口). 然后重启一下SQL Server (Express)服务使之生效.

    由于只安装了最基本的部份, 因此没有图形管理工具可用, 居然感觉束手无策, DBA离开图形工具还真不容易! 有两个工具可以用, osql和sqlcmd. osql其实是ODBC SQL客户端工具的简写, 而sqlcmd好象是新增的, 7年多没有接触SQL Server了. 还用我的一个Java客户端工具连接了一把, 也许有空整整AnySQL for SQL Server/Sybase了.

    DB2的Express版本可以在哪儿下载? Sybase的ASE版本网上是可以下载, 只是要填写的资料太多了, 懒得下载了. 今天只完成了安装, 希望后面有空可以看看.

January 24, 2008

有恢复业务, 你想去做?

    在某一台机器上有两个数据库, 简称A库和B库. 有一天向A库加数据文件时, 用了B库中的某一个文件, 因此B库坏了, 某个表空间坏了, 有些表不能访问了. 其他情况如下:

  1. 没有任何数据文件备份.
  2. 有最近一年的归档日志.
  3. 那个文件是在最近一年之内(2007年9月份之前)新建的.
  4. 2007年10月26号的某一个日志坏了, Oracle恢复不运去了.
  5. 在这个坏的文件上有Extent的表有25个.
  6. 2007年10月26后到现在的归档日志大约有几百个.

    依我个人意见, 我直接地告诉他们不可能完全(100%)恢复了, 当然可能其他人还有办法了, 他们的领导说了, Oracle一定能全部恢复就能100%恢复. 人家在QQ上不时地问了我三天有关这个恢复的问题了, 解释来解释去, 嫌烦了, 因为我做不到100%恢复, 所以将这个机会共享出来给大家.

    有兴趣的可以问我要他们的QQ号, 正急着呢! 估计这几天如果不搞定, 再过几天就过年去了, 没有心思去搞了.

February 14, 2008

Rename Table的语法

    谁都知道在SQL*Plus中重命名(Rename)一个表的命令, 如下所示:

RENAME old_name TO new_name

    但需要注意的是这个命令是SQL*Plus的命令, 如果将它放在你自已的程序(如:Java, Perl等)中, 则是会报错的. 这时应当用标准的重命名语法:

ALTER TABLE old_name RENAME TO new_name

    重命名索引时, 就必须用标准的数据库命令了.

ALTER INDEX old_name RENAME TO new_name

    有些SQL*Plus的命令, 在前面加上ALTER之类的就成了标准的数据库命令了, 如:

RECOVER STANDBY DATABASE UNTIL ...
ALTER DATABASE RECOVER STANDBY DATABASE UNTIL ...

    今天用Perl程序来重命名很多表时, 突然发现不能用SQL*Plus中的语法, 特此记录一下.

上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下一页

当前分类: DBA

Creative Commons License
本站版权: 共用创作 CC
署名-非商业性-相同方式分享
本站基于MT-3.36免费版
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql